Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.68
Linus
0 / 0 / 0
Регистрация: 10.06.2012
Сообщений: 6
#1

Задача о рюкзаке 0-1 - C++

27.12.2012, 16:41. Просмотров 2813. Ответов 3
Метки нет (Все метки)

Здравствуйте!
Есть задача о ранце, где даны вес и ценность каждого предмета, а также общая вместимость ранца. Нужно найти максимальную ценность предметов, которые можно поместить в рюкзак.
Для не слишком больших входных параметров можно воспользоваться вот таким рекурсивным способом и все прекрасно работает.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int knapSack(int W, int wt[], int val[], int n)
{
   
   if (n == 0 || W == 0)
       return 0;
 
   if (wt[n-1] > W)
       return knapSack(W, wt, val, n-1);
 
   else return max( val[n-1] + knapSack(W-wt[n-1], wt, val, n-1),
                    knapSack(W, wt, val, n-1)
                  );
}
Сложность такого алгоритма O(2^n).
Но что делать, если, к примеру, общая ценность предметов, которые могут поместиться в рюкзак составляет 4000000, а количество самих предметов превышает 1000? Как я понимаю, время вычисления будет огромным. Я пробовал итеративный способ, но создавать матрицу[1000][4000000] visual studio отказался, да и страшно представить сколько тут понадобится памяти.
Я читал про мемоизацию, но не понял, как её можно реализовать здесь.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.12.2012, 16:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Задача о рюкзаке 0-1 (C++):

Задача о рюкзаке - C++
Привет ребята, требуется помощь. Если есть у кого - то выложите пожалуйста код реализации алгоритма задачи о рюкзаке "Задача о рюкзаке...

Задача о Рюкзаке - C++
Очень прошу с помощью. Нужен код на с++, решение задачи о рюкзаке методами : динамического программирования, метод ветвей и границ , жадный...

Задача о рюкзаке - C++
Условие задачи:имеются m предметов с номерами от 0 до m-1, для каждого из которых известна масса и стоимость. Определить какие предметы...

Задача о рюкзаке - C++
Здравствуйте, нужно реализовать задачу о рюкзаке (из заданного множества предметов со свойствами «стоимость» и «вес» требуется отобрать...

Задача о рюкзаке - C++
Мне нужно сдать программу на си на задачу о рюкзаке: из n предметов, для которых заданы вес и стоимость, выбрать такие, чтобы суммарный вес...

Задача о рюкзаке - C++
И так я все сделал как вы и просили. Условие задачи о рюкзаке: Итак, пусть у нас есть рюкзак объёма W, и список из n вещей, у каждой...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
27.12.2012, 17:51 #2
Linus, Заводите одномерный массив размером W + 1, на каждой k-й итерации вычисляете оптимальное значение для k первых вещей. Потребляемая память - W + 1, сложность - O(W * n)
1
Linus
0 / 0 / 0
Регистрация: 10.06.2012
Сообщений: 6
27.12.2012, 19:40  [ТС] #3
Спасибо за идею =)
0
vlad-chk
0 / 0 / 0
Регистрация: 29.10.2012
Сообщений: 50
05.12.2014, 20:16 #4
А как запоминать взятые в рюкзак вещи?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.12.2014, 20:16
Привет! Вот еще темы с ответами:

Задача о рюкзаке - C++
Доброго вечера! Даны n типов предметов, каждый тип обладает своей стоимостью и весом, а также предел грузоподъемности limit. Нужно набрать...

Вычислить нужную комбинацию. Задача о рюкзаке - C++
Добрый день форумчане! Немного завтыкал со сроками сдачи (ну как всегда), и в этот раз не уверен, что успею решить сам. Задача...

Задача о рюкзаке, решается ли она жадным алгоритмом? - C++
Здравствуйте. Задали сделать задачу о рюкзаке, используя жадину. Даны вес и стоимость предметов. Набить рюкзак предметами, чтобы...

Задача о рюкзаке методом полного перебора. Нужно пояснение по коду - C++
Здравствуйте, нужно пояснение по этому коду. Код не мой, также в нем много ошибок. Заранее спасибо. #include <memory.h> #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
05.12.2014, 20:16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru