Я пытаюсь сократить время и пространство, необходимые алгоритму Knapsack DP с нецелыми значениями.Рюкзак DP с массивом хешей
http://en.wikipedia.org/wiki/Knapsack_problem#Meet-in-the-Middle_Algorithm
In particular, if the [elements] are nonnegative but not integers, we could
still use the dynamic programming algorithm by scaling and rounding (i.e. using
fixed-point arithmetic), but if the problem requires fractional digits of
precision to arrive at the correct answer, W will need to be scaled by 10^d,
and the DP algorithm will require O(W * 10^d) space and O(nW * 10^d) time.
Алгоритм ранца DP использует [п х W] матрицу, заполняя его с результатами, но некоторые столбцы не заполняются - они не соответствуют какой-либо комбинации весов объектов. Таким образом, они просто заполняются нулями в каждом ряду и просто теряют время и пространство.
Если мы использовали массив хэшей вместо матрицы, мы могли бы сократить время и пространство.
edit:
knapsack capacity = 2
items: [{weight:2,value:3} ]
[0 1 2]
[0 0 0]
2: [0 0 3]
^
Do we need this column?
Substitution with hash:
2: {0:0, 2:3}
В Python, вставка ДИКТ имеет O (п) худший случай и O (1) "амортизируемые" линейное время.
Я что-то упустил?
Какова была бы сложность такой вариации на алгоритме DP рюкзака?
Я не следую. Как вы пытаетесь изменить его? Какими будут ключи/значения вашего словаря? – amit
Хеши будут заменять «строки» матрицы. Ключами были бы веса, значениями были бы суммы подмножества – lordkrandel
И что именно вы пытаетесь сохранить? «рядам» по-прежнему требуется одинаковое количество элементов (весов). Если у вас есть другая идея относительно этого - мы с радостью это услышим. – amit