powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / задача о рюкзаке (Knapsack Problem 0-1)
29 сообщений из 29, показаны все 2 страниц
задача о рюкзаке (Knapsack Problem 0-1)
    #35185905
Nicky_N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброго дня!
Необходимо решить классическую задачу о рюкзаке(из множества предметов, каждый из которых имеет свою стоимость и ценность, требуется отобрать некое число предметов таким образом, чтобы получить максимальную суммарную ценность при одновременном соблюдении ограничения на суммарную стоимость):
(∑pjxj) –> max,
∑wjxj ≤ c,
xj = {0;1}, j = 1..n, где pj - ценность вещи j, wj - стоимость вещи j.
Мне известны 4 метода решения:
1. Динамическое программирование. 2. Жадный алгоритм. 3. Метод ветвей и границ. 4. Генетический алгоритм.
Во всех источниках вводится ограничение на целочисленность данных pj, wj, с; в моей задаче: wj и с имеют денежный эквивалент. Хотя от этого еще можно избавится, домножив на 100, то что делать с размерами данных (10000, 20000, 100000), я не знаю, во всех примерах описаны данные до 100.
Трудоемкость динамического программирования O(n*c), и если с порядка сотен тысяч при n до 20,то получается многовато памяти, жадный алгоритм не дает оптимального решения в дискретном случае.
Подскажите, пожалуйста, какой алгоритм применим в этом случае(при таких огромных wj и с), с возможностью запрограммировать его на Delphi или C?

Заранее благодарен!
...
Рейтинг: 0 / 0
задача о рюкзаке (Knapsack Problem 0-1)
    #35185936
C#C++
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По моему, условие как раз для Симплекс-метода, а может, для Метода потенциалов (транспортная задача)...
Точно не помню
...
Рейтинг: 0 / 0
задача о рюкзаке (Knapsack Problem 0-1)
    #35185982
Nicky_N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
C#C++По моему, условие как раз для Симплекс-метода, а может, для Метода потенциалов (транспортная задача)...
Точно не помню

Нигде в источниках по knapsack problem 0-1 симплекс-метод для этой задачи не описан, к тому же, по-моему, он тоже труден для программирования!
...
Рейтинг: 0 / 0
задача о рюкзаке (Knapsack Problem 0-1)
    #35186101
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nicky_NВо всех источниках вводится ограничение на целочисленность данных pj, wj, с; в моей задаче: wj и с имеют денежный эквивалент. Хотя от этого еще можно избавится, домножив на 100, то что делать с размерами данных (10000, 20000, 100000), я не знаю, во всех примерах описаны данные до 100.И что тебя в этом всем смущает?
Во первых, никакого ограничения на целочисленность данных на самом деле нет, возможно ее ввели в твоем учебнике чтобы было проще объяснить алгоритм, но на самом деле целая у тебя буханка хлеба кладется в рюкзак или половинка - разницы для алгоритма укладки нету никакой.
Во вторых, примеры это примеры, на них надо смотреть, но они не руководство к действию и уж тем более не ограничитель чего-либо.
...
Рейтинг: 0 / 0
задача о рюкзаке (Knapsack Problem 0-1)
    #35186423
Nicky_N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl Nicky_NВо всех источниках вводится ограничение на целочисленность данных pj, wj, с; в моей задаче: wj и с имеют денежный эквивалент. Хотя от этого еще можно избавится, домножив на 100, то что делать с размерами данных (10000, 20000, 100000), я не знаю, во всех примерах описаны данные до 100.И что тебя в этом всем смущает?
Во первых, никакого ограничения на целочисленность данных на самом деле нет, возможно ее ввели в твоем учебнике чтобы было проще объяснить алгоритм, но на самом деле целая у тебя буханка хлеба кладется в рюкзак или половинка - разницы для алгоритма укладки нету никакой.
Во вторых, примеры это примеры, на них надо смотреть, но они не руководство к действию и уж тем более не ограничитель чего-либо.
Я просмотрел не один учебник, форум и сайт (в т. ч. даже иностранные источники) и везде(!), везде принимают ограничение на целочисленность параметров(проверить легко: наберите в гугле "задача о рюкзаке", откройте любые ссылки и Вы убедитесь в этом сами). Меня смущает то, что многие алгоритмы(динамич. прогр., жадный алгоритм) дают квазиоптимальное решение(т.е. почти оптимальное, но не на 100%). Трудность других же зависит от параметров (от n и c) и чем больше эти параметры, тем возрастает сложность алгоритма, а у меня они большие.
Я и хочу узнать, если какой-нибудь алгоритм, дающий оптимальные решения, сложность которого меньше, чем О(n*c).
...
Рейтинг: 0 / 0
задача о рюкзаке (Knapsack Problem 0-1)
    #35186434
