あるメモリブロックを別のメモリブロックと比較し、目的の値を提供するアルゴリズムを書いて、一致の品質を判断したいと考えています。私はmemcmp
を調査しました.2つのメモリブロックが同じかどうかを判断するのは本当に便利です。私はこれを達成するために再帰的な関数を書いていますが、それは正しく動作していません。客観的なメモリ比較
DWORD CMemory::Compare(LPBYTE pDst, LPBYTE pSrc, DWORD len)
{
DWORD dwDiff;
if (len == 0)
{
dwDiff = 0;
}
else
{
dwDiff = (*pSrc - *pDst) * len; // * len is attempt to weight difference by MSB
dwDiff += this->Compare(pSrc + 1, pDst + 1, len - 1);
}
return dwDiff;
}
2つのメモリ空間が一致するほど、戻り値は低くなります。たとえば、Hello World 0 !
,Hello World 1 !
、およびHello World 2 !
を含む3つのメモリブロックがあり、いずれのメモリブロックが候補hello world 1 !
と「最善の一致」であるかを調べたいとします。考え方は、Compare
関数を各メモリブロックと候補を順番に比較して3回実行し、Compare
はHello World 1 !
を含むメモリブロックの最小値を返します。しかし、現実には、Hellow World 2 !
を含む最後のメモリブロックの最小値が返されます。
私はこの機能をどのように改善することができますか?ありがとう。
このメソッドはどのように呼び出しますか? –
なぜハミング距離はありませんか? http://en.wikipedia.org/wiki/Hamming_distance –
@ c-smile:提案(+1)ありがとう!私はハミング距離を使用するアルゴリズムを書き直しましたが、今はうまくいっています! –