왜“해시 테이블”또는“해시 함수”라고 불리는가? 해시는 여기에서 이해가되지 않습니다.


26

해시 테이블과 해시 함수를 사용하고, 듣고, 이야기하고, 구현하는 것은 이제 약 4 년의 개발입니다. 그러나 왜 그것이 해시라고 불리는 지 이해하지 못합니까?

프로그래밍을 시작한 첫 날을 기억합니다.이 용어는 나에게 번거로운 용어 였습니다 . 나는 그것의 이름을 기반으로 무엇인지 알지 못했습니다 . 나는 그것이 무엇을 하고 왜 그리고 언제 사용 해야하는지 실험적으로 이해 했습니다 .

그러나 나는 때때로 왜 그것이 hash 라고 불리는 지 알아 내려고 노력합니다 . 나는 테이블 이나 함수에 아무런 문제가 없으며 솔직히 말해서 꽤 연역적이며 합리적인 용어입니다. 그러나 key 또는 uniqueness 와 같은 해시 대신 더 나은 단어를 사용할 수 있다고 생각 합니다 . 테이블 또는 고유성 테이블을 하지 마십시오 .

내 사전에 따르면 해시는 다음을 의미합니다.

  1. 감자와 고기 볶음 요리
  2. # 기호 (일명 숫자 기호, 파운드 기호 등) (아직 관련이없는 용어 일 수 있음)
  3. 문자열에 알고리즘 적용 (여전히 해시 테이블의 가장 중요한 기능인 uniqueity 와는 관련이 없음 )
  4. 음식 잘라
  5. 해시의 다른 용어

왜 그것이 해시라고 불리는 지 아십니까?


32
해시가 무엇인지 약간 이해하는 것 같습니다. 고유성은 명시 적으로 해시 함수의 기능이 아닙니다 (즉, 절대 주입되지 않습니다).
피터 테일러

1
@Peter Taylor : 해시 테이블은 주입 매핑을 정의합니다.
reinierpost

2
@ 피터 테일러 : 작은 nitpicky하기 위해, 그들은 주입해야 할 필요 는 없지만 때로는 bijective입니다. 정수에 대한 해싱 함수의 일반적인 구현을 생각해보십시오. :)
keppla

4
해시 만큼 어느 키 공간 (표 해시 용) 해시 값 공간 이하인, 고유 또는 해시 값 공간 충돌 (암호 해시 용) 수학적으로 불가능한 것으로이 크다.
보안

1
또한 "키 테이블"은 "키 / 값"데이터 구조 ( "사전"이라고도 함)와 비슷합니다. 모든 키 / 값 데이터 구조가 해시 테이블 인 것은 아닙니다.
barjak

답변:


46

Wikipedia에 따르면 해시 함수를 말합니다 . 한 단계 더 나아가고 싶다면 해시 함수에 대한 위키 페이지에 해시 함수에서 "해시"라는 단어의 사용은 다음과 같이 시작되었다고합니다.

"해시"라는 용어는 기술적으로 의미가없는 "잘라 내고 섞기"와 유사하다. 실제로 mod 작업과 같은 일반적인 해시 함수는 입력 도메인을 여러 하위 도메인으로 "잘라서"키 분포의 균일 성을 향상시키기 위해 출력 범위로 "혼합"합니다.


2
'하위 도메인'이 무엇을하고 있는지 확실하지 않습니다. 해시 함수가 도메인의 값을 철저하게 '혼합'하는 것입니다.
reinierpost

15

프랑스어에서는 해시 테이블을 "테이블 드 hachage"라고하며 관련 동사 "hacher"는 잘게 썰거나 다진 것입니다 (주로 음식). 동사 to hash는 영어에서 같은 의미를 갖습니다.

다른 사람들이 지적했듯이 다른 위치 (테이블 항목)에 조각을 넣은 입력을 자르기 때문에 해시라고합니다.


2
실제로 악센트없이 "hachage"와 "hacher"로 작성되었습니다.
Ptival

10

3 번은 그것과 관련이 있습니다. 에서 위키 백과 :

