2015-08-05 3 views
1

У меня возникла проблема с задачей, с которой я столкнулся. У меня есть база данных с элементами, все из которых имеют значение «цена». Они подключены к разным «раундам», а «раунды» имеют значение «tot-value», где все эти значения «цена» - все вместе образуют «tot-value». Итак, я хочу выбрать, какие предметы отдать и что сохранить. Предполагается, что от 5% до 10% от «tot-value» будет сохранено, а остальные будут отданы.Алгоритм выбора/сортировки (рюкзак)

Я мог бы просто выбрать все элементы в этом раунде, сортировать по «цене» -значение, низшего к высшему, а затем:

if ($totSave < $totVal*0.1) { addToSaveArray($item); $totSave += $item['price']; } 

Но у меня есть список, который должен расставить приоритеты элементов, настроены следующим образом:

$prioList[] = array("name" => $list[$i], "price" => $price); 

Итак, что является лучшим подходом к этому вопросу? Пропустить цикл через $ prioList, проверить, совпадает ли какое-либо имя, а затем добавить цену в $ totSave или что вы думаете?

Помощь была бы очень признательна!

+0

'select sum (value) from table group by name'? – twentylemon

+0

Не может этого сделать, поскольку у меня есть список для определения приоритетов. Но я сузил его до «проблемы с рюкзаком». Я посмотрю, как это происходит :) – Fredrik

+0

«сузился» до np-полной проблемы. получайте удовольствие от этого! – twentylemon

ответ

0

Джим попросил меня опубликовать ответ так это то, что я делаю :) Так как это ранец-проблема, я гугл и нашел это: https://github.com/acmeism/RosettaCodeData/tree/master/Task/Knapsack-problem-0-1/PHP

мне нужны показатели, а поэтому я пошел с верхний (багги) один. (Не удается отправить ссылку из-за низкого значения ...)

С тех пор, как это было плохо, я добавил функцию «попробуй». Вот он: http://pastebin.com/AycE4Kzm

Смежные вопросы