해시 테이블 작업 O (1)는 어떤 종류의 데이터입니까?


18

에 대한 답변에서 해시 테이블 조회 O (1)이다 (시)는? 데이터가 특정 통계 조건을 만족할 때 해시 테이블에 최악의 동작 (최소한 상각)이 있으며 이러한 조건을 광범위하게 만드는 데 도움이되는 기술이 있습니다.O(1)

그러나 프로그래머의 관점에서 볼 때 내 데이터가 무엇인지 미리 알 수 없습니다. 종종 외부 소스에서 비롯됩니다. 그리고 한 번에 모든 데이터를 갖는 경우는 거의 없습니다. 종종 삽입 및 삭제가 조회 속도보다 훨씬 낮은 속도로 발생하므로 해시 함수를 미세 조정하기 위해 데이터를 사전 처리합니다.

따라서 데이터 소스에 대한 지식이 있다면 해시 테이블에 연산이있을 가능성과 해시 함수에 사용할 기술 이 있는지 어떻게 알 수 있습니까?O(1)


아, 그리고 해시 테이블과 이진 트리는 관련이 있지만 여기서는 해시 테이블과 최상의 시간에 초점을 맞추고 있습니다.
Gilles 'SO- 악한 중지'

해시 함수의 가장 좋은 경우는 데이터가 균일하게 분산 된 경우입니다.
0x0

@Sunil : 사실이 아닙니다. 맞춤형 해시 함수를 가질 수 있습니다.
Raphael

이 질문이 너무 광범위하다고 생각합니다. 특히, 데이터 소스에 대한 지식이 어떻게 보일지에 대해 확신 할 수 있습니까?
Raphael

@Raphael 예를 들어, 키가 문자열 인 경우 : 사람들의 이름, 디렉토리의 파일 이름, XML 태그, 파일 해시 ...
Gilles 'SO-stop

답변:


4

조회에는 최악의 경우에도 항상 O (1) 연산이 필요하다는 것을 보장하는 몇 가지 기술이 있습니다.

해시 테이블에 O (1) 연산이있을 가능성이 있는지, 그리고 내 해시 함수에 사용할 기술이 있는지 어떻게 알 수 있습니까?

최악의 경우는 일부 악의적 인 공격자 (Mallory)가 Mallory가 시스템을 느리게 실행하도록 특별히 선택한 데이터를 의도적으로 제공 할 때 발생합니다.

특정 해시 함수를 선택한 후에는 Mallory가 선택한 해시 함수를 찾지 못할 것이라고 가정하는 것이 지나치게 낙관적 일 수 있습니다. Mallory가 선택한 해시 함수를 발견하면 Mallory가 해당 해시 함수를 사용하여 해시 테이블에 삽입 할 많은 데이터를 제공 할 수있게되면 다음과 같은 결과가 초래됩니다. 해시 함수를 사용하여 충돌 할 가능성이있는 데이터 항목을 찾은 다음 충돌 할 가능성이있는 수백만 개에 달하는 데이터 항목을 공급하여 O (1)보다 훨씬 느리게 조회를 수행합니다.

"최악의 경우에도 O (1) 조회"를 보장하는 모든 기술은 향후 모든 가능한 조회가 O (1) 시간에 성공할 수 있도록 각 삽입에 대해 약간의 추가 작업을 수행하여이 문제를 방지합니다. . 특히, Mallory는 조만간 우리가 사용하는 해시 함수를 발견 할 것이라고 가정합니다 (최악의 경우). 그러나 그는 다른 해시 함수 ( 표 해시 또는 기타 범용 해싱)를 선택하기 전에 몇 가지 데이터 항목 만 삽입 할 수있는 기회를 얻었 습니다. 지금까지 보유한 모든 데이터를 2에서 조회 할 수 있도록 특별히 선택했습니다. 또는 3 개의 프로브, 즉 O (1). 우리는이 기능을 무작위로 선택하기 때문에 Mallory가 선택한 기능을 한동안 알지 못할 것입니다. 말로리라도이 새로운 해시 함수를 사용하더라도 이전 데이터와 충돌하는 데이터를 즉시 제공합니다. 다시 해싱 한 후 다시 해시 한 후 자신과 다른 모든 사람이 우리에게 공급 한 모든 이전 데이터를 볼 수 있도록 새로운 해시 함수를 선택할 수 있습니다. 최악의 경우 2 개 또는 3 개의 프로브에서 증가합니다. 즉 최악의 경우 O (1) 조회입니다.

새 해시 함수를 무작위로 선택하고 각 조회가 항상 O (1)임을 보장 할 수있을 정도로 자주 전체 테이블을 다시 해쉬하는 것은 상당히 쉽습니다. 이렇게하면 각 조회가 항상 O (1)임을 보장하는 반면, N-1 항목을 이미 포함하는 해시 테이블에 N 번째 항목을 삽입 할 때 이러한 기술은 때때로 해당 삽입에 O (N) 시간이 필요할 수 있습니다. 그러나 Mallory가 새로운 해시 기능을 사용하여 이전 데이터와 충돌하는 새로운 데이터를 의도적으로 제공하더라도 시스템은 Mallory 및 기타의 많은 항목을 수용하기 전에이를 수용 할 수 있도록 시스템을 설계 할 수 있습니다. 완전 O (N) 재 구축. 최악의 경우에도 O (1) 조회를 보장하기 위해 새로운 기능 및 재해시를 선택하는 해시 테이블 기술은 다음과 같습니다.

  • 뻐꾸기 해싱 은 각 키 조회가 최대 2 개의 해시 계산과 2 개의 테이블 조회로 성공하도록 보장합니다.
  • hopscotch hashing 은 테이블에서 적은 수의 H (아마도 H = 32) 연속 항목을 검사 한 후 각 키 조회가 성공하도록 보장합니다.
  • 다이내믹 퍼펙트 해싱 -Dietzfelbinger의 1994 년 논문은 내가 읽은 첫 번째 논문인데, 각 키 룩업이 항상 2 개의 해시 계산과 2 개의 룩업으로 성공하도록 보장하기 위해 "빈번하게"다시 해시 되더라도 전체 재해시를 거의 수행하지 않기 때문에 각 전체 재해시가 O (n) 시간을 사용하더라도 예상되는 평균 삽입 및 삭제 비용은 O (1)로 상각됩니다.

