CHAP 11 : 해싱.

Slides:



Advertisements
Similar presentations
Ch.08-4 Hashing ( 해싱 ) [CPA340] Algorithms and Practice Youn-Hee Han
Advertisements

1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
1. 2 차원 배열  배열은 동일한 데이터 유형으로 여러 개의 변수를 사용할 경우 같은 이 름으로 지정하여 간편하게 사용할 수 있도록 하는 것으로서 앞에서 1 차원 배열을 공부하였습니다.  2 차원 배열은 바둑판을 생각하면 되며, 1 차원 배열에서 사용하는 첨자를 2.
Hashing 함수의 종류 및 특징 컴퓨터 과학과 심형광. I N D E X 1. Hashing 함수 2. Hashing 함수의 종류 3. 참조 자료.
출석수업 과제 – 총 5문제, 10월 25일 제출 정보통계학과 장영재 교수.
2.6 탐색(Search) 1. 순차검색 (Sequential Search, Linear Search)
제 7 장 함수 사용을 통해 엑셀 정복하기.
연결리스트(linked list).
Report #2 - Solution 문제 #1: 다음과 같이 프로그램을 작성하라.
컴퓨터 프로그래밍 기초 [Final] 기말고사
보고서 #7 (기한: 6/2) 2개의 스택, stk1, stk2를 이용하여 큐를 구현하라.
테이블 : 데이터베이스를 구성하는 요소로 같은 성격에 정보의 집합체. 레코드 : 하나의 정보를 가지고 있는 컬럼의 집합체
8장 직접 화일.
9.1 해싱의 정의 및 필요성 9.2 정적 해싱(Static Hashing) 9.3 동적 해싱
5장. 참조 타입.
해싱(hashing) Ref. C로 쉽게 풀어쓴 자료구조, 생능출판사, 2005.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
13 인덱스 인덱스의 개념 인덱스의 구조 인덱스의 효율적인 사용 방법 인덱스의 종류 및 생성 방법 인덱스 실행 경로 확인
CHAP 11: 해싱 순천향대학교 하상호.
자료구조: CHAP 4 리스트 (3) 순천향대학교 컴퓨터공학과 하 상 호.
프로그래밍 랩 – 7주 리스트.
11장. 1차원 배열.
13 인덱스 인덱스의 개념 인덱스의 구조 인덱스의 효율적인 사용 방법 인덱스의 종류 및 생성 방법 인덱스 실행 경로 확인
쉽게 배우는 알고리즘 6장. 해시 테이블Hash Table
다음 주 과제 기말고사 시험범위 : 7장 ~12장 필기시험 : 2016년 12월 12일(6교시) 필기장소 : E???
CHAP 11: 해싱 순천향대학교 하상호.
JA A V W. 03.
인터넷응용프로그래밍 JavaScript(Intro).
박성진 컴퓨터 프로그래밍 기초 [09] 배열 part 1 박성진
자료구조: CHAP 7 트리 –review 순천향대학교 컴퓨터공학과 하 상 호.
메모리 관리 & 동적 할당.
CHAP 11 : 해싱 C로 쉽게 풀어쓴 자료구조 생능출판사 2011.
Java의 정석 제 5 장 배 열 Java 정석 남궁성 강의 의
Quiz #7 다음 수들을 합병 정렬과 퀵 정렬 알고리즘을 이용하여 오름 차순으로 정렬하였을 때, 데이터 이동 회수를 각각 구하라. 여러분은 정렬 과정을 단계별로 보이면서 이동 회수를 추적해야 한다. 단, 퀵 정렬시에 피봇으로 배열의 왼쪽 첫 번째 원소를 선택한다. 5.
Term Projects 다음에 주어진 2개중에서 한 개를 선택하여 문제를 해결하시오. 기한: 중간 보고서: 5/30 (5)
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
충돌 해결의 종류 및 특징 최현경.
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
제 6 장 해시테이블.
CHAP 11 : 해싱.
CHAP 11 : 해싱.
해싱 이 현 직
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
보고서 #7 (기한: 6/2) 2개의 스택, stk1, stk2를 이용하여 큐를 구현하라.
리스트(List)를 이용한 자료 관리 이점숙 /
Choi Seong Yun 컴퓨터 프로그래밍 기초 #03 : 변수와 자료형 Choi Seong Yun
CHAP 21. 전화, SMS, 주소록.
객체기반 SW설계 팀활동지 4.
Canary value 스택 가드(Stack Guard).
균형이진탐색트리 이진 탐색(binary search)과 이진 탐색 트리(binary search tree)와의 차이점
Excel 일차 강사 : 박영민.
2nd day Indexing and Slicing
알고리즘 알고리즘이란 무엇인가?.
데이터 동적 할당 Collection class.
자료구조론 12장 검색(search).
에어 PHP 입문.
Excel 일차 강사 : 박영민.
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
다음 주 과제 기말고사 시험범위 : 6장 ~12장 필기시험 : 2015년 12월 18일(5교시) 필기장소 : E327
Chapter 10 데이터 검색1.
11장 배열 1. 배열이란? 1.1 배열의 개요 1.2 배열의 선언과 사용.
제 4 장 Record.
2014년 가을학기 손시운 지도 교수: 문양세 교수님 행렬과 배열 2014년 가을학기 손시운 지도 교수: 문양세 교수님.
어서와 C언어는 처음이지 제21장.
 6장. SQL 쿼리.
