개방 해싱과 폐쇄 해싱의 의미


94

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

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

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

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

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


실제로 우리는 해시 테이블에 키를 저장하지 않고, 튜플 (Key, Value)을 취하고 키를 사용하여 값을 저장해야하는 위치를 계산합니다. 그래서 실제로 우리는 값을 해시 테이블에 저장합니다
Mr. Suryaa Jha

답변:


117

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

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

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

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

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


17
Open Hashing (Separate Chaining)은 캐시 친화적이지 않고 O (n / 2) 행동에 대한 충돌 공격에 대해 훼손되는 연결 목록에 제한되지 않는다는 점을 추가해야합니다. 충돌하는 버킷에 트리 또는 정렬 된 배열을 사용할 수도 있습니다.
rurban

상충되는 정보로 인해 반대 투표 : "open"및 "closed는 동의어이며, 마지막에" "closed"의 반대는 "open"입니다.
Marwen 트라벨시

1
@MarwenTrabelsi 나는 "closed"와 "open"이 동의어라고 말한 적이 없습니다.
Ken Wayne VanderLinde

"이는"폐쇄 해싱 "과"개방 주소 지정 "이 동의어 인 이유를 설명합니다. '
Marwen Trabelsi

1
누군가 이것이 올바른 역사적 어원이라는 것을 증명하는 출처를 제공 할 수 있습니까?
Santropedro

3

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

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

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


2

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

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.