Я работаю над проектом, в котором мне нужно создать данные в таком оптимизированном формате, чтобы он не сильно замедлял фреймворк.
Проблема в:
Предположим, вы заказали 12 единиц из моего интернет-магазина продукта. И для этого продукта у меня есть 5 разных пачек предложить это большое количество от.
Предположим, что массив связок с серийный номер как ключ а также максимальное количество единиц, доступных в этом пакете в качестве значения как:
$arr = array(
array('sr_no1'=>5),
array('sr_no2'=>7),
array('sr_no3'=>2),
array('sr_no4'=>9),
array('sr_no5'=>12)
);
Теперь у моего жадного подхода есть два основных условия, чтобы отдать количество, запрошенное клиентом.
Я пытался найти решение за последние 3 дня.
Рассмотрим контрольные примеры для заказанного количества, равного 12, 11 или 6.
или 35 или 30 и т. д.
В результате мне нужны массивы, которые мы выберем для распределения величин, таких как массив (‘sr_no5’ => 12) для выдачи 12 единиц упорядоченного количества и массив массивов (‘sr_no3’ => 2), массив ( ‘sr_no4’ => 9) для выдачи 11 единиц количества.
Я пытался найти рюкзак, жадное и минимальное остовное дерево, пытаясь найти решение.
Пожалуйста, найдите наиболее оптимизированное решение, так как мы не хотим добиться истечения времени ожидания сервера.
ПРИМЕЧАНИЕ: все значения выше, как количество / единица заказа, нет. из
пучки, Максимально доступная единица в каждой связке переменные и могут
изменить на любое нет. случаев.
Не уверен в алгоритме, но вы можете просмотреть все возможные результаты, назначив каждому пакету двоичный файл с 0 или 1. 11000 будет равно 5 + 7 + 0 + 0 + 0 (12), 00010 будет равно 0 + 0 + 0 + 9 +0 и т. Д.
Затем создайте мастер-массив на основе этого псевдо-двоичного значения и итоговой суммы.
Затем отфильтруйте по совпадению (или ближайшему совпадению) и посмотрите, какой из результатов имеет наименьшее количество единиц.
Это грубо, но будет работать.
Это похоже на алгоритм из 3 частей:
Вы можете оптимизировать код, объединяющий части 1 а также 2, фильтрация возможных решений при создании массива. Вероятно, существует много возможных шаблонов программирования или даже библиотек для достижения такой цели. В зависимости от количества пакетов, влияющих на каждый случай, было бы слишком много, чтобы оптимизировать так много.