데이터 구조 / 해시 테이블



5

정적 세트의 경우 해시 테이블 조회는 항상 일 수 있습니다. Arne Andersson 및 Mikkel Thorup의 2002 년 논문 참조 : 지수 검색 트리가있는 동적 정렬 세트O(1)

먼저, 우리는 최악의 액세스 비용 으로 선형 공간 정적 사전을 구성하기위한 최초의 결정 론적 다항식 시간 (n) 알고리즘을 제공합니다 (완벽한 해싱). 앞에서 언급했듯이, 일정한 시간에 멤버 쿼리 (이웃 쿼리는 지원되지 않음)를 지원하는 선형 공간 데이터 구조는 나눗셈없이 최악의 비용 O ( n 2 W ) 로 구성 할 수 있습니다 [30]. 단어 크기의 의존성을 제거 할 수 있음을 보여줍니다.O(1)O(n2W)

일반적인 경우 Andersson 등은 O 에서 조회 및 업데이트를 지원하는 해시 색인 데이터 구조에 대한 알고리즘을 제공합니다 ( O(logn/loglogn)O(1)


5

ha,b(x)=ax+bmodp

과거 Crosby and Wallach의 Usenix 논문에 따르면 일반적인 프로그래밍 언어는 이와 같은 작업을 수행하지 않았기 때문에 많은 웹 앱 (및 다른 서버)이 제조 충돌을 기반으로 DoS 공격에 노출 된 상태로 남아있었습니다. (이 논문은 2003 년에 발간되었지만 Dan Bernstein이 같은 아이디어를 꽤 일찍 발견했다고 제안합니다.)

빠른 구글 검색을 구현의 측면에서 예술의 상태가 모두했다고 주장 제공 향상개선되지를 .

또 다른 측면은 대역폭이 높은 세계에서 타이밍 공격으로 인해 온라인에서 충돌을 찾는 것이 어렵지 않다는 것입니다 (Crosby-Wallach 링크가 제안한 것처럼 오프라인과 달리). Daniel Golovin은 몇 년 전에 타이밍 공격에 취약하지 않은 데이터 구조에 대한 결과를 보였지만 널리 사용되는지는 알지 못합니다.


0

해시 테이블에 대한 평균 사례 분석은 입력의 균일성에 대한 일반적인 가정하에 이루어지며, 이는 한 번 occam의 면도기로 인해 발생합니다.

도메인과 키 분포에 대한 추가 지식이 있으면 동일한 평균 사례 분석을 수행하고 균일 분포를 분포로 바꾸고 적어도 이론적으로 기대치를 다시 계산할 수 있습니다.

물론 어려움은 비 균일 한 사례 분석이 어렵다는 사실에서 비롯된다. 그리고 "지식"은 그러한 분석에 쉽게 사용할 수있는 분포로 편리하게 표현할 수 없습니다.

가장 쉬운 방법은 시뮬레이션입니다. 해시 테이블을 구현하고 일반적인 입력 세트에서 수행하는 방식을 준수하십시오.


8
첫 문장에 동의하지 않습니다. 표준 가정은 해시 함수 가 입력 데이터가 아니라 임의적 이라는 것입니다 . 균일하게 분산 된 데이터를 가정하면 분석을 환상의 영역으로 끌어 올릴 수 있습니다. 실제 데이터는 결코 균일하지 않습니다! 그러나 해시 함수를 충분히 균일하게 만드는 교과서 기술이 있습니다. 범용 해싱 및 특히 테이블 해싱을 참조하십시오 .
JeffE

@JeffE Raphael의 답변 에서 평균 사례 분석을 보면 이 균일 성 가정을 언급합니다. 분포가 없으면 평균 사례 분석을 수행 할 수 없습니다. 당신은 하나를 선택해야하며, 그렇지 않은 경우, occam의 면도기는 균일 한 것을 제안합니다.
uli

6
물론 배포판이 있습니다. 해시 함수를 선택하는 데 사용하는 분포입니다. 입력 데이터의 분포를 선택하는 것은 가로등 기둥 아래에서 잃어버린 열쇠를 찾는 것과 같습니다. 물론, 빛이 더 나아졌지 만, 아마도 당신이 떨어 뜨린 곳이 아닐 것입니다.
JeffE

@JeffE 평균 사례 분석이 수행되는 방식으로 분포를 선택하고 계산을 시작하십시오. 언제나처럼 배포판의 선택은 논쟁의 여지가 있습니다. 균일하지 않은 평균 사례 분석을 수행 할 수 있습니다.
uli

4
예, 어떻게되는지 알고 있습니다. (내 프로필을 확인하십시오.) 분석을 예측하려면 (분석의 전체 요점) 해시 함수를 무작위 화해야합니다. 그런 다음 정확한 분포를 선택했습니다.
JeffE

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