3

n識別されるセットがsetIdあり、それぞれに任意の数の要素を含むことができます(elementId, priority)

私のアルゴリズムは、入力 two を受け取り、2 つの入力セットの共通部分にあり、優先度が最も高い (優先度の合計)setId最初の要素を含むセットを出力に与える必要があります。m

例:

n=3, m=1

Set1: { (1, 1), (12, 2) }
Set2: { (1, 4), (23, 6), (33, 22) }
Set3: { (33, 1), (1, 16 }


Input: Set2, Set3
Output: { (33, 23) }

私の質問は、無限のスペースがあると仮定すると、パフォーマンスを最適化するために使用できる最良のデータ構造は何ですか?

もちろん、考えられるすべての交差を事前に計算することは有効な答えではありません。

編集

現実的な数字:

  • n、セット番号、は~ 10^6
  • セットの平均カーディナリティは です~ 5*10^3
4

1 に答える 1

3

セットの 1 つを取得し、ハッシュ マップに変換します。他のセットを反復し、各メンバーについて、ハッシュ マップ内の要素の検索を試みます。見つかった場合は、結果をヒープに追加します。ヒープのサイズが、保持したい要素の数よりも大きくなった場合は、ヒープ内の最下位のアイテムを破棄します。

于 2015-02-24T16:03:44.950 に答える