2011-01-12 128 views
0

我正在尋找一些算法,對於具有n個可能值的n個屬性的每個給定記錄(int,字符串等)搜索多個現有記錄並返回匹配的記錄最多的屬性。查找具有最匹配屬性的記錄的算法

例子:

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 

第一行是我要找的人,因爲它擁有最匹配的值。我認爲它不需要計算任何接近的值,因爲第2行可能更匹配。

回答

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; 
    } 
} 

這是假設你有一個等於函數來比較,並存儲在一個二維數組中的數據。 'search'是引用行來比較所有其他行。

相關問題