해시와 사전의 차이점은 무엇입니까?


46

차이점은 무엇이며 Hash그리고 Dictionary?

스크립팅 배경에서 나왔을 때 나는 그것들이 비슷하다고 생각하지만 정확한 차이점을 알고 싶었습니다. 인터넷 검색은별로 도움이되지 않았습니다.

답변:


92

Hash프로그래머가 구현 인터페이스를 혼동 (한 매우 가난이라는 데이터 구조 전체 이름 즉, 쓰기에 너무 게으른 HashTable대신, 약자에 의존는 Hash).

Dictionary인터페이스 의 "올바른"이름 (= ADT ), 즉 (일반적으로 고유 한) 키를 반드시 고유하지는 않은 값에 매핑하는 연관 컨테이너입니다.

해시 테이블은 (런타임 측면에서) 상당히 우수한 액세스 특성을 제공하는 사전의 한 가지 가능한 구현이므로 종종 기본 구현입니다.

이러한 구현에는 두 가지 중요한 특성이 있습니다.

  1. 키는 해시 가능 하고 동등성이 비슷해야 합니다.
  2. 항목은 사전에 특정 순서로 나타나지 않습니다.

키를 해시 가능하게하려면 나중에 배열에서 인덱스로 사용되는 키에서 숫자 값을 계산할 수 있습니다.

키에 순서 를 부여하는 사전 데이터 구조의 대체 구현이 있습니다. 이를 종종 정렬 된 사전 이라고합니다 (다른 효율적인 구현이 존재하지만 일반적으로 검색 트리로 구현 됨).


요약하면, 사전 은 키를 값에 매핑하는 ADT입니다. 이 ADT에는 여러 가지 가능한 구현이 있으며 그 중 해시 테이블 은 하나입니다. Hash은 잘못된 이름이지만 문맥 상 해시 테이블 측면에서 구현되는 사전과 동일합니다.


4
C ++로 예제를 제공하기 위해 표준 연관 컨테이너 템플리트를 해시로 구현할 수 없었지만 다음 표준에는 실제로 해시 테이블이 있습니다. 그들은 unordered_map자신이 아닌 자신이하는 일을 보여 주도록 부름 받았습니다.
David Thornley

6
어떤 권위에 따라“올바른”? Ruby 및 Perl과 같은 일부 언어에서 이러한 구조의 공식 이름 인 "올바른"은 "해시"입니다.
nohat

11
@ nohat : 따옴표 사용에 주목하십시오. 또한, 내가 이름이 잘못 선택 이유를 설명했다, 내가하지 않은? 따라서 권한이 필요한 경우 이론적 컴퓨터 과학 경찰의 권한에 의한 것입니다.
Konrad Rudolph

9
흥미롭게도 Ruby 1.9에서는 해시 테이블이 아닌 삽입 순서를 유지하기 Hash때문에 Ruby 1.9 Hash는 삽입 순서를 유지하기 때문에 실제로 해시 테이블을 사용 하여 클래스 를 구현할 수 없습니다. 따라서 Ruby 1.9에서는 이름 Hash이 더 이상 구현을 반영하지 않습니다.
Jörg W Mittag

7
@hippietrail 당신이 틀 렸습니다 – 먼저, 그것들 객관적인 설명입니다. 결국, 나는 네이밍이 왜 잘못되고 오명인지를 인정합니다 (아래 참조). “너무 게으른”부분은 예술적인 라이센스이지만, 이름을 줄이는 이유는 본질적인 것입니다. 즉, 여기에서 이름을 줄이는 것 외에 짧은 이름을 사용할 이유가 없습니다. 그리고 당신은“사전”에 대해 틀 렸습니다 : 그것은 단순히 데이터 구조 의 공식 명칭 입니다. 컴퓨터 과학의 맥락에서“사전”에 대한 당신의 정의는 틀리며, 그 이름은 파이썬보다 수십 년 전입니다.
Konrad Rudolph

8

"사전"은 개념의 이름입니다. 해시 테이블은 가능한 구현입니다.


1
해시는 ADT이기도합니다. HashTable은 해시
Sairam

3
@Sairam 나는 '해시'가 해시 테이블이 아닌 해시 함수를 의미하는 것이 훨씬 일반적이라고 생각합니다.
jk.

@jk 실제로 "해시"는 일부 입력에 "해시 함수 / 알고리즘"을 적용한 결과입니다. (OOP 한정되지 일반적인 형태의 물체)에 "해시 테이블"또는 일부 객체에 "해시 맵"omehoe과 관련된 해쉬 객체
요하네스

'해시'를 사용하여 해시 함수 연산이 아닌 사전 유형 구조를 나타내는 언어가 있습니다. 루비, 예를 들어 .
Sean Burton

7

사전은 빠른 조회 / 삽입에 사용되는 모든 데이터 구조 구현에 사용되는 총칭입니다. 이것은 해시 테이블, 스킵리스트, rb 트리 등과 같은 다양한 데이터 구조를 사용하여 달성 / 구현 될 수 있습니다. 해시 테이블은 사전 구현을 포함하여 많은 목적에 유용한 특정 데이터 구조입니다.


해시는 ADT이기도합니다. 해시와 사전 ADT 사이에 특정 차이점이 있습니까?
Sairam

2
@Sairam : 아니요, 해시는 특정 종류의 알고리즘 (해시 함수)의 출력입니다.

5

사전 의 AN 직접 내부 값을 참조하는 키를 사용하여 연관 배열 .

(KEY => VALUE)

해시 더 자주로 설명 해시 테이블 사용 해쉬 함수 값이 될 것이다 메모리 위치 (또는 더 쉽게 배열)를 계산. 해시는 KEY를 입력으로 사용하고 값을 출력으로 제공합니다. 그런 다음 해당 값을 메모리 또는 배열 인덱스에 연결하십시오.

KEY => HASH FUNCTION => VALUE

하나는 직접적이지만 다른 하나는 그렇지 않은 것 같습니다. 해시 함수도 완벽하지 않을 수 있으며 때로는 잘못된 값을 참조하는 인덱스를 제공 할 수 있습니다. 그러나 그것은 고칠 수 있습니다.

가장 좋은 곳 : Wikipedia ( 연관 배열해시 테이블 )

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