У меня есть два предложения, которые нужно сравнивать друг с другом. Конечным результатом является то, сколько процентов одного предложения содержится в другом, моя проблема заключается в том, что у меня есть 100 000 записей, которые нужно сравнить, давайте скажем еще 10. Это 1.000.000 циклов, которые в моем алгоритме очень медленные.
Это алгоритм, который я использую:
private double BreakStringsAndCheck(string s1, string s2)
{
if (s1 == null || s2 == null || s1.Length == 0 || s2.Length == 0)
return (double)0;
string[] firstArray = s1.Split(' ');
string[] secondArray = s2.Split(' ');
if (firstArray.Length > secondArray.Length)
{
string[] tempArray = firstArray;
firstArray = secondArray;
secondArray = tempArray;
}
double value = 0;
for (int i = 0; i < firstArray.Length; i++)
for (int j = 0; j < secondArray.Length; j++)
value += firstArray[i] == secondArray[j] ? (double)100 : (double)0;
return findLongest ? value : value / firstArray.Length;
}
Это небольшой метод, но он не очень быстрый. Из моего тестирования я могу выполнить 40-60 сравнений за 1 секунду, то есть почти 5 часов для 1.000.000 циклов.
Можно ли подумать о другом методе или логике, который намного быстрее этого?
Update:
Я попытаюсь объяснить проблему более подробно. У меня есть база данных с более чем 100 000 записей, и каждый день я вставляю и сравниваю 10-20 новых записей в этой базе данных. Эти записи представляют собой предложения от 2 до 10 слов, и мне нужно написать быстрый метод, который будет сравнивать эти новые записи с данными в базе данных, результат должен быть в процентах от того, сколько одного предложения содержит слова от другого.
Мне нужны записи с совпадением слов более чем на 70%.
Я надеюсь, что теперь я понятен.