Size: a a a

2021 June 17

АЛ

Артем Лазаренко... in pro.algorithms
ой, какие 96, 69 😁, это похоже на правду, ну все ж хочется не складывать все возможные вероятности, а формулу получить
источник

RS

R S in pro.algorithms
1 минус вероятность, что все провалятся
источник

SS

Semion S in pro.algorithms
Ребята нужна помощь с написанием алгоритма. Может у кого то будут светлые идеи, а то я волосы на голове рву.
Суть такая:
Есть определенное количество работников (n). Мне нужно каждому из них организовать встречу друг с другом. В 1 день у одного сотрудника 1 встреча. Повторятся встречи не должны
Вернуть должен что-то типа:
Map<Integer, List<Meet>>
Integer - порядок (к-тво) дней в которых состоятся встречи
А Meet - это сущность у которой есть Employee first, Employee second.

Может у кого есть идеи или были похожие задачи ?
Я пишу микросервис с фронтом, а эту логику никак не получается реализовать.


Есть мысль загенерить все возможные встречи положить их в Лист, а потом из него читать и добавлять по дням встречи что не повторяються. Но я боюсь провесит по памяти
источник

MB

Mikail Bagishov in pro.algorithms
Нет, по памяти проблем не будет: размер этого списка пар есть n^2, но и в возвращаемом значении n^2 данных. То есть если такой список не влезет в память, то ты и корректное возвращаемое значение не сможешь создать, и задача неразрешима.
источник

MB

Mikail Bagishov in pro.algorithms
Я не готов утверждать, что таким образом получится оптимальное решение (но вполне возможно), но кажется что так получится не более чем в 2 раза больше дней, чем в оптимальном.
источник

SS

Semion S in pro.algorithms
Ну, я написал вот такой вот цикл
Сейчас постараюсь реализовать логику вставки в Мап без повторений
источник

SS

Semion S in pro.algorithms
источник

SS

Semion S in pro.algorithms
По идеи для 10 работников количество дней будет равно 9
источник

SS

Semion S in pro.algorithms
Типа от «н» работников оптимальное количество дней «н-1»
источник

SS

Semion S in pro.algorithms
Просто встреч будет меньше с каждым днём. Так как повторятся не должны
источник

MB

Mikail Bagishov in pro.algorithms
Для четных n я предлагаю  (в дни 2k-1 и 2k) для работника i назначить пару (i+k)%n, тогда каждый работник будет включен ровно в 2 пары. За 2 дня удастся их обработать.
источник

MB

Mikail Bagishov in pro.algorithms
Для 3 работников понадобится 3 дня
источник

MB

Mikail Bagishov in pro.algorithms
Вообще, если работников 2k+1, то всего встреч будет (2k+1)2k/2 = k(2k+1), а за один день можно лишь k устроить, так что ответ будет не ниже k
источник

MB

Mikail Bagishov in pro.algorithms
Подозреваю, что сначала надо сделать решение, аналогичное четному случая (в каждый из день игнорирую одного работника), а потом в конце за один допдень все проигноренные пары удовлетворить
источник

q

qwerty in pro.algorithms
А такое решение сойдет?
Строим полный граф из n вершин
i-ый день: берем рандомное ребро, отмечаем инцидентные вершины, берем следующее рандомное ребро, если данное ребро инцидентно тем вершинам, которые уже отмечены, то отменяем данную встречу, и таким образом перебираем все ребра
источник

q

qwerty in pro.algorithms
Теперь для i+1 дня просто выкидываем  ребра, полученные на предыдущем шаге, и повторяем наш алгоритм
источник

q

qwerty in pro.algorithms
Делаем до тех пор пока полный граф не превратится в лес
источник

q

qwerty in pro.algorithms
Кажется, не совсем оптимально, но, думаю, сойдет, если нигде не обложался
источник

SS

Semion S in pro.algorithms
Да, кажется это будет сложнее чем просто двумя циклами прогнать все варианты по очереди.

Мне к этому ещё нужно прикрутить фронт минимальный и архитектуры добавить.
Так что обойдусь без деревьев.
Но вообще вариант хороший
источник

q

qwerty in pro.algorithms
Да там несложно, просто держишь последовательность всех ребер полного графа и какой-нить массивчик для отмеченных вершин
источник