powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Задача про очередь в банке
25 сообщений из 28, страница 1 из 2
Задача про очередь в банке
    #39919867
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по сабжу, программерская:

В отделении банка работает K окон, в общей очереди стоит N человек, каждому из которых понадобится некоторое время обслуживания. Определить, через какое время после одновременного начала работы всех окон будут обслужены все посетители. Всё как обычно - окна начинают работать, к ним сразу подходят первые K челов, потом как только с кем-то разобрались, в освободившееся окно сразу ломится первый из очереди.

входные данные - N, K, массив длительностей. Например, N=3, K=2, arr = [4, 10, 5], ответ будет 10
...
Рейтинг: 0 / 0
Задача про очередь в банке
    #39919919
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приближенно можно посчитать поделив сумму времени всех человек на кол-во окон.

ИМХО точно получить время только смоделировав всю последовательность. Например, немного меняем arr = [4, 5, 10] и ответ будет 14.
...
Рейтинг: 0 / 0
Задача про очередь в банке
    #39919922
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

здесь надо точно.

это простая задача на алгоритм, надо решить с минимумом использования вспомогательной памяти и минимальной асимптотикой по времени. Для определенности считаем, что K намного меньше, чем N
...
Рейтинг: 0 / 0
Задача про очередь в банке
    #39919924
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
немного меняем arr = [4, 5, 10] и ответ будет 14.
порядок следования в очереди зафиксирован.

потом можно усложнить и найти для заданной очереди такую перестановку, при которой она рассосется как можно быстрее.
...
Рейтинг: 0 / 0
Задача про очередь в банке
    #39919938
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1,

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

Технически регистр обслуживания проще всего организовать в виде очереди с приоритетом Min.
тогда arr(i) всегда будет добавляться к минимальному (текущему свободному) регистру абака.
Время счета будет порядка N*K*Log(K) при больших N
...
Рейтинг: 0 / 0
Задача про очередь в банке
    #39919940
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
... N*K*Log(K) при больших N

т.е., при зафиксированном K, просто порядка N
...
Рейтинг: 0 / 0
Задача про очередь в банке
    #39919945
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby,

да, всё верно, только не N*K*Log(K), а N*Log(K)

К не зафиксировано, может быть большим
...
Рейтинг: 0 / 0
Задача про очередь в банке
    #39919949
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это была присказка. Теперь вторая часть:

переставить очередь таким образом, чтобы длительность была минимально возможной
...
Рейтинг: 0 / 0
Задача про очередь в банке
    #39919954
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смахивает на задачку из динамического программирования
...
Рейтинг: 0 / 0
Задача про очередь в банке
    #39919965
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
booby,

да, всё верно, только не N*K*Log(K), а N*Log(K)

К не зафиксировано, может быть большим

N*Log(K) - ок

Что значит "К не зафиксировано"?
K является функцией от мгновенного значения N? - K = F(N(t),t)?
Тогда проще будет сразу сказать - что регистр для K бесконечный и используется нечто вроде фибоначчиевых очередей.
...
Рейтинг: 0 / 0
Задача про очередь в банке
    #39919970
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
Что значит "К не зафиксировано"?
ну то есть это параметр, как и N

нет, в ходе решения он не меняется, но время работы алгоритма от него зависит
...
Рейтинг: 0 / 0
Задача про очередь в банке
    #39919974
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
это была присказка. Теперь вторая часть:

переставить очередь таким образом, чтобы длительность была минимально возможной

сортировка входной очереди desc по времени предполагаемого обслуживания - не спасёт отца русского очередистроения?
...
Рейтинг: 0 / 0
Задача про очередь в банке
    #39919978
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
booby
Что значит "К не зафиксировано"?
ну то есть это параметр, как и N

нет, в ходе решения он не меняется, но время работы алгоритма от него зависит

не-не.
К - параметр - по всем канонам.
А N - размер задачи.
как-то так должно быть...
...
Рейтинг: 0 / 0
Задача про очередь в банке
    #39919983
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
Имя пользователя1
пропущено...
ну то есть это параметр, как и N

нет, в ходе решения он не меняется, но время работы алгоритма от него зависит

не-не.
К - параметр - по всем канонам.
А N - размер задачи.
как-то так должно быть...
и то и другое - размер. К - размер "абака". Асимптотика зависит и от К, и от N
...
Рейтинг: 0 / 0
Задача про очередь в банке
    #39919984
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
Имя пользователя1
это была присказка. Теперь вторая часть:

переставить очередь таким образом, чтобы длительность была минимально возможной

сортировка входной очереди desc по времени предполагаемого обслуживания - не спасёт отца русского очередистроения?
разумеется, нет.

[3, 4, 5, 3, 5], K=2

оптимальное время 10
с сортировкой 11
...
Рейтинг: 0 / 0
Задача про очередь в банке
    #39920014
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1,
гребенка [53534]
т.е. если i(1) - i(k) - индексы первично загружаемых на счётную доску размера (разрядности) k
элементов,
то за текущим максимумом i(1) должно идти к-1 оставшихся во входной очереди
минимальных по возрастанию.
И так до исчерпания входной очереди.
глубжее нету ни глаз ни мозга ни времени разглядывать...
...
Рейтинг: 0 / 0
Задача про очередь в банке
    #39920035
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имя пользователя1
это была присказка. Теперь вторая часть:
переставить очередь таким образом, чтобы длительность была минимально возможной
Составить последовательность из всех посетителей N с постепенным возрастанием времени обслуживания.

