![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
27.07.2017, 22:06
|
![Аватар для nerv_](https://javascript.ru/forum/image.php?u=17434&dateline=1529696550) |
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
28.07.2017, 09:14
|
![Аватар для Alexandroppolus](https://javascript.ru/forum/image.php?u=49879&dateline=1530205757) |
Профессор
|
|
Регистрация: 25.10.2016
Сообщений: 1,012
|
|
+1
причем, тут "ранцем" будет разница между ценой предмета и суммарной стоимостью всех имеющихся акций, а "весом" и "ценностью" каждой акции - её стоимость. Тогда решение - набор тех акций, которые не используем при покупке.
если каждой акции по одной штуке, то это "Рюкзак 0-1", и можно сказать, повезло ![](https://javascript.ru/forum/images/smilies/smile.gif)
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
28.07.2017, 10:38
|
![Аватар для рони](https://javascript.ru/forum/image.php?u=7416&dateline=1372796129) |
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,134
|
|
nerv_,
Alexandroppolus,
ничего не понимаю, ни википедию, ни вас, а код существует для такого?
P.S. пробовал написать полный перебор, комп не справляется, видимо не слишком оптимально или где ошибка.
Последний раз редактировалось рони, 28.07.2017 в 10:42.
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
28.07.2017, 12:13
|
![Аватар для Alexandroppolus](https://javascript.ru/forum/image.php?u=49879&dateline=1530205757) |
Профессор
|
|
Регистрация: 25.10.2016
Сообщений: 1,012
|
|
Сообщение от рони
|
пробовал написать полный перебор, комп не справляется, видимо не слишком оптимально или где ошибка.
|
полный перебор дает сложность O(2^N), и если N порядка 200-300, то смысла писать код вообще нет - всё равно будет выполняться целую вечность.
"Рюкзак 0-1" разруливается за полиномиальное время (на подобных объемах отработает мгновенно).
Код надо поискать, должен быть )
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
28.07.2017, 12:21
|
![Аватар для рони](https://javascript.ru/forum/image.php?u=7416&dateline=1372796129) |
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,134
|
|
Alexandroppolus,
спасибо, ещё бы понять что такое
Сообщение от Alexandroppolus
|
"Рюкзак 0-1"
|
![](https://javascript.ru/forum/images/smilies/smile.gif)
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
28.07.2017, 12:56
|
![Аватар для nerv_](https://javascript.ru/forum/image.php?u=17434&dateline=1529696550) |
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
28.07.2017, 15:15
|
![Аватар для рони](https://javascript.ru/forum/image.php?u=7416&dateline=1372796129) |
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,134
|
|
nerv_,
спасибо, но я не понимаю что там написано, особенно математические формулы.
Цитата:
|
Решение задачи о рюкзаке 0-1 близко к решению предыдущей задачи, но необходимо учесть тот факт, что каждый предмет имеется в единственном экземпляре.
|
например тут написано в единственнном почему??? у меня получилось 2.06 * 49 + 5.76 * 2 + 5.01 -- 49 экзепляров одного предмета, другого 2, третьего один.
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
29.07.2017, 10:18
|
![Аватар для nerv_](https://javascript.ru/forum/image.php?u=17434&dateline=1529696550) |
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
рони,
Сообщение от рони
|
например тут написано в единственнном почему???
|
потому, что существует ряд формулировок (вариантов) задач о рюкзаке. Формулировка, готорая гласит
Цитата:
|
не более одного экземпляра каждого предмета
|
носит название Рюкзак 0-1
Что я сделал:
1. взял N-первых весов из первого поста
2. домножил их на 100, чтобы получить целые числа
3. задал цель равную 247
4. взял алгоритм из википедии для рюкзака 0-1
результат см. ниже
const costs = [67, 84, 86, 86, 89, 170, 180, 187, 199, 200, 201, 206, 209]
const capacity = 247
/**
* @see [url]https://ru.wikipedia.org/wiki/Задача_о_ранце[/url]
* @param {Array.<Number>} v Ценности предметов (загруженные в массив v)
* @param {Array.<Number>} w Веса предметов (загруженные в массив w)
* @param {Number} n Количество предметов (n)
* @param {Number} W Грузоподъемность (W)
* @return {Array.<Number>}
*/
function solveKnapsack01(v, w, n, W) {
let m = new Array(n)
for (let i = 0; i <= n; i++) {
m[i] = new Array(W + 1).fill(0)
}
for (let i = 1; i < n; i++) {
for (let j = 0; j <= W; j++) {
if (w[i] > j) {
m[i][j] = m[i - 1][j]
} else {
m[i][j] = Math.max(m[i - 1][j], m[i - 1][j - w[i]] + v[i])
}
}
}
return m
}
console.log(solveKnapsack01(costs, costs, costs.length, capacity))
Но это еще не все решение:
Цитата:
|
Таким образом, любому решению задачи соответствует некоторый путь в построенном дереве. Задача сводится к нахождению пути максимальной длины[
|
Т.е. нужно в получившемся массиве (дереве) найти путь максимальной длинны.
---
Также обращаю внимание на пост Alexandroppolus:
Сообщение от Alexandroppolus
|
причем, тут "ранцем" будет разница между ценой предмета и суммарной стоимостью всех имеющихся акций, а "весом" и "ценностью" каждой акции - её стоимость. Тогда решение - набор тех акций, которые не используем при покупке.
|
Понятно почему? ![](https://javascript.ru/forum/images/smilies/smile.gif)
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
29.07.2017, 10:57
|
![Аватар для рони](https://javascript.ru/forum/image.php?u=7416&dateline=1372796129) |
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,134
|
|
nerv_,
спасибо за попытку, но бесполезно - не понимаю как строится дерево, не понимаю что за результат в строке 33, и уж тем более почему надо искать набор акций которые не используем при покупке.
то что такой вариант называется Рюкзак 0-1, пусть, но мне это ни очём не говорит.
![](http://s00.yaplakal.com/pics/pics_original/5/8/6/9687685.jpg)
как там говорится: нельзя обьять необьятное, но зато мы поём и пляшем.
![](http://i51.fastpic.ru/big/2013/0315/c3/d800cc1c98c9d97d5f2e50e47d9ae2c3.png)
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
29.07.2017, 11:15
|
![Аватар для рони](https://javascript.ru/forum/image.php?u=7416&dateline=1372796129) |
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,134
|
|
Сообщение от nerv_
|
задал цель равную 247
|
![](https://javascript.ru/forum/images/smilies/smile.gif) [67,180] вот что ожидал увидеть в строке 33 пост №18
|
|
|
|