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

Slides:



Advertisements
Similar presentations
SCJP. Garbage Collection  Garbage Collector( 이하 GC) 가 Heap 영역 에 할당된, 더 이상 사용되지 않는 메모리인 Garbage 를 다른 객체가 사용할 수 있도록 정리하는 것.  C++ 에서의 메모리 해제 int* v=new.
Advertisements

Ⅰ. 연산자 Ⅱ. 제어 구조. 연산자 : 할당 연산자 - 사용자가 정의한 변수에 임의의 값을 저장하는 기능 strvar = strVar1+ “ Hello ”
Hashing 함수의 종류 및 특징 컴퓨터 과학과 심형광. I N D E X 1. Hashing 함수 2. Hashing 함수의 종류 3. 참조 자료.
2.6 탐색(Search) 1. 순차검색 (Sequential Search, Linear Search)
4.3.3 초기하분포 (Hypergeometric distribution)
제14장 동적 메모리.
Report #5 - due: 4/13 다음 10*5의 희소 행렬 A, B를 고려하라.
연결리스트(linked list).
제 9 장 구조체와 공용체.
컴퓨터 프로그래밍 기초 [Final] 기말고사
쉽게 배우는 알고리즘 6장. 해시 테이블Hash Table.
자료 구조: Chapter 3 (2)구조체, 포인터
7장 배열 ②.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 12. 포인터의 이해.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express Slide 1 (of 13)
10장 함수.
Lesson 9. 예외처리.
5장. 참조 타입.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
자료구조: CHAP 4 리스트 (3) 순천향대학교 컴퓨터공학과 하 상 호.
프로그래밍 랩 – 7주 리스트.
CH 4. 확률변수와 확률분포 4.1 확률 확률실험 (Random Experiment, 시행, Trial) : 결과를 확률적으로 예측 가능, 똑 같은 조건에서 반복 근원사상 (Elementary Event, e) : 시행 때 마다 나타날 수 있는 결과 표본공간.
11장. 1차원 배열.
쉽게 배우는 알고리즘 6장. 해시 테이블Hash Table
Introduction To Data Structures Using C
C 프로그래밍 C언어 (CSE2035) (Chap11. Derived types-enumerated, structure, and union) (1-1) Sungwook Kim Sogang University Seoul, Korea Tel:
JA A V W. 03.
자바 5.0 프로그래밍.
인터넷응용프로그래밍 JavaScript(Intro).
박성진 컴퓨터 프로그래밍 기초 [09] 배열 part 1 박성진
13. 포인터와 배열! 함께 이해하기 IT응용시스템공학과 김 형 진 교수.
Java의 정석 제 5 장 배 열 Java 정석 남궁성 강의 의
Quiz #7 다음 수들을 합병 정렬과 퀵 정렬 알고리즘을 이용하여 오름 차순으로 정렬하였을 때, 데이터 이동 회수를 각각 구하라. 여러분은 정렬 과정을 단계별로 보이면서 이동 회수를 추적해야 한다. 단, 퀵 정렬시에 피봇으로 배열의 왼쪽 첫 번째 원소를 선택한다. 5.
8장. 상호 배타적 집합의 처리.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
27강 JAVA Collections - II - Map계열 컬렉션 클래스 살펴보기 - Set계열 컬렉션 클래스 살펴보기
포인터 1차원 배열과 포인터 2차원 배열과 포인터 문자열 배열과 포인터 포인터 배열
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
2장. 변수와 타입.
08장 쿠키와 세션.
해쉬함수 충돌해결법과 특징 강원대학교 컴퓨터과학과 이해원.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
8주차: Strings, Arrays and Pointers
5강. 배열 배열이란? 배열의 문법 변수와 같이 이해하는 배열의 메모리 구조의 이해 레퍼런스의 이해 다차원 배열
보고서 #7 (기한: 6/2) 2개의 스택, stk1, stk2를 이용하여 큐를 구현하라.
객체기반 SW설계 팀활동지 4.
Canary value 스택 가드(Stack Guard).
균형이진탐색트리 이진 탐색(binary search)과 이진 탐색 트리(binary search tree)와의 차이점
01 로그의 정의 ⑴ 일 때, 양수 에 대하여 을 만족시키는 실수 는 오직 하나 존재한다. 이때 를
데이터 동적 할당 Collection class.
자료구조론 12장 검색(search).
에어 PHP 입문.
DA :: 퀵 정렬 Quick Sort 퀵 정렬은 비교방식의 정렬 중 가장 빠른 정렬방법이다.
7주차: Functions and Arrays
11장 배열 1. 배열이란? 1.1 배열의 개요 1.2 배열의 선언과 사용.
컴퓨터 프로그래밍 기초 - 9th : 배열 / 포인터 -
Summary of Pointers and Arrays
Numerical Analysis Programming using NRs
트리 (Logical) Data Structures Linear list Tree Graph Linear structures
제 4 장 Record.
수치해석 ch3 환경공학과 김지숙.
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
어서와 C언어는 처음이지 제21장.
 6장. SQL 쿼리.