Nicky_N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извините, я оговорился: динамическое программирование дает как раз оптимальное решение, но со сложностью О(n*c), т.е. в моем случае - при n = 15 и c = 100000 сложность О(1500000).
...
Рейтинг: 0 / 0
задача о рюкзаке (Knapsack Problem 0-1)
    #35186459
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nicky_NЯ просмотрел не один учебник, форум и сайт (в т. ч. даже иностранные источники) и везде(!), везде принимают ограничение на целочисленность параметровА что такое параметр? Веса предметов и их стоимости это не параметры, а данные. На целочисленность данных там ограничений нигде не ставят? Нет?
...
Рейтинг: 0 / 0
задача о рюкзаке (Knapsack Problem 0-1)
    #35186471
Nicky_N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl Nicky_NЯ просмотрел не один учебник, форум и сайт (в т. ч. даже иностранные источники) и везде(!), везде принимают ограничение на целочисленность параметровА что такое параметр? Веса предметов и их стоимости это не параметры, а данные. На целочисленность данных там ограничений нигде не ставят? Нет?
Да, Вы правы это данные, как раз на их целочисленность и ставят ограничения!
...
Рейтинг: 0 / 0
задача о рюкзаке (Knapsack Problem 0-1)
    #35186489
Ilya Anfimov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On Wed, Mar 12, 2008 at 05:47:07PM +0000, Nicky_N wrote:
>
> Автор: [1]Nicky_N
> Извините, я оговорился: динамическое программирование дает как раз
> оптимальное решение, но со сложностью О(n*c), т.е. в моем случае - при
> n = 15 и c = 100000 сложность О(1500000).

И что, полтора миллиона -- это много что-ли?

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
задача о рюкзаке (Knapsack Problem 0-1)
    #35186496
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nicky_N White Owl Nicky_NЯ просмотрел не один учебник, форум и сайт (в т. ч. даже иностранные источники) и везде(!), везде принимают ограничение на целочисленность параметровА что такое параметр? Веса предметов и их стоимости это не параметры, а данные. На целочисленность данных там ограничений нигде не ставят? Нет?
Да, Вы правы это данные, как раз на их целочисленность и ставят ограничения!дааа..... теоретик...

Ну давай по рабоче-крестьянски посмотрим на твою задачу. Давай попробуем ее решить а не рассуждать о ней. Вот на чем ты ее хочешь решать? Дельфи-Си? Выбирай любой и задай для начала массивы для своих p (ценности вещей) и w (стоимости вещей) и ограничивающую константу c - максимальную стоимость. Массивы с данными у тебя будут размером 15 элементов, а какой тип данных ты выберешь для этих массивов и для константы?
...
Рейтинг: 0 / 0
задача о рюкзаке (Knapsack Problem 0-1)
    #35186503
Nicky_N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ilya Anfimov
On Wed, Mar 12, 2008 at 05:47:07PM +0000, Nicky_N wrote:
>
> Автор: [1]Nicky_N
> Извините, я оговорился: динамическое программирование дает как раз
> оптимальное решение, но со сложностью О(n*c), т.е. в моем случае - при
> n = 15 и c = 100000 сложность О(1500000).

И что, полтора миллиона -- это много что-ли?

Posted via ActualForum NNTP Server 1.4

Ну вообще-то, да!
Уважаемые, Вы с этими алгоритмами сталкивались когда-нибудь?
...
Рейтинг: 0 / 0
задача о рюкзаке (Knapsack Problem 0-1)
    #35186512
Nicky_N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl Nicky_N White Owl Nicky_NЯ просмотрел не один учебник, форум и сайт (в т. ч. даже иностранные источники) и везде(!), везде принимают ограничение на целочисленность параметровА что такое параметр? Веса предметов и их стоимости это не параметры, а данные. На целочисленность данных там ограничений нигде не ставят? Нет?
Да, Вы правы это данные, как раз на их целочисленность и ставят ограничения!дааа..... теоретик...

