[hash] 개방 해싱과 폐쇄 해싱의 의미

개방형 해싱 (개별 체인) :

개방형 해싱에서 키는 해시 테이블의 셀에 연결된 연결 목록에 저장됩니다.

폐쇄 형 해싱 (개방형 주소 지정) :

닫힌 해싱에서는 모든 키가 연결 목록을 사용하지 않고 해시 테이블 자체에 저장됩니다.

나는 그들이 개방, 폐쇄 및 분리라고 불리는 이유를 이해할 수 없습니다. 누군가 그것을 설명 할 수 있습니까?



답변

“닫힌”대 “개방”의 사용은 우리가 특정 위치 나 데이터 구조를 사용하는 것에 잠겨 있는지 여부를 반영합니다 (이것은 매우 모호한 설명이지만 나머지가 도움이되기를 바랍니다).

예를 들어, “open addressing”의 “open”은 객체가 해시 테이블에 저장 될 인덱스 (일명 주소)가 해시 코드에 의해 완전히 결정되지 않는다는 것을 알려줍니다. 대신 인덱스는 이미 해시 테이블에있는 항목에 따라 달라질 수 있습니다.

“closed hashing”에서 “closed”는 해시 테이블을 떠나지 않는다는 사실을 나타냅니다. 모든 객체는 해시 테이블의 내부 배열에있는 인덱스에 직접 저장됩니다. 이것은 일종의 개방형 주소 지정 전략을 사용해야 만 가능합니다. 이것은 “폐쇄 해싱”과 “개방 주소 지정”이 동의어 인 이유를 설명합니다.

이것을 개방 해싱과 대조하십시오.이 전략에서는 어떤 객체도 실제로 해시 테이블의 배열에 저장되지 않습니다. 대신 객체가 해시되면 해시 테이블의 내부 배열과는 별도의 목록에 저장됩니다. “open”은 해시 테이블을 떠나 별도의 목록을 사용하여 얻을 수있는 자유를 의미합니다. 그런데 “개별 목록”은 개방형 해싱을 “개별 체인”이라고도하는 이유를 알려줍니다.

간단히 말해서, “닫힌”은 객체가 항상 해시 테이블 (폐쇄 된 해싱) 내에 직접 저장되도록 보장하는 것과 같이 일종의 엄격한 보증을 의미합니다. 그런 다음 “closed”의 반대는 “open”이므로 이러한 보장이없는 경우 전략은 “open”으로 간주됩니다.


답변

“해시 테이블”인 배열이 있습니다.

Open Hashing에서 배열의 각 셀은 충돌이 포함 된 목록을 가리 킵니다. 해싱은 연결 목록의 모든 항목에 대해 동일한 인덱스를 생성했습니다.

Closed Hashing에서는 모든 것에 하나의 배열 만 사용합니다. 충돌을 동일한 배열에 저장합니다. 트릭은 당신이 원하는 것을 찾을 때마다 충돌에서 충돌로 점프하는 현명한 방법을 사용하는 것입니다. 그리고이를 재현 가능하고 결정적인 방식으로 수행하십시오.


답변

이름 개방 주소 지정 은 요소의 위치 ( “주소”)가 해시 값에 의해 결정되지 않는다는 사실을 나타냅니다. (이 방법은 닫힌 해싱이라고도합니다.)

에서 별도의 체인 , 각 버킷은 독립적이며, 인덱스와 같은 항목의 ADT (목록, 이진 검색 나무 등)의 일종을 가지고있다. 좋은 해시 테이블에서는 삽입, 검색 등을 위해 주문 O (1) 작업이 필요하기 때문에 각 버킷에는 항목이 0 개 또는 1 개 있습니다.

이것은 인 들의 개별 체인 개조 연산자를 사용하여 간단한 해시 함수를 이용하여 C ++ (명확 나쁜 해시 함수)


답변