Алгоритм поиска записи с наиболее подходящими атрибутами - PullRequest
0 голосов
/ 12 января 2011

Я ищу какой-то алгоритм, который для данной записи с 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

Первая строка будет той, которую я ищу, так как она имеет наиболее подходящие значения.Я думаю, что не нужно вычислять какую-либо близость к значениям, потому что тогда строка 2 может быть более подходящей.

Ответы [ 2 ]

1 голос
/ 12 января 2011

Базовый алгоритм может выглядеть так (в псевдокоде 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' - это ссылочная строка для сравнения всех остальных строк с ней.

1 голос
/ 12 января 2011

Переберите каждую строку, добавьте один к счету строк совпадений полей (поле 1 имеет счет 2), и когда это будет сделано, у вас будет набор результатов оценок, которые вы можете отсортировать.

...