Я тестирую функцию VB ниже, которую я получил из поиска Google. Я планирую использовать его для генерации хэш-кодов для быстрого сравнения строк. Однако бывают случаи, когда две разные строки имеют один и тот же хэш-код. Например, эти строкиПочему хэш-коды, сгенерированные этой функцией, не уникальны?
"122Gen размер 1 кучи (.NET CLR w3wp памяти): mccsmtpteweb025.20833333333333E-02"
«(w3wp .NET памяти CLR) 122Gen размера 2 кучи: mccsmtpteweb015.20833333333333E-02 "
имеют один и тот же хэш-код 237117279.
Пожалуйста, скажите мне: - Что случилось с функцией? - Как я могу это исправить?
Спасибо
Мартину
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (dest As Any, src As Any, ByVal bytes As Long)
Private Function HashCode(Key As String) As Long
On Error GoTo ErrorGoTo
Dim lastEl As Long, i As Long
' copy ansi codes into an array of long'
lastEl = (Len(Key) - 1) \ 4
ReDim codes(lastEl) As Long
' this also converts from Unicode to ANSI'
CopyMemory codes(0), ByVal Key, Len(Key)
' XOR the ANSI codes of all characters'
For i = 0 To lastEl - 1
HashCode = HashCode Xor codes(i) 'Xor'
Next
ErrorGoTo:
Exit Function
End Function
Да, ты прав. Я тестирую эту функцию для строк 200K и происходит более 4K столкновений. – Martin08 2008-09-15 15:46:44