Ну давай по рабоче-крестьянски посмотрим на твою задачу. Давай попробуем ее решить а не рассуждать о ней. Вот на чем ты ее хочешь решать? Дельфи-Си? Выбирай любой и задай для начала массивы для своих p (ценности вещей) и w (стоимости вещей) и ограничивающую константу c - максимальную стоимость. Массивы с данными у тебя будут размером 15 элементов, а какой тип данных ты выберешь для этих массивов и для константы?

int64 или double
...
Рейтинг: 0 / 0
задача о рюкзаке (Knapsack Problem 0-1)
    #35186524
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nicky_N White OwlМассивы с данными у тебя будут размером 15 элементов, а какой тип данных ты выберешь для этих массивов и для константы?
int64 или doubleНо все таки, int64 или double?
...
Рейтинг: 0 / 0
задача о рюкзаке (Knapsack Problem 0-1)
    #35186529
Nicky_N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl Nicky_N White OwlМассивы с данными у тебя будут размером 15 элементов, а какой тип данных ты выберешь для этих массивов и для константы?
int64 или doubleНо все таки, int64 или double?
double
Извините, я не могу понять, при чем здесь это? проблема не в кодировании, а в алгоритме!
...
Рейтинг: 0 / 0
задача о рюкзаке (Knapsack Problem 0-1)
    #35186539
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nicky_N White Owl Nicky_N White OwlМассивы с данными у тебя будут размером 15 элементов, а какой тип данных ты выберешь для этих массивов и для константы?
int64 или doubleНо все таки, int64 или double?
doubleИ если мы объявим массив стоимости вещей так:
Код: plaintext
double W[ 15 ];
То мы сможем отдать этот массив в функцию которая запустит алгоритм укладки рюкзака методом динамического программирования? Этот алгоритм будет работать или нет?

Nicky_NИзвините, я не могу понять, при чем здесь это? проблема не в кодировании, а в алгоритме!Потерпи чуток, скоро увидишь.
...
Рейтинг: 0 / 0
задача о рюкзаке (Knapsack Problem 0-1)
    #35186545
Nicky_N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторТо мы сможем отдать этот массив в функцию которая запустит алгоритм укладки рюкзака методом динамического программирования? Этот алгоритм будет работать или нет?
Да.
...
Рейтинг: 0 / 0
задача о рюкзаке (Knapsack Problem 0-1)
    #35186550
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nicky_N авторТо мы сможем отдать этот массив в функцию которая запустит алгоритм укладки рюкзака методом динамического программирования? Этот алгоритм будет работать или нет?
Да.Но ведь double это не целочисленный тип данных. Как же алгоритм будет работать если в нем есть ограничение на целочисленность?
...
Рейтинг: 0 / 0
задача о рюкзаке (Knapsack Problem 0-1)
    #35186555
Фотография Frenzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nicky_NВсем доброго дня!
Необходимо решить классическую задачу о рюкзаке(из множества предметов, каждый из которых имеет свою стоимость и ценность, требуется отобрать некое число предметов таким образом, чтобы получить максимальную суммарную ценность при одновременном соблюдении ограничения на суммарную стоимость):
(∑pjxj) –> max,
∑wjxj ≤ c,
xj = {0;1}, j = 1..n, где pj - ценность вещи j, wj - стоимость вещи j.

примеры с недискретным х нигде не приводятся, потому что в этом случае задача становится намного более тривиальной, если х неограничены, то выбираем х с наибольшим соотношением pj/wj - и набираем полный рюкзак самых выгодных иксов (т.е. максимум сколько влезает в с). если х ограничены (как у вас единицей в вашем условии), то сортируем иксы по убыванию выгодности (выгодность pj/wj), и берем максимум самых выгодных иксов, затем максимум вторых по выгодности и так далее пока не заполним рюкзак (т.е. пока не получим общую цену иксов с).

а все приведенные ваши алгоритмы как раз придумывались для случая с дискретными х, т.к. задача намного сложнее как раз с дискретными
...
Рейтинг: 0 / 0
задача о рюкзаке (Knapsack Problem 0-1)
    #35186587
Nicky_N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl Nicky_N авторТо мы сможем отдать этот массив в функцию которая запустит алгоритм укладки рюкзака методом динамического программирования? Этот алгоритм будет работать или нет?
Да.Но ведь double это не целочисленный тип данных. Как же алгоритм будет работать если в нем есть ограничение на целочисленность?
возьмите int64.
...
Рейтинг: 0 / 0
задача о рюкзаке (Knapsack Problem 0-1)
    #35186588