개정판 누구나 즐기는 C언어 콘서트 제13장 동적 메모리 출처: pixabay.
13. 포인터와 배열! 함께 이해하기.
6 객체.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

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

Page 2 해싱 (Hashing)  하나의 문자열을 더 짧은 길이의 값으로 변환하는 것  사전적 의미 : 잘게 썰다. 예제를 통한 해싱에 대한 이해 (1/2)  0 에서 99 사이의 정수로 된 키 (key) 가 있고, 100 개의 저장해야 할 정보 가 있다고 하자. 그러면 크기가 100 인 배열 S 를 만들어서 저장하면 빠른 시간 안에 검색할 수 있다.  i  s[i]  그런데 만약 키 (key) 가 13 자리 주민등록번호라면 키 값 저장을 위하 여 너무 많은 저장장소가 필요하게 된다. Hashing 기본 개념

Page 3 예제를 통한 해싱에 대한 이해 (2/2)  해법 : 0 ~ 99 의 인덱스를 가진 크기가 100 인 배열을 만든 후에, 주민등록번호 키 값을 0~99 사이의 값을 가지도록 해쉬 (hash) 한다.  여기서 해쉬함수는 13 자리 실제 키 값을 배열의 첨자 값 (0~99) 으로 변환하는 함수이다.  해쉬함수의 예 : h(key) = key % 자리 키 값이 2 자리 키 값으로 변환됨 주민증록번호 (13 자리 )  해시값 (2 자리 ) i  s[i] 해싱의 장점 ( 또는 의무적으로 가져야 할 특징 )  해시 연산은 매우 짧은 시간안에 이루어진다.  짧은 해시 키 ( 해싱된 결과 인덱스 ) 를 사용하여 항목을 찾으면 원래의 값을 이용하여 찾는 것보다 더 빠르며 메모리도 덜 차지한다. Hashing 기본 개념 읽을 거리 :

