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


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.