Nicky_N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Frenzy Nicky_NВсем доброго дня!
Необходимо решить классическую задачу о рюкзаке(из множества предметов, каждый из которых имеет свою стоимость и ценность, требуется отобрать некое число предметов таким образом, чтобы получить максимальную суммарную ценность при одновременном соблюдении ограничения на суммарную стоимость):
(∑pjxj) –> max,
∑wjxj ≤ c,
xj = {0;1}, j = 1..n, где pj - ценность вещи j, wj - стоимость вещи j.

примеры с недискретным х нигде не приводятся, потому что в этом случае задача становится намного более тривиальной, если х неограничены, то выбираем х с наибольшим соотношением pj/wj - и набираем полный рюкзак самых выгодных иксов (т.е. максимум сколько влезает в с). если х ограничены (как у вас единицей в вашем условии), то сортируем иксы по убыванию выгодности (выгодность pj/wj), и берем максимум самых выгодных иксов, затем максимум вторых по выгодности и так далее пока не заполним рюкзак (т.е. пока не получим общую цену иксов с).

а все приведенные ваши алгоритмы как раз придумывались для случая с дискретными х, т.к. задача намного сложнее как раз с дискретными

вы говорите о классическом жадном алгоритме, для дискретной задачи он не дает оптимального решения(контрпримеры - стр 456-457 и тут ).
...
Рейтинг: 0 / 0
задача о рюкзаке (Knapsack Problem 0-1)
    #35186590
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nicky_N White Owl Nicky_N авторТо мы сможем отдать этот массив в функцию которая запустит алгоритм укладки рюкзака методом динамического программирования? Этот алгоритм будет работать или нет?
Да.Но ведь double это не целочисленный тип данных. Как же алгоритм будет работать если в нем есть ограничение на целочисленность?
возьмите int64.Угу... А с
Код: plaintext
int64 W[ 15 ];
алгоритм работать будет?
...
Рейтинг: 0 / 0
задача о рюкзаке (Knapsack Problem 0-1)
    #35186600
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
гы.... Я понял откуда у нашего студента такие странные идеи:
456-ая страница того самого учебника который читает Nicky_NДискретная задача о рюкзаке (0-1 knapsack problem) формулируется сле-
дующим образом. Вор во время ограбления магазина обнаружил n предметов.
Предмет под номером i имеет стоимость vi грн. и вес wi кг, где и vi, и wi — целые
числа. Нужно унести вещи, суммарная стоимость которых была бы как можно
большей, однако грузоподъемность рюкзака ограничивается W килограммами,
где W — целая величина. Какие предметы следует взять с собой?Я хочу посмотреть на тот ювелирный магазин в котором каждое колечко, брошка или кулончик весят один килограмм.

Nicky_N, ты слишком много читаешь учебников. Вот есть люди которые читают слишком мало, а ты их читаешь слишком много.
...
Рейтинг: 0 / 0
задача о рюкзаке (Knapsack Problem 0-1)
    #35186662
Фотография Frenzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nicky_Nвы говорите о классическом жадном алгоритме, для дискретной задачи он не дает оптимального решения(контрпримеры - стр 456-457 и тут).

вы же написали что вам нужен алгоритм для непрерывных величин, а найти не можете - вот я вам его привел, что вы голову морочите? округлите до копеек - с деньгами как с дискретными величинами никто не оперирует
...
Рейтинг: 0 / 0
задача о рюкзаке (Knapsack Problem 0-1)
    #35186664
Nicky_N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owlгы.... Я понял откуда у нашего студента такие странные идеи:
456-ая страница того самого учебника который читает Nicky_NДискретная задача о рюкзаке (0-1 knapsack problem) формулируется сле-
дующим образом. Вор во время ограбления магазина обнаружил n предметов.
Предмет под номером i имеет стоимость vi грн. и вес wi кг, где и vi, и wi — целые
числа. Нужно унести вещи, суммарная стоимость которых была бы как можно
большей, однако грузоподъемность рюкзака ограничивается W килограммами,
где W — целая величина. Какие предметы следует взять с собой?Я хочу посмотреть на тот ювелирный магазин в котором каждое колечко, брошка или кулончик весят один килограмм.

Nicky_N, ты слишком много читаешь учебников. Вот есть люди которые читают слишком мало, а ты их читаешь слишком много.
Уважаемый White Owl, давайте я сам разберусь сколько и какие книги мне читать, если у Вас есть дельные советы,выскажите их, а свои язвительные замечания прошу оставить при себе.
...
Рейтинг: 0 / 0
задача о рюкзаке (Knapsack Problem 0-1)
    #35186671
