Тема
У нас есть каталог деталей [{id, prodno, qty, price}]
и элементов пучков [{id, price, items:[{prodno, qty}]}]
.
Мы должны найти самые дешевые подмножества (ы) - результат {price, [[{id, qty}]]}
, в котором содержатся указанные объекты - запрос [{prodno, qty}]
.
Пример:эффективный алгоритм поиска самых дешевых подмножества
items = [
{id:1, prodno:'A', qty:1, price:1},
{id:2, prodno:'A', qty:5, price:3},
{id:3, prodno:'B', qty:10, price:1}
]
bundles = [
{id:4, price:3, items:[
{prodno:'A', qty:2},
{prodno:'B', qty:5}
]}
]
query = [
{prodno:'A', qty:5},
{prodno:'B', qty:4}
]
result = {price:4, [
[{id:2, qty:1},{id:3, qty:1}]
]}
Мы запросили 5xA и 4xB и извлекаться 1 дешевый подмножество (давая 5xA и 10xB).
Граф будет иметь по крайней мере 'E = O (nc^n)' ребер и 'V = O (c^n)' вершины, где 'n' - число измерений, а' c' - средняя величина + 1 . Самый короткий путь Дейкстры имеет сложность «O (E + V log V)». Было бы более эффективно просто создавать комбинации ('O (c^n)'). –
Dijkstra для этого бесполезно, вы можете использовать простой алгоритм критического пути, так как граф имеет топологическое упорядочение в 'O (V + E)'. Но я согласен, что это все еще плохо. – kajacx