개정판 누구나 즐기는 C언어 콘서트 제13장 동적 메모리 출처: pixabay.
CHAP 11:해싱 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
C++ Espresso 제15장 STL 알고리즘.
6 객체.
Presentation transcript:

CHAP 11 : 해싱

해싱이란? 해싱은 사전구조(dictionary)를 가장 효율적으로 구현할 수 있는 방법으로 사용됨 대부분의 탐색 방법들은 키 값을 직접 비교함으로써 탐색하고자 하는 항목에 접근 해싱(hashing) 키 값에 대한 산술적 연산을 수행하여 연산결과에 해당하는 해시값을 구하고 계산된 해시값을 사용하여 해시 테이블에 저장돼 있는 항목의 위치를 파악 즉, 해싱은 키 값에 대한 해시값을 계산하여 탐색하고자 하는 항목에 접근하는 방법 해싱은 사전구조(dictionary)를 가장 효율적으로 구현할 수 있는 방법으로 사용됨

추상자료형 사전구조 사전구조(dictionary) 맵(map) 이라 불리기도 함 (키, 값) 쌍을 저장하고 나중에 키를 이용해 값을 탐색할 수 있게 하는 구조 영어 단어나 사람의 이름 같은 탐색키(search key) 단어의 정의나 주소 또는 전화 번호 같은 탐색키와 관련된 값(value) ∙객체: 일련의 (key,value) 쌍의 집합 ∙연산: ▪ add(key, value) ::= (key,value)를 사전에 추가한다. ▪ delete(key) ::= key에 해당되는 (key,value)를 찾아서 삭제한다. 관련된 value를 반환한다. 만약 탐색이 실패하면 NULL를 반환한다. ▪ search(key) ::= key에 해당되는 value를 찾아서 반환한다. 만약 탐색이 실패하면 NULL를 반환한다.

해싱의 구조 해시 함수(hash function) 탐색키 k를 입력받아 해시값 h(k)을 생성 이 해시값은 배열로 구현된 해시 테이블(hash table)의 인덱스에 해당 해시값