Nicky_N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Frenzy Nicky_Nвы говорите о классическом жадном алгоритме, для дискретной задачи он не дает оптимального решения(контрпримеры - стр 456-457 и тут).

вы же написали что вам нужен алгоритм для непрерывных величин, а найти не можете - вот я вам его привел, что вы голову морочите? округлите до копеек - с деньгами как с дискретными величинами никто не оперирует
Я не писал, что мне нужен алгоритм для непр. величин, я как раз написал, что
жадный алгоритм не дает оптимального решения в дискретном случае
денежные величины я умножаю на 100 и работаю с ними как с целыми.
...
Рейтинг: 0 / 0
задача о рюкзаке (Knapsack Problem 0-1)
    #35186673
Фотография Frenzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> денежные величины я умножаю на 100 и работаю с ними как с целыми.

да, только это неправильно. с деньгами так не работают. а если сделать так как правильно, то получится простой и оптимальный алгоритм. а вы просто морочите голову.

_______________________________________
2pro4U
...
Рейтинг: 0 / 0
задача о рюкзаке (Knapsack Problem 0-1)
    #35186680
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nicky_NУважаемый White Owl, давайте я сам разберусь сколько и какие книги мне читать, если у Вас есть дельные советы,выскажите их, а свои язвительные замечания прошу оставить при себе.А я уже высказывал - начни эту задачу решать практически. Начни ее кодировать. Раз уж у тебя отсутствует умение экстраполировать, то дальнейшие теоретические разговоры об алгоритмах ни к чему не приведут. Начни кодировать, проверь теорию практикой.

К тому же там в учебнике ошибка. Жадный алгоритм вполне справится с рюкзаком описанным на 457-ой странице, достаточно разрешить вору вытащить из рюкзака предмет "с самой большой удельной стоимостью". Это не запрещается принципом жадного алгоритма, но автор учебника об этом забыл почему-то и сделал неверный вывод что "жадная стратегия не работает в целочисленной задаче о рюкзаке". При чем здесь целочисленность так-же никому не известно. Но автор учебника это сказанул, а ты принял за до-буквенную правду. Учись критически мыслить, учебники тоже бывает ошибаются либо забывают о чем-то сказать.
...
Рейтинг: 0 / 0
задача о рюкзаке (Knapsack Problem 0-1)
    #35186681
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Frenzyда, только это неправильно. с деньгами так не работают. а если сделать так как правильно, то получится простой и оптимальный алгоритм. а вы просто морочите голову.Он не морочит голову, он действительно не понимает. Человек слишком верит в непогрешимость Учителя и если Учитель сказал что все величины должны быть целочисленными - значит все.
Восьминогие мухи это не прерогатива средних веков, они существуют и сегодня.
...
Рейтинг: 0 / 0
задача о рюкзаке (Knapsack Problem 0-1)
    #35186684
Nicky_N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl Nicky_NУважаемый White Owl, давайте я сам разберусь сколько и какие книги мне читать, если у Вас есть дельные советы,выскажите их, а свои язвительные замечания прошу оставить при себе.А я уже высказывал - начни эту задачу решать практически. Начни ее кодировать. Раз уж у тебя отсутствует умение экстраполировать, то дальнейшие теоретические разговоры об алгоритмах ни к чему не приведут. Начни кодировать, проверь теорию практикой.

К тому же там в учебнике ошибка. Жадный алгоритм вполне справится с рюкзаком описанным на 457-ой странице, достаточно разрешить вору вытащить из рюкзака предмет "с самой большой удельной стоимостью". Это не запрещается принципом жадного алгоритма, но автор учебника об этом забыл почему-то и сделал неверный вывод что "жадная стратегия не работает в целочисленной задаче о рюкзаке". При чем здесь целочисленность так-же никому не известно. Но автор учебника это сказанул, а ты принял за до-буквенную правду. Учись критически мыслить, учебники тоже бывает ошибаются либо забывают о чем-то сказать.
Спасибо за совет, непременно им воспользуюсь.
Но я встречал подобную мысль (о неприменимости жадного алгоритма для дискретной задачи) во многих источниках!
И потом, при каких условиях достаточно разрешить вору вытащить из рюкзака предмет "с самой большой удельной стоимостью"?
...
Рейтинг: 0 / 0
29 сообщений из 29, показаны все 2 страниц
Форумы / Программирование [игнор отключен] [закрыт для гостей] / задача о рюкзаке (Knapsack Problem 0-1)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]