Похоже, что элементы в A имеют индивидуальный приоритет, элементы в B имеют индивидуальный приоритет, а пары (A, B) имеют комбинированный приоритет. Только объединенный приоритет имеет значение, но, мы надеемся, мы сможем использовать отдельные свойства по пути. Однако существует также соответствие между элементами в A и элементами в B, которое является независимым приоритетом.
Я предполагаю, что для всех a в A, b1 и b2 в B, таких что Match (a, b1) и Match (a, b2), тогда Priority (b1)> = Priority (b2) подразумевает CombinedPriority (a , b1)> = CombinedPriority (a, b2).
Теперь начнем с сортировки B в порядке убывания приоритета. Пусть B (j) обозначает j-й элемент в этом отсортированном порядке. Также позвольте A (i) указать i-й элемент A (который может быть или не быть в отсортированном порядке).
Пусть nextb (i, j) будет функцией, которая находит наименьшее j '> = j такое, что Match (A (i), B (j')). Если такого j не существует, функция возвращает ноль (или другое подходящее значение ошибки). Поиск j 'может просто включать цикл вверх от j, или мы сможем сделать что-то быстрее, если узнаем больше о структуре отношения Match.
Создать приоритетную очередь Q, содержащую (i, nextb (i, 0)) для всех индексов i в A, такую, что nextb (i, 0)! = Null. Пары (i, j) в Q упорядочены по CombinedPriority (A (i), B (j)).
Теперь просто зацикливайтесь, пока Q не станет пустым. Вытяните пару с самым высоким приоритетом (i, j) и обработайте (A (i), B (j)) соответственно. Затем снова вставьте (i, nextb (i, j + 1)) в Q (если nextb (i, j + 1) не равно нулю).
В целом это занимает время O (N ^ 2 log N) в худшем случае, когда все пары совпадают. В общем случае требуется O (N ^ 2 + M log N), где M - количество совпадений. Компонент N ^ 2 может быть уменьшен, если есть более быстрый способ вычисления nextb (i, j), который просто зацикливается вверх, но это зависит от знания отношения Match.
(В приведенном выше анализе я предположил, что и A, и B имеют размер N. Формулы можно легко изменить, если они имеют разные размеры.)
Казалось, вы хотите что-то лучшее, чем время O (N ^ 2) в худшем случае, но если вам нужно обрабатывать каждое совпадение, то у вас есть нижняя граница M, которая может быть N ^ 2 сама по себе. Я не думаю, что вы сможете добиться большего, чем O (N ^ 2 log N) времени, если не существует какой-либо специальной структуры для комбинированного приоритета, которая позволяет вам использовать очередь с приоритетом лучше, чем log-N.