[go] FNV 해싱 알고리즘의 동작 원리

이 알고리즘은 비트 연산과 곱셈을 사용하여 해시 값을 계산합니다.

FNV 해싱 알고리즘은 다음과 같은 과정으로 동작합니다:

  1. 처음에 해시 값을 특정한 초기값(예: 2166136261)으로 설정합니다.
  2. 데이터의 각 바이트를 순서대로 읽어들여 연산에 활용합니다.
  3. 데이터 바이트와 초기값을 이용하여 XOR 연산을 수행합니다.
  4. 데이터 바이트를 초기값에 곱셈하여 해시 값에 누적합니다.

이 과정을 데이터의 모든 바이트에 대해 반복하여 최종 해시 값을 얻습니다.

예를 들어, “hello”라는 문자열을 FNV 해싱 알고리즘을 통해 해싱하면 고유한 해시 값이 계산됩니다.

이 알고리즘은 단순하고 빠르게 동작하며, 일반적으로 문자열이나 키와 같은 데이터를 해싱하는 데 사용됩니다.

const (
    FNVOffsetBasis = 2166136261
    FNVPrime       = 16777619
)

func fnvHash(data []byte) uint32 {
    hash := FNVOffsetBasis
    for _, b := range data {
        hash ^= uint32(b)
        hash *= FNVPrime
    }
    return hash
}

FNV 해싱 알고리즘은 단순한 구조이기 때문에 해시 충돌의 가능성을 조금 높일 수 있지만, 대부분의 경우에는 충분히 효율적으로 동작합니다.

자세한 내용은 다음 참고 자료를 확인하시기 바랍니다: