///////
Search
🦁

김하늘

해쉬

Key , Value 로 구성됨. 파이썬은 딕셔너리로 구성되어 있음.
하나의 Key에는 하나의 Value 할당
1) 원하는 크기의 배열을 생성한다.
2) 해시 함수를 이용해 저장할 key:value 데이터의 키를 배열 index 범위의 자연수로 변환
(파이썬 내부함수의 해시함수는 특정 범위가 아닌 아무런 정수로만 변경한다.)
3) 리턴한 배열의 index에 key:value 데이터 저장
해시 함수를 이용해 저장할 key:value 데이터의 키를 배열 index 범위의 자연수로 변환
# 1. 배열로 hashTable 생성. hash_table = [0 for i in range(10)] # 2. hashFunc(key) -> hashTableIndex def hash_func(key): hashValue=ord(key) # 여기서는 ord()가 hashFunc hashAdress = hashValue%10 # 여기서는 나머지연산이 addressFunc return hashAdress # 3. 저장기능 , 읽기기능 구현 def save_data(key,value): idx=hash_func(key) hash_table[idx]=value def read_data(key): idx = hash_func(key) return hash_table[idx]
Python
복사
장점
1) 데이터 저장/읽기 속도가 빠르다. (검색 속도가 빠르다.)
2) 키에 대한 데이터가 있는지(중복) 확인이 쉬움
단점
1) 일반적으로 저장공간이 좀 더 많이 필요하다.
2) 데이터 공간이 좁으면 여러 키에 해당하는 주소가 동일하여 충돌이 발생 할 수 있음. 이를 해결하기 위한 별도 자료구조가 필요함.
주요 용도
1) 검색이 많이 필요한 경우
2) 저장, 삭제, 읽기가 빈번한 경우
3) 캐쉬 구현시 (중복 확인이 쉽기 때문)
충돌 해결 방법
1) Open hashing(개방 해시)
충돌이 발생한 데이터에 대해서는 해시테이블 밖에 추가적인 데이터공간에 저장하는 방법이다.
ex) Channing 기법 : 충돌이 일어나면 linked list를 이용해서 뒤에 연결시켜 저장한다. 이 때 충돌 횟수를 모르기 때문에, 크기가 정해져 있는 array가 아니라 list를 이용한다.
2) Linear Probing(폐쇄 해시)
해시 테이블의 빈 공간에 저장하는 방법이다. hash address의 다음부터 맨 처음 나오는 빈공간에 저장 하기 때문에, 공간을 아낄 수 있다.
해당 문제
완주하지 못한 선수
SW Expert Academy Hash
프로그래머스 - 신고 결과 받기 (난이도 : 하)
프로그래머스 - 위장 (난이도 :중)
프로그래머스 - 베스트앨범 (난이도 :상)