@hinie

Как описать алгоритм для работы с очередями?

есть несколько клиентов с разными затратами времени на обслуживание и несколько касс.

К примеру, время затраченное на покупки для трёх клиентов [ 10, 11, 12 ] и одна касса — значит, они потратят 10 + 11 + 12 = 33 минуты.

Если касс будет две для тех же трёх клиентов [ 10, 11, 12 ] то 10 + 11 для первой и 12 для второй. То есть в общем 21 минута (порядок не менять).

Как описать функцию, способную рассчитать затраченное время для любого количества касс и покупателей?
  • Вопрос задан
  • 194 просмотра
Пригласить эксперта
Ответы на вопрос 2
wataru
@wataru Куратор тега Алгоритмы
Разработчик на С++, экс-олимпиадник.
Если вам надо минимизировать общее время обработки всех клиентов (максимальное время работы какой-то из касс), то это NP-полная задача. Даже упращенная версия лишь с двумя кассами, если числа в задаче могут быть очень большими - не решается без полного перебора или каких-то вырвиглазных мозгодробительных методов оптимизации типа метода отжига.

Если же числа небольшие, то для двух касс еще есть решение через динамическое программирование, но его сложно обобщить на большее количество касc.
Ответ написан
Комментировать
SilenceOfWinter
@SilenceOfWinter
та еще зажигалка...
находим среднее время обслуживания клиента: 10 + ((12-10) / 2) = 11мин. (min - 10, max - 12)
находим среднее кол-во человек в очереди: делим число клиентов на кол-во касс и получаем 3/2 = 2чел.(округляем до целого т.к. люди это не колбаса - их по полам не разрежешь).
перемножаем значения и получаем среднее время обслуживания очереди: 22мин.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы