2010-01-13 3 views

답변

130

사전은 키를 값에 매핑하는 일반적인 개념입니다. 이러한 매핑을 구현하는 방법은 여러 가지가 있습니다.

해시 테이블은 사전을 구현하는 특정 방법입니다.

해시 테이블 외에 사전을 구현하는 또 다른 일반적인 방법은 red-black trees입니다.

각 방법마다 장단점이 있습니다. 빨강 - 검정 나무는 항상 O (로그 N)에서 검색을 수행 할 수 있습니다. 해시 테이블은 입력에 따라 O (N)로 저하 될 수 있지만 O (1) 시간에서 조회를 수행 할 수 있습니다.

+13

나는 이것을 한 번 이상 투표 할 수 있으면 좋겠다. – LJM

+2

나는 당신을 위해 그것을 다시 upvote거야. –

8

파이썬 사전은 내부적으로 해시 테이블로 구현됩니다.

+0

dict의 하위 클래스는 사전의 Python 구현이 아닙니다. 그것은 당신 자신의 것입니다. –

22

사전은 키를 값에 매핑하는 데이터 구조입니다.

해시 테이블은 키의 해시 값을 가져 와서 해시 함수를 적용하여 하나 이상의 값이 저장되는 버킷에 매핑하여 데이터를 값으로 매핑하는 데이터 구조입니다.

IMO 이것은 목록과 연결된 목록 간의 차이점을 묻는 것과 유사합니다.

명확성을 위해 파이썬이 현재 해시 테이블을 사용하여 사전을 구현하는 경우가있을 수 있으며 사전에 사전을 중지하지 않고 파이썬이 사실을 변경하는 경우가있을 수 있습니다 .

+0

사전이 키를 저장한다는 주된 차이점이 있습니까? 그래서 당신은 elsit의 키에 대해서 사전을 질의 할 수 있습니다 - 당신은 해쉬 테이블이 될 수 없습니다. –

+1

@Martin Beckett : Nope. 둘 다 키를 저장할 수 있습니다. 사전은 일반적입니다. 해시 테이블은 일반적인 개념의 특정 구현입니다. –

+0

@Martin Beckett : 흠, 흥미로운 점. 사전이 키를 저장하고 해시 테이블이 저장하지 않는 경우가 있습니까? 자바의'Hashtable'은 키를 저장합니다 - 해쉬 테이블이 아닌가요? – danben

13

"사전"은 wikipedia과 같이 프로그래밍에서 몇 가지 다른 의미를 지닙니다. "연관 배열"은 파이썬이 용어 ("매핑"이라고도 함)를 사용한다는 의미 중 하나입니다. 의미 (그러나 "데이터 사전"및 암호 추측 시도의 "사전 공격"도 중요합니다).

해시 테이블은 중요한 데이터 구조입니다. 파이썬은 이들을 사용하여 중요한 내장 데이터 유형 인 dictset을 구현합니다.

그래서, 심지어 파이썬에서, 당신은 "사전"에 대한 동의어 ... 유사한 데이터 구조부터도 "세트"를 구현하는 데 사용됩니다로 "해시 테이블"을 고려하지 않을 수 있습니다 -!)

0

사전은 해시 테이블을 사용하여 구현됩니다. 제 생각에는 2의 차이점은 스택을 구현하기 위해 배열을 사용하는 스택과 배열의 차이로 생각할 수 있습니다.

1

해시 테이블은 항상 값에서 작동하는 일부 기능을 사용하여 값이 저장 될 위치를 결정합니다. 사전 (나는 당신이 그것을 의도한다고 믿는다)은 좀 더 일반적인 용어이며 단순히 해시 테이블 일 수도 있고 저장 위치를 ​​결정할 때 값 자체를 고려하지 않는 간단한 구조로 구현 될 수도있는 조회 메커니즘을 나타냅니다.

관련 문제