C++ Hash Function

조회수 1986회

C++에서 Dynamic Hash를 구현하는 중입니다.

value = hash_function(key) ; 이라고 알 고있습니다.
key는 Dynamic Hash를 분류 할 attributes(예를 들면 Student ID)이고,

value는 해당 key를 가진 레코드가 저장될 Block Number라고 알고 있습니다.

여기까지 맞나요...?

제가 궁금한 것은, C++에서 정해진 Block Number에 파일을 읽어오고 저장 할 수 도록 제공 되는 표준 라이브러리가 있나요..?

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • hash 자료구조는 버킷 수와 같은 hash 결과(버킷 번호)가 나왔을 때 중복에 대한 처리가 큰 이슈입니다.

    버킷 수는 소수(prime number)가 이상적이라고는 하나 정해진 건 없습니다.

    c++11에서 unordered_map, unordered_set을 사용할 수 있으나 내부 구현은 hash 자료구조를 사용하지만 질문에 대응하는 라이브러리는 존재하지 않습니다.

    구한다고 해도 입력되는 자료에 따라 heap에 만들 버킷 수와 hash함수가 있을리가 없겠죠. 상황마다 다르니... 결국 목적에 의해 만들어 사용해야 하기에 진행하려는 프로젝트에 따라 구현해야 합니다.

    개발할 때 참고할 만한 내용은 아래와 같습니다.

    • 버킷 수는 입력 자료 수와 분포를 고민하여 만들어야 합니다.
    • hash() 를 버킷 수에 이상적으로 분포되도록 만들어야 합니다.
    • 입력되는 key는 다르나 hash()의 결과가 같을 경우 이미 입력된 버킷에 데이터를 덮어쓰는 것을 유념하여 해결해야 합니다.
    • 보통 hash 체인 기법을 사용하여 간단하게 해결할 수도 있으나 내부 자료구조는 꼭 체인 기법 말고도 중복되는 것에 대한 해결이라면 프로젝트 목적에 맞게 개발할 수도 있습니다.
    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)