|
Задача про очередь в банке
|
|||
---|---|---|---|
#18+
по сабжу, программерская: В отделении банка работает K окон, в общей очереди стоит N человек, каждому из которых понадобится некоторое время обслуживания. Определить, через какое время после одновременного начала работы всех окон будут обслужены все посетители. Всё как обычно - окна начинают работать, к ним сразу подходят первые K челов, потом как только с кем-то разобрались, в освободившееся окно сразу ломится первый из очереди. входные данные - N, K, массив длительностей. Например, N=3, K=2, arr = [4, 10, 5], ответ будет 10 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 12:15 |
|
Задача про очередь в банке
|
|||
---|---|---|---|
#18+
Приближенно можно посчитать поделив сумму времени всех человек на кол-во окон. ИМХО точно получить время только смоделировав всю последовательность. Например, немного меняем arr = [4, 5, 10] и ответ будет 14. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 13:54 |
|
Задача про очередь в банке
|
|||
---|---|---|---|
#18+
Dima T, здесь надо точно. это простая задача на алгоритм, надо решить с минимумом использования вспомогательной памяти и минимальной асимптотикой по времени. Для определенности считаем, что K намного меньше, чем N ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 14:06 |
|
Задача про очередь в банке
|
|||
---|---|---|---|
#18+
Dima T немного меняем arr = [4, 5, 10] и ответ будет 14. потом можно усложнить и найти для заданной очереди такую перестановку, при которой она рассосется как можно быстрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 14:09 |
|
Задача про очередь в банке
|
|||
---|---|---|---|
#18+
Имя пользователя1, выглядит это просто входная очередь arr - это обычная FIFO очередь рабочий элемент логически состоит из абака (разрядной сетки) обслуживающих кассиров, с первоначально нулевыми значениями. Дальше ты добавляешь число из текущего входного элемента arr к той ячейке абака, в которой на текущий момент наименьшая накопленная сумма. Общее время обслуживания находится поиском максимума на регистре-абаке. Технически регистр обслуживания проще всего организовать в виде очереди с приоритетом Min. тогда arr(i) всегда будет добавляться к минимальному (текущему свободному) регистру абака. Время счета будет порядка N*K*Log(K) при больших N ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 14:27 |
|
Задача про очередь в банке
|
|||
---|---|---|---|
#18+
booby ... N*K*Log(K) при больших N т.е., при зафиксированном K, просто порядка N ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 14:31 |
|
Задача про очередь в банке
|
|||
---|---|---|---|
#18+
booby, да, всё верно, только не N*K*Log(K), а N*Log(K) К не зафиксировано, может быть большим ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 14:35 |
|
Задача про очередь в банке
|
|||
---|---|---|---|
#18+
это была присказка. Теперь вторая часть: переставить очередь таким образом, чтобы длительность была минимально возможной ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 14:39 |
|
Задача про очередь в банке
|
|||
---|---|---|---|
#18+
Смахивает на задачку из динамического программирования ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 14:47 |
|
Задача про очередь в банке
|
|||
---|---|---|---|
#18+
Имя пользователя1 booby, да, всё верно, только не N*K*Log(K), а N*Log(K) К не зафиксировано, может быть большим N*Log(K) - ок Что значит "К не зафиксировано"? K является функцией от мгновенного значения N? - K = F(N(t),t)? Тогда проще будет сразу сказать - что регистр для K бесконечный и используется нечто вроде фибоначчиевых очередей. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 15:01 |
|
Задача про очередь в банке
|
|||
---|---|---|---|
#18+
booby Что значит "К не зафиксировано"? нет, в ходе решения он не меняется, но время работы алгоритма от него зависит ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 15:05 |
|
Задача про очередь в банке
|
|||
---|---|---|---|
#18+
Имя пользователя1 это была присказка. Теперь вторая часть: переставить очередь таким образом, чтобы длительность была минимально возможной сортировка входной очереди desc по времени предполагаемого обслуживания - не спасёт отца русского очередистроения? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 15:08 |
|
Задача про очередь в банке
|
|||
---|---|---|---|
#18+
Имя пользователя1 booby Что значит "К не зафиксировано"? нет, в ходе решения он не меняется, но время работы алгоритма от него зависит не-не. К - параметр - по всем канонам. А N - размер задачи. как-то так должно быть... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 15:10 |
|
Задача про очередь в банке
|
|||
---|---|---|---|
#18+
booby Имя пользователя1 пропущено... ну то есть это параметр, как и N нет, в ходе решения он не меняется, но время работы алгоритма от него зависит не-не. К - параметр - по всем канонам. А N - размер задачи. как-то так должно быть... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 15:12 |
|
Задача про очередь в банке
|
|||
---|---|---|---|
#18+
booby Имя пользователя1 это была присказка. Теперь вторая часть: переставить очередь таким образом, чтобы длительность была минимально возможной сортировка входной очереди desc по времени предполагаемого обслуживания - не спасёт отца русского очередистроения? [3, 4, 5, 3, 5], K=2 оптимальное время 10 с сортировкой 11 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 15:14 |
|
Задача про очередь в банке
|
|||
---|---|---|---|
#18+
Имя пользователя1, гребенка [53534] т.е. если i(1) - i(k) - индексы первично загружаемых на счётную доску размера (разрядности) k элементов, то за текущим максимумом i(1) должно идти к-1 оставшихся во входной очереди минимальных по возрастанию. И так до исчерпания входной очереди. глубжее нету ни глаз ни мозга ни времени разглядывать... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 15:36 |
|
Задача про очередь в банке
|
|||
---|---|---|---|
#18+
Имя пользователя1 это была присказка. Теперь вторая часть: переставить очередь таким образом, чтобы длительность была минимально возможной Разделить эту последовательность на количество окон K. Будет N = P * K + R, где R меньше K. Далее первая группа из К в своей последовательности направляется к соответствующим окнам. Следующая группа из К в обратной последовательности направляется к соответствующим окнам. И так далее: своя - обратная. В отдельной мини последовательности для каждого из К посетителей возможно только окно s (своя) или окно K - s +1 (обратная), где 1<=s<=K ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 15:54 |
|
Задача про очередь в банке
|
|||
---|---|---|---|
#18+
booby Имя пользователя1, гребенка [53534] т.е. если i(1) - i(k) - индексы первично загружаемых на счётную доску размера (разрядности) k элементов, то за текущим максимумом i(1) должно идти к-1 оставшихся во входной очереди минимальных по возрастанию. И так до исчерпания входной очереди. глубжее нету ни глаз ни мозга ни времени разглядывать... я сказал не то, что хотел (; гребенка конечно здесь [53345] т.е. - выбирается максимальный arr(i) и ставится в место (1) - i(1), за которым из оставшихся во входной очереди выбирается последовательность минимальных 2..m таких, что сумма S их времен обслуживания <=arr(i(1)) Это первый пакет, далее в той же последовательности - выбираем максимальный из оставшихся и к нему серию минимальных. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 16:11 |
|
Задача про очередь в банке
|
|||
---|---|---|---|
#18+
booby, общая идея состоит в том, что минимальное время обслуживания получится тогда, когда минимизируется разница между минимальным и максимальным накопленным значением в регистрах счётчика-обслуживателя-абака. Для этого необходимо обеспечить нечто, похожее на "равномерную" загрузку разрядов, так, чтобы по мере сложения на счётчике ни в каком разряде не образовывалось (при бесконечном времени работе, пакетированном на N элементов за шаг бесконечного времени) значений сильно отличающихся от значений в других разрядах счётчика. Нечто вроде идеи складывания равного с равным, но вот в такой револьверной подкрутке. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 16:16 |
|
Задача про очередь в банке
|
|||
---|---|---|---|
#18+
Имя пользователя1, Вот тебе следующая задачка - расчитать самый быстрый способ посадки в самолет ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 16:20 |
|
Задача про очередь в банке
|
|||
---|---|---|---|
#18+
booby, я так думаю, надо сначала взять всех и распределить по кассам, чтобы получились приблизительно равные суммы. Вот это а потом эти K очередей смержить в одну таким образом, что когда освобождается очередная касса, первым в очереди стоял как раз чел из соответствующей группы. Это в принципе понятно как делать ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 16:38 |
|
Задача про очередь в банке
|
|||
---|---|---|---|
#18+
iOracleDev Имя пользователя1, Вот тебе следующая задачка - расчитать самый быстрый способ посадки в самолет ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 16:40 |
|
Задача про очередь в банке
|
|||
---|---|---|---|
#18+
Имя пользователя1 booby, я так думаю, надо сначала взять всех и распределить по кассам, чтобы получились приблизительно равные суммы. Вот это а потом эти K очередей смержить в одну таким образом, что когда освобождается очередная касса, первым в очереди стоял как раз чел из соответствующей группы. Это в принципе понятно как делать по смыслу эта ссылка где-то рядом. По крайней мере, в разностной формулировке - выглядит совсем похоже. Мне продолжает пока казаться на бегу, что примерно то, что я пытался сказать, должно само давать результат близкий к оптимальному. С поправкой на то, что после выбора текущего максимального из оставшейся очереди надо выбирать минимальные не пока их сумма меньше первого выбранного, а до тех пор, пока сумма выбираемых минимальных впервые не превысит первый выбранный для "пакета" максимальный. В таком виде алгоритм не зависит от K как параметра. Это само по себе выглядит симпатичным. Так как однотипно позволяет организовывать нагрузку для произвольного счётчика обслуживания произвольной разрядности K. Вопрос здесь в том, какая структура эффективно позволит выбирать из себя сначала максимальный элемент, а затем последовательность минимальных. этакая максимально-минимальная очередь. Кстати, там где на самом деле именно мерж требуется, он как раз хорошо производится именно на абаках. Позволяя при переносе списка из разряда в разряд, всегда складывать списки равного размера. Равномерное деление надвое как раз обеспечивает логарифмический результат сложения. и наоборот - складывание равного с равным, дает логарифмическое число шагов алгоритма. Я точно этой идеей руководствовался, в попытках здесь что-то бормотать между делом. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 17:48 |
|
Задача про очередь в банке
|
|||
---|---|---|---|
#18+
Имя пользователя1 по сабжу, программерская: В отделении банка работает K окон, в общей очереди стоит N человек, каждому из которых понадобится некоторое время обслуживания. Определить, через какое время после одновременного начала работы всех окон будут обслужены все посетители. Всё как обычно - окна начинают работать, к ним сразу подходят первые K челов, потом как только с кем-то разобрались, в освободившееся окно сразу ломится первый из очереди. входные данные - N, K, массив длительностей. Например, N=3, K=2, arr = [4, 10, 5], ответ будет 10 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 17:59 |
|
|
start [/forum/topic.php?fid=16&msg=39919867&tid=1339838]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
181ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
others: | 240ms |
total: | 522ms |
0 / 0 |