해시 테이블의 구조 해시테이블 ht 충돌(collision) 오버플로우(overflow) M개의 버켓(bucket)으로 구성된 테이블 ht[0], ht[1], ...,ht[M-1]의 원소를 가짐 하나의 버켓에 s개의 슬롯(slot) 가능 충돌(collision) 서로 다른 두 개의 탐색키 k1과 k2에 대하여 h(k1) = h(k2)인 경우 오버플로우(overflow) 충돌이 버켓에 할당된 슬롯 수보다 많이 발생하는 것 오버플로우 해결 방법 반드시 필요

이상적인 해싱 학생 정보를 해싱으로 저장, 탐색해보자 5자리 학번 중에 앞 2자리가 학과 번호, 뒤 3자리가 각 학과의 학생 번호 같은 학과 학생들만 가정하면 뒤의 3자리만 사용해서 탐색 가능 학번이 00023이라면 이 학생의 인적사항은 해시테이블 ht[23]에 저장 만약 해시테이블이 1000개의 공간을 가지고 있다면 탐색 시간이 O(1)이 되므로 이상적임

실제의 해싱 실제로는 해시테이블의 크기가 제한되므로, 존재 가능한 모든 키에 대해 저장 공간을 할당할 수 없음 h(k)= k mod M 의 예에서 보듯이 필연적으로 충돌과 오버플로우 발생함

실제의 해싱(cont.) 키 값들이 알파벳 문자열이라 하고, 해시값은 문자열의 첫 번째 문자만 고려하여 a인 경우 0, b인 경우 1, c인 경우 2, … , z인 경우 25 라 하자. h("array")=0 h("binary")=1 입력데이터: array, binary, bubble, file, digit, direct, zero, bucket

해시함수 좋은 해시 함수의 조건 해시함수 값이 해시테이블의 주소 영역 내에서 고르게 분포되어야 한다 해시값 계산이 빨라야 한다.

해시함수(cont.) 제산 함수 폴딩 함수 h(k)=k mod M 해시 테이블의 크기 M은 소수(prime number) 선택 이동 폴딩(shift folding)과 경계 폴딩(boundary folding) 이동 폴딩: 탐색 키를 여러 부분으로 나눈 값들을 더하여 해시값 계산 경계 폴딩: 탐색 키의 이웃한 부분을 거꾸로 더하여 해시값 계산

해시함수(cont.) 중간제곱 함수 비트추출 함수 숫자 분석 방법 탐색키를 제곱한 다음, 중간의 몇 비트를 취해서 해시값 생성 해시 테이블의 크기가 2k일때 탐색키를 이진수로 간주하여 임의의 위치의 k개의 비트를 해시 주소로 사용 탐색 키의 일부 정보만을 사용하므로 해시값의 집중 현상이 일어날 가능성이 높다. 숫자 분석 방법 키 중에서 편중되지 않는 수들을 해시테이블의 크기에 적합하게 조합하여 사용 예) 학생의 학번이 200812345라 한다면 입학년도를 의미하는 앞의 4 자릿수는 편중되어 있으므로 가급적 사용하지 않고 나머지 수를 조합하여 해시값을 계산 숫자로 구성된 키에서 각각의 위치에 있는 수의 특징을 미리 알고 있을 때 유용한 방법

충돌해결책 충돌(collision) 충돌해결책 서로 다른 탐색 키를 갖는 항목들이 같은 해시값를 가지는 현상 충돌을 효과적으로 해결하는 방법 반드시 필요 충돌해결책 오픈 어드레싱(Open addressing): 충돌이 일어난 항목을 해시 테이블의 다른 위치에 저장 (선형조사법, 이차 조사법, 이중해싱법 등이 이에 해당) 체이닝(Chaning): 각 버켓에 삽입과 삭제가 용이한 연결 리스트 할당

선형조사법(linear probing) 충돌이 ht[k]에서 발생했다면, ht[k+1]이 비어 있는지 조사 만약 비어있지 않다면 ht[k+2] 조사 비어있는 공간이 나올 때까지 계속 조사 테이블의 끝에 도달하게 되면 다시 테이블의 처음부터 조사 조사를 시작했던 곳으로 다시 되돌아오게 되면 테이블이 가득 찬 것임 조사되는 위치: h(k), h(k)+1, h(k)+2,…

