Tôi muốn băm một chuỗi có độ dài lên đến 30. Điều gì sẽ là ý tưởng tốt nhất để làm điều đó nếu thời gian là mối quan tâm của tôi. Chức năng này sẽ được gọi hơn 100 triệu lần. Hiện tại tôi đang sử dụng đoạn mã sau,Một hàm băm nhanh cho chuỗi trong C#
static UInt64 CalculateHash(string read, bool lowTolerance)
{
UInt64 hashedValue = 0;
int i = 0;
while (i < read.Length)
{
hashedValue += read.ElementAt(i) * (UInt64)Math.Pow(31, i);
if (lowTolerance) i += 2;
else i++;
}
return hashedValue;
}
Có lý do gì khiến phương thức 'Object.GetHashCode()' không hoạt động đối với bạn không? Có vẻ như bạn đang thực hiện khá nhiều khái niệm tương tự. –
Bất kỳ thứ gì không sử dụng * toán học dấu chấm động * sẽ nhanh hơn. –
GetHashCode không thể tồn tại, vì vậy nếu anh ta cần lưu trữ mã băm vào cơ sở dữ liệu, nó không hữu ích. Sau đó, một lần nữa, không phải là điều này. Sử dụng của bạn là gì? Bạn chỉ cần băm chuỗi khi chạy, hay bạn cần làm gì với Hash? Adler-32 có thể là một lựa chọn nếu bạn cần lưu trữ nó và không chạy quá nhiều va chạm. –