Size: a a a

2020 September 26

AO

Andrew Ostrovskii in pro.algorithms
Mikail Bagishov
То решение, которое ты выше скинул, по сути так и делает. Оно явно отделяет вершины с расстоянием X от вершин с расстоянием X+1
да, в конец добавляю трансформации
источник

AO

Andrew Ostrovskii in pro.algorithms
потому и не могу с конца читать
источник

AO

Andrew Ostrovskii in pro.algorithms
там уже будут новые трансформации
источник

MB

Mikail Bagishov in pro.algorithms
Поэтому каждую из этих групп не обязательно поддерживать в очереди
источник

MB

Mikail Bagishov in pro.algorithms
Короче, вместо одной очереди предлагаю завести две.
источник

AO

Andrew Ostrovskii in pro.algorithms
Так, сейчас не сильно понял. Можно, как для совсем тупого обьяснить)
источник

MB

Mikail Bagishov in pro.algorithms
Окей, давай предложу вариант попроще.
источник

MB

Mikail Bagishov in pro.algorithms
Вместо того, чтобы удалять в лоб, ты можешь поддерживать индекс первого неудаленного элемента head.
Изначально он равен нулю.
Тогда для получения очередной вершины ты делаешь
queue[head++]
источник

AO

Andrew Ostrovskii in pro.algorithms
ааа, кстати, я еще подумал, можно в саму очередь добавлять трансфорации с глубиной, как массив, типа

[['dig','dit','dop],1], [['pop'],2]]
источник

AO

Andrew Ostrovskii in pro.algorithms
ок, спасибо за идею! Проверю, в шифте ли проблема
источник

MB

Mikail Bagishov in pro.algorithms
Теперь получение и "удаление" минимума работает за O(1) и не портит асимптотику.

Но возможно, это не пройдет по памяти.
Тогда фикс:
Если размер "живой" части оказался меньше "мертвой" (то есть 2*head > queue.length), то нужно удалить из queue первые head элементов (там есть метод по типу slice для этого), и положить head = 0.

Это, наверное, неочевидно, но асимптотика по времени остается O(1), а оверхэд памяти не выше двух раз
источник

AT

Anatoly Tomilov in pro.algorithms
Ответили. Это непосредственно следует из устройства CRC32
источник
2020 September 27

AO

Andrew Ostrovskii in pro.algorithms
Mikail Bagishov
Теперь получение и "удаление" минимума работает за O(1) и не портит асимптотику.

Но возможно, это не пройдет по памяти.
Тогда фикс:
Если размер "живой" части оказался меньше "мертвой" (то есть 2*head > queue.length), то нужно удалить из queue первые head элементов (там есть метод по типу slice для этого), и положить head = 0.

Это, наверное, неочевидно, но асимптотика по времени остается O(1), а оверхэд памяти не выше двух раз
уффф, спасибо большoе. Да, было 2 ботлнека. Один таки в shift
источник

AO

Andrew Ostrovskii in pro.algorithms
а 2-й, в том, что я не убирал дубликаты, когда получал данные трансформаций
источник

AO

Andrew Ostrovskii in pro.algorithms
рантайм спид, конечно, ужасный. Но я уже счастлив, что оно работает)))
источник

K

Kotomord_λapki in pro.algorithms
Igor Wylson
Какие предпосчеты нужно сделать, чтобы быстро находить сочетания с n k, по модулю ~ 1е9?
Модуль простой?
источник

MK

Matwey Kornilov in pro.algorithms
Kotomord_λapki
Модуль простой?
А если простой то что?
источник

IW

Igor Wylson in pro.algorithms
Да, модуль простой, мне ответили
источник

IW

Igor Wylson in pro.algorithms
Если кто-то ещё сталкивался с этой проблемой, нужно возвести число в степень (MOD -2), чтобы найти обратное число по модулю, то есть число в -1 степени. Вроде следствие из малой теоремы Ферма
источник

CD

Constantine Drozdov in pro.algorithms
Igor Wylson
Можно, конечно, факториалы посчитать, но как потом делить - неясно
Расширенный Евклид
источник