선형조사법(linear probing) (예) h(k)=k mod 7   1단계 2단계 3단계 4단계 5단계 [0] 13 [1] 8 [2] 1 [3] 9 [4] [5] [6] 6 1단계 (8) : h(8) = 8 mod 7 = 1(저장) 2단계 (1) : h(1) = 1 mod 7 = 1(충돌발생)             (h(1)+1) mod 7 = 2(저장) 3단계 (9) : h(9) = 9 mod 7 = 2(충돌발생)             (h(9)+1) mod 7 = 3(저장) 4단계 (6) : h(6) = 6 mod 7 = 6(저장) 5단계 (13) : h(13) = 13 mod 7 = 6(충돌 발생) (h(13)+1) mod 7 = 0(저장) 한 번 충돌이 시작되면 그 위치 근방에 항목들이 집중되는 군집화(clustering) 문제 발생

이차 조사법(quadratic probing) 선형 조사법과 유사하지만, 다음 조사할 위치를 아래 식 사용 (h(k)+i*i) mod M 조사되는 위치는 다음과 같음 h(k), h(k)+1, h(k)+4,… 선형 조사법에서의 문제점인 군집 문제 크게 완화 가능

이중해싱법(double hashing) 재해싱(rehashing)이라고도 함 오버플로우가 발생하면 원 해시함수와 다른 별개의 해시 함수 사용 step=C-(k mod C) (C는 상수) 이라 할때, h(k), h(k)+1*step, h(k)+2*step, … (예) 크기가 7인 해시테이블에서, 첫 번째 해시 함수가 k mod M 오버플로우 발생시의 해시 함수는 step=5-(k mod 5) 입력 (8, 1, 9, 6, 13 ) 적용

이중해싱법(double hashing) 1단계 (8) : h(8) = 8 mod 7 = 1(저장) 2단계 (1) : h(1) = 1 mod 7 = 1(충돌발생) (h(1)+h’(1)) mod 7 = (1+5-(1 mod 5)) mod 7 = 5(저장) 3단계 (9) : h(9) = 9 mod 7 = 2(저장) 4단계 (6) : h(6) = 6 mod 7 = 6(저장) 5단계 (13) : h(13) = 13 mod 7 = 6(충돌 발생) (h(13)+h’(13)) mod 7 = (6+5-(13 mod 5)) mod 7= 1(충돌발생) (h(13)+2*h’(13)) mod 7 = (6+2*2) mod 7= 3(저장)   1단계 2단계 3단계 4단계 5단계 [0] [1] 8 [2] 9 [3] 13 [4] [5] 1 [6] 6

체이닝(chaining) 오버플로우 문제를 연결 리스트로 해결 (예) 크기가 7인 해시테이블에서 각 버켓에 고정된 슬롯이 할당되어 있지 않음 각 버켓에, 삽입과 삭제가 용이한 연결 리스트 할당 버켓 내에서는 연결 리스트 순차 탐색 (예) 크기가 7인 해시테이블에서 h(k)=k mod 7의 해시 함수 사용 입력 (8, 1, 9, 6, 13) 적용

체이닝(chaining) 1단계 (8) : h(8) = 8 mod 7 = 1(저장)

Load factor O(1 + α) 1: 해시값을 계산하고 해시테이블에 접근하는데 필요한 시간 저장되는 항목의 개수 n과 해시 테이블의 크기 M의 비율 체이닝에서의 평균 탐색 시간 O(1 + α) 1: 해시값을 계산하고 해시테이블에 접근하는데 필요한 시간 α: 리스트를 탐색하는데 필요한 시간

해싱과 다른 탐색 방법의 비교 이진탐색: 삽입/삭제 에서 + n 은 삽입/삭제 후의 shift 하는데 걸리는 시간