해시

From IT위키
Revision as of 16:01, 30 April 2019 by Ccom (talk | contribs)
Hash
  • 하나의 문자열을 원래의 것을 상징하는 더 짧은 길이의 값이나 키로 변환하는 것

해시 함수 종류

  • 제곱법 : 레코드 키 값을 소수로 나누어 나머지 값을 주소로 결정
  • 제산법 : 키값을 제곱한 후에 중간의 몇자리를 선택하고 그 중간 값을 주소로 이용
  • 중첩법(폴딩법) : 길이를 동일하게 여러 부분으로 나누고, 더하거나 XOR 하여 주소 이동
  • 숫자분석법 : 각 숫자의 분포를 이요해서 균등한 분포의 숫자를 선택해서 사용
  • 기수 변환법 : 주어진 키의 값을 다른 진법으로 변환하여 얻은 값을 주소로 사용
  • 무작위 방법 : 난수를 발생, 탐색을 위한 해시의 경우 충돌이 발생하면 다음 난수를 이용

개념 및 용어

  • 해시 함수(Hash function) : 데이터를 키로 변환하는 함수. 예를 들어 길고 복잡한 문자열을 짧고 단순한 문자열로 변경
  • 홈 주소(Home address) : 해시 함수에 의해 변환된 키값의 주소
  • 해시 테이블(Hash table) : 해시 함수가 키값을 생성할때 참조하는 테이블
  • 버킷(Bucket) : 하나의 주소를 갖는 파일의 한 구역, 버킷의 크기는 같은 주소에 포함될 수 있는 레코드의 수
  • 슬롯(Slot) : 한개의 레코드를 저장 할 수 있는 공간. 한 버킷 안에 여러개의 슬롯이 있다.
  • 충돌(Collision) : 다른 레코드가 같은 키를 가지는 충돌 현상. 레코드는 버킷의 다음 슬롯에 들어감. 레코드를 삽입할 때 2개의 상이한 레코드가 똑같은 홈 주소로 해싱되는 경우
  • 동의어(Synonym) : 동일한 홈 주소로 인하여 충돌이 일어난 레코드의 집합. 키값이 같은 레코드의 집합으로, 동의어가 슬롯의 갯수보다 많으면 오버플로우가 일어날 수 있다.
  • 오버플로(Overflow) : 한 홈 주소의 버킷 내에 더이상의 레코드를 저장할 슬롯이 없는 상태

해시 탐색

레코드 키 값을 어떤 해싱 함수에 의해 주소로 변환시켜 해당 주소 위치에 레코드를 저장하는 방식으로 키 변환 값이 같은 경우 오버플로우 문제가 발생하지만 검색할 때 찾고자 하는 레코드의 키 값을 주소 변환에 의 해 해당 위치를 검색하므로 조사 횟수가 상당히 작은 방식
  • 특정 데이터가 저장된 기억장소의 주소를 관리하기 위한 사상테이블(Mapping Table)을 정의하기 위해 해시를 사용
  • 빠르다는 장점 때문에 운영체제 및 직접 접근파일을 구성하는데 사용된다.
  • 사상 테이블의 용량부족으로 인한 Overflow가 발생할 수 있다.
  • 동일한 주소를 만들어 내는 두 개 이상의 키 값인 동의어(Synonym)에 의해 충돌(Collision)이 발생 할 수 있다.

해시 암호화