해시 테이블 알고리즘의 핵심은 간단한 항목 배열입니다. 이것을 종종 해시 테이블 이라고 합니다 . 해시 테이블 알고리즘은 데이터 항목 키에서 인덱스를 계산하고이 인덱스를 사용하여 데이터를 배열에 배치합니다. 이 계산의 구현 인 해시 함수 , f:

index = f(key, arrayLength)

해시 함수 index는 데이터에서 배열 내를 계산합니다 key. arrayLength배열의 크기입니다. 들어 어셈블리 언어 또는 다른 낮은 수준의 프로그램하는 사소한 해시 함수는 자주 하나 또는 두 개의 인라인와 인덱스 생성 할 수 있습니다 기계 명령어를 .

따라서 해시 테이블은 실제로 키를 기준으로 값을 저장하지 않습니다. 해당 키 의 해시 버전 을 기반으로 값을 저장합니다 .


1
해시 테이블의 의미에 따라 다릅니다. Perl, Java 및 C #과 같은 언어로 제공되는 데이터 구조는 내부적으로 참조하는 해시 테이블의 종류를 사용하여 키-값 매핑을 제공합니다.
reinierpost

10

해시 코드해시 코드 를 사용하기 때문에 이런 식으로 불리며 "절단 식"과 관련이 있습니다.

이것처럼 생각하십시오-과일과 같은 멋진 예쁜 물건을 가져간 다음 해시처럼 다른 모양처럼 보이기 시작하십시오-더 이상 숫자가 더 이상 더 이상 구조가 없습니다. 그 "잘라낸 음식"조각은 해시 테이블에 사용되어 멋진 예쁜 물건을 찾습니다.

  • 당신의 예쁜 물건보다 못 생겼나요? 어쩌면-하지만 빨리 찾는 데 도움이됩니다 -그게 요점입니다. 아 그리고 그것은 고유하지 않습니다.
     
    해시 코드는 테이블에서 예쁜 객체 가 동일한 해시 코드를 가진 다른 회사의 작은 회사에 있는 버킷을 찾습니다 . 이 소규모 회사 내에서 동등성 검사를 사용하여 오브젝트를 조회합니다. 해시 조회보다 속도가 느릴 것으로 예상되지만 그 중 일부만 있기 때문에 큰 문제는 아닙니다 (대부분의 다른 오브젝트는 이미 빠른 해시로 인해 무시 됨) .

3

해싱 (작은 조각으로 자르거나 파쇄 등)은 입력 (음식 또는 때로는 슈퍼 악당)을 가져 와서 비교적 균일 한 출력으로 변환합니다. 즉, 처음에 무엇을 했든 결국에는 해시가 있습니다. 그리고 한 숟가락의 해시는 모든 해시만큼이나 도움이됩니다 (해싱 머신이 잘 해시한다고 가정).
따라서 해싱은 식용 또는 악의적 인 객체를 한 숟가락의 해시로 줄일 수 있습니다. 여기서 두 개의 서로 다른 객체는 서로 다른 해시를 생성하는 반면 두 개의 동일한 객체는 동일한 해시를 생성합니다. 즉, 두 개의 슈퍼 빌런이 해싱 머신에 빠지면 해시를 비교하여 하나가 다른 하나의 클론인지 여부를 판단 할 수 있습니다.

컴퓨터 과학의 해싱 함수는 약간 비슷합니다. 그들은 다른 크기와 의미의 전체 입력을 취합니다. 아주 간단히 말해서 조각으로 자르고 주위를 섞고 결과 시퀀스를 조각으로 다시 자르고 그 주위로 섞습니다. 결국 해시 한 숟가락의 입력 (n 바이트)이 있습니다.


그러나 해킹이 고유성을 지시하지 않는 것처럼 슈퍼 악당은 주어진 매개 변수 세트를 가진 슈퍼 영웅과 동일한 해시를 반환 할 수 있습니다. 결국 해시 충돌이 있습니다 ... 충돌 후 당신이하는 일 ...
Rig
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.