I have a set of A
's and a set of B
's, each with an associated numerical priority, where each A
may match some or all B
's and vice versa, and my main loop basically consists of:
Take the best A
and B
in priority order, and do stuff with A
and B
.
The most obvious way to do this is with a single priority queue of (A,B)
pairs, but if there are 100,000 A
's and 100,000 B
's then the set of O(N^2)
pairs won't fit in memory (and disk is too slow).
Another possibility is for each A
, loop through every B
. However this means that global priority ordering is by A
only, and I really need to take priority of both components into account.
(The application is theorem proving, where the above options are called the pair algorithm and the given clause algorithm respectively; the shortcomings of each are known, but I haven't found any reference to a good solution.)
Some kind of two layer priority queue would seem indicated, but it's not clear how to do this without using either O(N^2)
memory or O(N^2)
time in the worst case.
Is there a known method of doing this?
Clarification: each A
must be processed with all corresponding B
's, not just one.