Разделить эту последовательность на количество окон K. Будет N = P * K + R, где R меньше K.

Далее первая группа из К в своей последовательности направляется к соответствующим окнам.
Следующая группа из К в обратной последовательности направляется к соответствующим окнам.

И так далее: своя - обратная.

В отдельной мини последовательности для каждого из К посетителей возможно только окно s (своя) или окно K - s +1 (обратная),
где 1<=s<=K
...
Рейтинг: 0 / 0
Задача про очередь в банке
    #39920049
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
Имя пользователя1,
гребенка [53534]
т.е. если i(1) - i(k) - индексы первично загружаемых на счётную доску размера (разрядности) k
элементов,
то за текущим максимумом i(1) должно идти к-1 оставшихся во входной очереди
минимальных по возрастанию.
И так до исчерпания входной очереди.
глубжее нету ни глаз ни мозга ни времени разглядывать...

я сказал не то, что хотел (;

гребенка конечно здесь [53345]
т.е. - выбирается максимальный arr(i) и ставится в место (1) - i(1),
за которым из оставшихся во входной очереди выбирается последовательность минимальных
2..m таких, что сумма S их времен обслуживания <=arr(i(1))
Это первый пакет,
далее в той же последовательности - выбираем максимальный из оставшихся и к нему серию минимальных.
...
Рейтинг: 0 / 0
Задача про очередь в банке
    #39920053
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby,
общая идея состоит в том, что минимальное время обслуживания получится тогда, когда
минимизируется разница между минимальным и максимальным накопленным значением в регистрах счётчика-обслуживателя-абака.
Для этого необходимо обеспечить нечто, похожее на "равномерную" загрузку разрядов,
так, чтобы по мере сложения на счётчике ни в каком разряде не образовывалось (при бесконечном времени работе, пакетированном на N элементов за шаг бесконечного времени)
значений сильно отличающихся от значений в других разрядах счётчика.
Нечто вроде идеи складывания равного с равным, но вот в такой револьверной подкрутке.
...
Рейтинг: 0 / 0
Задача про очередь в банке
    #39920056
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1,

Вот тебе следующая задачка - расчитать самый быстрый способ посадки в самолет
...
Рейтинг: 0 / 0
Задача про очередь в банке
    #39920070
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby,

я так думаю, надо сначала взять всех и распределить по кассам, чтобы получились приблизительно равные суммы. Вот это

а потом эти K очередей смержить в одну таким образом, что когда освобождается очередная касса, первым в очереди стоял как раз чел из соответствующей группы. Это в принципе понятно как делать
...
Рейтинг: 0 / 0
Задача про очередь в банке
    #39920073
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iOracleDev
Имя пользователя1,

Вот тебе следующая задачка - расчитать самый быстрый способ посадки в самолет
для самого быстрого варианта понадобятся молотки и лестницы...
...
Рейтинг: 0 / 0
Задача про очередь в банке
    #39920123
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
booby,

я так думаю, надо сначала взять всех и распределить по кассам, чтобы получились приблизительно равные суммы. Вот это

а потом эти K очередей смержить в одну таким образом, что когда освобождается очередная касса, первым в очереди стоял как раз чел из соответствующей группы. Это в принципе понятно как делать

по смыслу эта ссылка где-то рядом.
По крайней мере, в разностной формулировке - выглядит совсем похоже.

Мне продолжает пока казаться на бегу, что примерно то, что я пытался сказать, должно само
давать результат близкий к оптимальному.

С поправкой на то, что после выбора текущего максимального из оставшейся очереди надо выбирать минимальные не пока их сумма меньше первого выбранного, а до тех пор, пока
сумма выбираемых минимальных впервые не превысит первый выбранный для "пакета" максимальный.

В таком виде алгоритм не зависит от K как параметра.
Это само по себе выглядит симпатичным.
Так как однотипно позволяет организовывать нагрузку для произвольного счётчика обслуживания произвольной разрядности K.

Вопрос здесь в том, какая структура эффективно позволит выбирать из себя сначала максимальный элемент, а затем последовательность минимальных.
этакая максимально-минимальная очередь.

Кстати, там где на самом деле именно мерж требуется, он как раз хорошо производится именно на абаках.
Позволяя при переносе списка из разряда в разряд, всегда складывать списки равного размера. Равномерное деление надвое как раз обеспечивает логарифмический результат сложения.
и наоборот - складывание равного с равным, дает логарифмическое число шагов алгоритма.
Я точно этой идеей руководствовался, в попытках здесь что-то бормотать между делом.
...
Рейтинг: 0 / 0
Задача про очередь в банке
    #39920127
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
по сабжу, программерская:

В отделении банка работает K окон, в общей очереди стоит N человек, каждому из которых понадобится некоторое время обслуживания. Определить, через какое время после одновременного начала работы всех окон будут обслужены все посетители. Всё как обычно - окна начинают работать, к ним сразу подходят первые K челов, потом как только с кем-то разобрались, в освободившееся окно сразу ломится первый из очереди.

входные данные - N, K, массив длительностей. Например, N=3, K=2, arr = [4, 10, 5], ответ будет 10
это просто техническая задача на реализацию бинарной кучи
...
Рейтинг: 0 / 0
Задача про очередь в банке
    #39920247
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
для самого быстрого варианта понадобятся молотки и лестницы...

А "английские" физики посчитали))
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Задача про очередь в банке
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]