Web Programming4 Java HashMap 자료구조 import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; public class Number { public static void main(String[] args) throws Exception { Map mMap = new HashMap(); mMap.put("PostgreSQL", "Free Open Source Enterprise Database"); mMap.put("DB2", "Enterprise Database, It's expensive"); mMap.put("Oracle", "Enterprise Database, It's expensive"); mMap.put("MySQL", "Free Open SourceDatabase"); mMap.put("Oracle", "Enterprise Database, It's free now ! (hope)"); System.out.println("One day Oracle.. : " + mMap.get("Oracle")); }

Page 5 해싱의 문제점 : 충돌 (Collision)  2 개 이상의 키가 같은 해쉬값을 갖는 경우 충돌 (collision) 이 발생 이러한 해시 충돌 (Hash Collision) 을 어떻게 해결할 것인가 ? Hashing – 충돌 (Collision) [ 충돌이 일어나지 않을 확률 ] 100 개의 키가 있고, 각 키가 100 개의 인덱스로 해시될 것이다. 한편, 임의의 인덱스로 해쉬될 확률이 같다고 하자. 이 때 모든 키가 모두 다른 인덱스로 해쉬될 확률은 다음과 같다. [ 의미 ] 매우 작은 확률 ! 즉, 지속적인 해싱에 의해 최소한 2 개의 키가 하나의 인덱스로 해시, 즉 충돌이 일어날 가능성이 꽤 높다.

Page 6 충돌 해결법 : 오픈 해싱 (open hashing)  같은 해쉬값을 갖는 키들을 동일한 Bucket( 바구니 ) 에 모아 놓는다.  주로 Bucket 는 연결 리스트 (linked list) 로 구현 한다.  Bucket 내부를 검색할 때는 순차검색 ( 또는 효율 높은 다른 검색 ) 으로 한다.  구현 방법  각 Bucket 을 가리키는 포인터 배열 Bucket[] 을 만들고 각 배열의 포인터 값은 해당 Bucket 의 연결 리스트를 가리키도록 한다.  값 i 로 해시되는 키 값들은 모두 Bucket[i] 가 가리키는 연결 리스트에 순 차적으로 위치시킨다. Hashing – 충돌 (Collision) h(key) = key % 100

Page 7 충돌 해결법 : 오픈 해싱 (open hashing)  Bucket 의 수가 키의 개수와 같을 필요는 없다. 하지만 …  키의 수보다 Bucket 의 수가 적으면 충돌은 필연적이다.  만약 Bucket 의 수가 1 개라면 …  레코드의 검색은 단순한 키 값의 순차 검색으로 퇴보  일반적으로 레코드의 크기에 비해 포인터 변수는 상대적으로 작으므 로 최소한 레코드의 수만큼의 Bucket 을 사용하는 것이 합당하다.  만약 Bucket 의 수가 100 개일 때 100 개의 키가 같은 Bucket 으로 들어갈 확률은 ? Hashing – 충돌 (Collision) [ 의미 ] 매우 작은 확률이다.

Page 8 오픈 해싱 (open hashing) 방법의 분석  Assumption: 만약 n 개의 키와 m 개의 Bucket 이 있고 각 키 값들이 Bucket 마다 균일하게 분포 및 저장 되어있다.  [ 기본적 사실 ] 각 Bucket 마다 n/m 개의 키가 존재한다.  [ 정리 8.4] 실패하는 검색의 경우 총 비교횟수는 다음과 같다.   [ 정리 8.5] 각 키마다 검색되는 확률이 동일하다면 성공한 검색의 평균 비교횟수는 다음과 같다.  교재 P21 의 알고리즘 1.1 분석과 동일한 방법으로 분석 : 임의의 Bucket 에 서의 평균 검색시간은 개의 키를 순차검색하는 평균시간과 같다 Hashing – 충돌 (Collision)

Page 9 오픈 해싱 (open hashing) 방법의 분석  그렇다면, n 개의 키가 주어져 있을 때 검색을 빠르게 하기 위하여 이 분 검색을 사용해야 할까 ? 아니면 해시 방법을 통해 저장한 후 검색을 해야 할까 ?  Example] 개의 키  이분 검색  log = 8 번의 평균 비교검색  오픈 해싱  Bucket 이 16 개일 때 : 번의 평균 비교검색  Bucket 이 128 개일 때 : 번의 평균 비교검색  Bucket 이 256 개일 때 : 번의 평균 비교검색 Hashing – 충돌 (Collision)

Java HashMap 자료구조 Capacity  the number of buckets in the hash table Initial capacity  the capacity at the time the hash table is created. Load factor  a measure of how full the hash table is allowed to get before its capacity is increased.  When “# entries in the hash table” > “load factor  current capacity”, the hash table is rehashed (that is, internal data structures are rebuilt) so that the hash table has approximately twice the number of buckets.  Higher load factor values decrease the space overhead but increase the lookup cost  1) The expected number of entries in the map, 2) its load factor, 3) initial capacity should be considered so as to minimize the number of rehash operations.  If the initial capacity > the maximum number of entries * 1 / load factor, no rehash operations will ever occur. Page 10