N個の(必ずしも明確である必要はない)数の長いシーケンスが与えられた場合、
{1, 50, 3, 99, 1, 2, 100, 99, 4, 100, 4, 100} (could be very long)
そして、M個の順序対の小さなセット、
(1, 2)
(2, 1)
(1, 3)
(99, 50)
(99, 100)
順序対がリストのどこかにあるかどうかを検出したいと思います(それらは分離できますが、順序は重要です)。たとえば、上記のカウントは次のようになります。
(1, 2): 2 (each 1 pairs with the later 2)
(2, 1): 0 (no 1's come after the 2)
(1, 3): 1 (only one of the 1's come before the 3)
(99, 50): 0 (no 99's come before the 50)
(99, 100): 5 (3 times for the first 99 and 2 times for the second)
順序対のすべての数値がリストに表示されることが保証されていると仮定すると、これらのカウントを単純なO(N * M)時間(順序対ごとにブルートフォース検索によって達成される)よりも速く抽出するアルゴリズムはありますか?
副次的な質問として、カウントではなくブール値の発生のみに制限する場合、高速なアルゴリズムがあるでしょうか。あれは:
(1, 2): yes
(2, 1): no
(1, 3): yes
(99, 50): no
(99, 100): yes
どんな助けでもいただければ幸いです。