私は2つの文を比較する必要があります。 最後の結果は、1つの文がもう一方の文にどれだけ含まれているかです。私の問題は、比較が必要な100.000レコードがあり、別の10を言うことができるということです。 私のアルゴリズムでは非常に遅い1.000.000ループです。C#での文字列比較のためのより高速なアルゴリズム#
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;
}
をそれは小さな方法だが、それは非常に高速ではありません。
これは、私が使用していたアルゴリズムです。私のテストでは、1秒間に40-60回の比較を行うことができます.1000.000回のループではほぼ5時間です。
これよりもはるかに高速な別の方法やロジックが考えられますか?
更新:
私は詳細に問題を説明しようとします。 私は100.000以上のレコードを持つデータベースを持ち、毎日私はこのデータベースに10-20個のレコードを挿入し、比較します。 このレコードは2〜10ワードのセンテンスで、この新しいレコードとデータベース内のレコードとを比較する高速メソッドを作成する必要があります。結果は、1つのセンテンスに他のセンテンスの単語がどれくらい含まれているかの割合になります。
単語の一致率が70%を超えるレコードが必要です。
私は今はっきりしていることを願っています。
Parallel.Forなどで詰め込んでみることができますか?それが助けになるかどうかだけを確認する? –
私はそれを試みますが、私はそれがバックグラウンドで同じことをすると思います。 – Pece
最初に、doubleの代わりにunsigned longを使用できることがわかりました。型キャストには時間がかかりすぎます。ulong value = 0を使用してください。 ... – Yuriy