У меня есть набор A
-х и набор B
-х, каждая с соответствующим числовым приоритетом, где каждый A
может соответствовать некоторым или всем B
«S, и наоборот, и моему основному цикл в основном состоит ofПарный приоритет очередь
Возьмите лучшие A
и B
в приоритетном порядке, и делайте что-нибудь с A
и B
.
Самый очевидный способ сделать это с помощью одной приоритетной очереди (A,B)
пар, но если есть 100000 A
«с и 100000 B
» S, то множество O(N^2)
пар не помещается в памяти (и диск слишком медленно).
Другая возможность для каждого A
, через каждые B
. Однако это означает, что глобальный порядок приоритетов - только A
, и мне действительно нужно учитывать приоритет обоих компонентов.
(Приложение доказательство теорем, где указанные выше параметры называются алгоритм пара и данный раздел алгоритма соответственно; недостатки каждого из них известны, но я не нашел никаких ссылок на хорошее решение.)
Кажется, что указана некоторая двухуровневая очередь приоритетов, но неясно, как это сделать без использования O(N^2)
или O(N^2)
времени в худшем случае.
Есть ли известный способ сделать это?
Уточнение: каждый A
должен обрабатываться со всеми соответствующими B
, а не только одним.
Что произойдет, если есть A без соответствующего B? –
@Jason Punyon Тогда делать нечего. – starblue
«Каждый A может соответствовать некоторым или всем B». Хорошо, но как мы узнаем, какие WH подходят для B? –