2016-06-24 19 views
2

2つのオブジェクト、オブジェクト1とオブジェクト2を比較するアルゴリズムを開発中です。各オブジェクトは配列A、B、C、D、Eの5つの異なる配列を持ちます。複数配列の類似性クエリを解析する

2つのオブジェクトが一致するためには、オブジェクト1 Aからの少なくとも1つのアイテムがオブジェクト2に属していなければなりません。ANDオブジェクト1 Bはオブジェクト2 Bなどでなければなりません。各アレイA〜Eの一致数が多いほどスコアが高い一致が生成されます。

オブジェクト1とオブジェクト2をプルする必要がありますが、各アレイでn^2の複雑さの検索を行い、両方の配列にどれが存在するかを判断しますか?それから、各アレーにどれくらいの試合があったのかをスコア化して追加して合計すると、スコアが得られます。たぶん私はこの問題についてすべて間違っをつもりです特にParse.com

ため、このためのより良いオプションが存在しなければならないように私は感じ

、誰かがこの問題で私を助けてくださいすることができます。私はこのコードをいくつか用意していますが、私はコードをまだ始めていません。なぜなら、私の頭をデザインする最善の方法の周りを包み込むことができないからです。すでに2つのオブジェクトデータベースが既に配置されています。 ありがとう!

私が言ったように、私は間違った方法でこの問題を考えているかもしれません。私がしようとしていることが不明な場合は、私に知らせてください。

+1

N^2の複雑さで終わるつもりなら、配列内のすべてを別の配列にチェックすることは、効率的なアルゴリズムを作りたい人にとっては悲しい時です。しかし、もし誰かが別の解決策を持っていれば、私は聞くことに非常に興奮します! –

答えて

0

最も簡単な解決策:

コピーいくつかのアレイ物体1からすべての要素は、テーブル(順不同マップ)をハッシュし、その後マップに第2オブジェクトの配列、およびルックアップ・プレゼンスを反復します。したがって、時間の複雑さはO(N)である。

スマートソリューション:

ダブルハッシュアルゴリズムとハッシュテーブルなどの構造ではなく、「ナイーブ配列」ではなく、配列内のすべてのオブジェクトの要素を保管してください。その場合は、objects1,2のすべての配列が事前に索引付けされていて、必要なものは何ですか?反復配列、要素数が少なく、一致要素と索引配列の長さが最も長い配列です。

関連する問題