2013-02-25 2 views
2

HashMap 데이터 구조는 키의 해시 코드를 기반으로 버킷간에 키를 배포합니다. 대개 해싱 알고리즘이 매우 좋은 경우 모든 키가 다른 버킷에 분산됩니다. 그러나 모든 키가 동일한 해시 코드를 반환하면 어떻게 될까요? 삽입/검색 작업은 O (n)의 순서가됩니다.HashMap에서 균등 분배를 보장/강제하는 방법은 무엇입니까?

내 자신의 HashMap을 구현하는 경우 양동이간에 균등하게 분배되도록하려면 어떻게해야합니까? 심지어 방법이 있습니까?

답변

1

그러나 모든 키가 동일한 해시 코드를 반환하면 어떻게 될까요?

그럼 게임을 잃어 버렸습니다. 당신이 할 수있는 일이 없습니다. 사용자 데이터 구조가 수도의을하지만, 그들은 첫 번째 경우에서 병리학 hashCode 구현에 대한 책임이있는 사람입니다 - 데이터 구조가 정말 상관하지 않기 때문에

는하지만, 걱정하지 않습니다.

이론적으로, 심지어 악의적가 선택한 입력 값은 universal hashing으로 합리적으로 고르게 분포 될 수 있지만, 자바, 그건 정말 옵션이 아니다.

1

해시를 생성하려면 키에서 DES와 같은 것을 실행하십시오. 알맞은 암호화 알고리즘은 결과가 무작위로 보일 것을 보장합니다.

+1

해시 생성 _from 무엇에서 _ 자바에서는 데이터 구조 작성자가 아닌 'HashMap'의 소비자가'hashCode()'구현을 선택합니다. –

+0

해시의 생성을 무작위로 만들 수 있지만 검색시 실제 문제가 발생합니다. TreeMap의 배열을 기본으로하는 HashMap을 만들 수 있습니다. 그 방법은 내가 삽입/검색 (그리고 잘하면 Log (n)에 모든 것을 할) 키의 comparability에 뱅킹 것입니다. 그러나 그것은 단지 문제를 Comparable 함수로 연기하는 것입니다. 대신 수학 함수를 사용할 수 있습니까? 아니면 다른 디자인 패턴? –

+0

검색시 문제가 발생하는 이유는 무엇입니까? 키는 항상 동일한 값으로 해시됩니다. – stark

관련 문제