2011-01-12 11 views
0

n個の可能な値を持つn個のプロパティを持つ特定のレコードに対して、それぞれ(int、stringなど)は既存のレコードを検索し、一致するものを返します最も多くの特性。最も一致する属性を持つレコードを検索するアルゴリズム

例:

A = 1 
B = 1 
C = 1 
D = f 

A | B | C | D 
----+-----+-----+---- 
1 | 1 | 9 | f < 
2 | 3 | 1 | g 
3 | 4 | 2 | h 
2 | 5 | 8 | j 
3 | 6 | 5 | h 

それが最もマッチング値を持つように、第1の行は、私が探しているものであろう。私は、値2に近い値を計算する必要はないと考えています。なぜなら、2行目がより一致する可能性があるからです。

答えて

1

各行をループし、フィールドマッチの行スコアに1を加えます(フィールド1のスコアは2です)。これが終了すると、ソートできるスコアの結果セットが得られます。

1

基本的なアルゴリズムは、(Javaの擬似コードで)のようになります。

int bestMatchIdx = -1; 
int currMatches = 0; 
int bestMatches = 0; 

for (int row = 0 ; row < numRows ; row++) { 
    currMatches = 0; 
    for (int col = 0 ; col < numCols ; col++) { 
     if (search[col].equals(rows[ row ][ cols])) 
      currMatches++; 
    } 
    if (currMatches > bestMatches) { 
     bestMatchIdx = row; 
     bestMatches = currMatches; 
    } 
} 

これはイコールで比較するために機能していることを前提とし、2次元配列に格納されたデータ。 'search'は他のすべての行を比較するための参照行です。

関連する問題