2.6 탐색(Search) 1. 순차검색 (Sequential Search, Linear Search)

Slides:



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

1. 2 차원 배열  배열은 동일한 데이터 유형으로 여러 개의 변수를 사용할 경우 같은 이 름으로 지정하여 간편하게 사용할 수 있도록 하는 것으로서 앞에서 1 차원 배열을 공부하였습니다.  2 차원 배열은 바둑판을 생각하면 되며, 1 차원 배열에서 사용하는 첨자를 2.
Hashing 함수의 종류 및 특징 컴퓨터 과학과 심형광. I N D E X 1. Hashing 함수 2. Hashing 함수의 종류 3. 참조 자료.
알고리즘 기본 개념 정렬 알고리즘 탐색 알고리즘 알고리즘 복잡도.
컴퓨터와 인터넷.
UNIX 운영 체제의 설계 - Chapter 4. 파일의 내부 표현
T-tree 엄종진 강원대학교 컴퓨터과학과.
연결리스트(linked list).
컴퓨터 프로그래밍 기초 [Final] 기말고사
테이블 : 데이터베이스를 구성하는 요소로 같은 성격에 정보의 집합체. 레코드 : 하나의 정보를 가지고 있는 컬럼의 집합체
10장 함수.
8장 직접 화일.
Chapter 02 순환 (Recursion).
6장 그룹 함수.
9.1 해싱의 정의 및 필요성 9.2 정적 해싱(Static Hashing) 9.3 동적 해싱
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
11.텍스트를 위한 화일.
13 인덱스 인덱스의 개념 인덱스의 구조 인덱스의 효율적인 사용 방법 인덱스의 종류 및 생성 방법 인덱스 실행 경로 확인
7장 인덱스된 순차 화일.
18강. 데이터 베이스 - II JDBC 살펴보기 Statement객체 살펴보기 Lecturer Kim Myoung-Ho
보고서 #5(제출기한: 10/14) 다음 문제를 해결하시오.
자료구조: CHAP 4 리스트 (3) 순천향대학교 컴퓨터공학과 하 상 호.
2.3 제한 조건을 가진 자료구조 1. 스택(STACK) 1) 스택의 개념 - 삽입과 제거 작업이 리스트의 한쪽 끝에서만 수행
11장. 1차원 배열.
13 인덱스 인덱스의 개념 인덱스의 구조 인덱스의 효율적인 사용 방법 인덱스의 종류 및 생성 방법 인덱스 실행 경로 확인
쉽게 배우는 알고리즘 6장. 해시 테이블Hash Table
Introduction To Data Structures Using C
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
다음 주 과제 기말고사 시험범위 : 7장 ~12장 필기시험 : 2016년 12월 12일(6교시) 필기장소 : E???
CHAP 10:그래프 (2) 순천향대학교 하상호.
프로그래밍 개요
어서와 C언어는 처음이지 제14장.
인터넷응용프로그래밍 JavaScript(Intro).
자료구조: CHAP 7 트리 –review 순천향대학교 컴퓨터공학과 하 상 호.
Quiz #7 다음 수들을 합병 정렬과 퀵 정렬 알고리즘을 이용하여 오름 차순으로 정렬하였을 때, 데이터 이동 회수를 각각 구하라. 여러분은 정렬 과정을 단계별로 보이면서 이동 회수를 추적해야 한다. 단, 퀵 정렬시에 피봇으로 배열의 왼쪽 첫 번째 원소를 선택한다. 5.
CHAP 11 : 해싱.
충돌 해결의 종류 및 특징 최현경.
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
해싱 이 현 직
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
CHAP 12: 탐색 순천향대학교 컴퓨터학부 하 상 호.
리스트(List)를 이용한 자료 관리 이점숙 /
CHAP 12: 탐색 순천향대학교 컴퓨터학부 하 상 호.
계산기.
CHAP 21. 전화, SMS, 주소록.
Canary value 스택 가드(Stack Guard).
균형이진탐색트리 이진 탐색(binary search)과 이진 탐색 트리(binary search tree)와의 차이점
CHAP 12 : 탐색 C로 쉽게 풀어쓴 자료구조 Slide 1 (of 27).
알고리즘 알고리즘이란 무엇인가?.
데이터 동적 할당 Collection class.
1과목 데이터베이스 강사 이 민 욱.
자료구조론 12장 검색(search).
9장 파일시스템(File System) 박동근.
DA :: 퀵 정렬 Quick Sort 퀵 정렬은 비교방식의 정렬 중 가장 빠른 정렬방법이다.
다음 주 과제 기말고사 시험범위 : 6장 ~12장 필기시험 : 2015년 12월 18일(5교시) 필기장소 : E327
5장. 선택 알고리즘.
Chapter 10 데이터 검색1.
멀티미디어시스템 제 5 장. 멀티미디어 데이터베이스 개념 IT응용시스템공학과 김 형 진 교수.
11장 배열 1. 배열이란? 1.1 배열의 개요 1.2 배열의 선언과 사용.
9 브라우저 객체 모델.
7장 연습 문제 풀이 학번 : 이름 :조 재한.
Numerical Analysis Programming using NRs
통계학 R을 이용한 분석 제 2 장 자료의 정리.
트리 (Logical) Data Structures Linear list Tree Graph Linear structures
제 4 장 Record.
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
 6장. SQL 쿼리.
CHAP 11:해싱 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
C++ Espresso 제15장 STL 알고리즘.
6 객체.
Presentation transcript:

2.6 탐색(Search) 1. 순차검색 (Sequential Search, Linear Search) - 첫번째 또는 마지막 레코드를 시작으로 특정 레코드의 탐색 작업이 순차적으로 처리 - 프로그램 작성이 쉽고, 정렬되지 않은 레코드 검색이 가능 - 파일이 크면 탐색 시간 증가 - 평균비교횟수 : (n+1)/2 평균검색시간 : O(n) 2. 이진검색 (Binary Search) - 상한 값(F)과 하한 값(L)을 설정하고 그 중간 값(M)을 구한 후 키와 중간 값을 계속 비교 하면서 검색 (순차적으로 정렬되어 있는 파일에서만 수행 가능) - 파일의 탐색 대상을 ½씩 줄여가면서 탐색하므로 효율적 - 레코드 수가 많을 수록 효과적 (최악의 경우라도 비교횟수는 평균횟수보다 한 번 더 많다.) - 평균검색시간 : O(log2n)

- 이진검색법의 예 key 28을 찾기 위한 알고리즘 중간 값 M = (상한값 F + 하한값 L) / 2 ① 중간 값 M - 이진검색법의 예 key 28을 찾기 위한 알고리즘 중간 값 M = (상한값 F + 하한값 L) / 2 ① 중간 값 M (1+10)/2 = 5.5 ≒ 5 ② 중간 값 M (1+4)/2 = 2.5 ≒ 2 ③ 중간 값 M (3+4)/2 = 3.5 ≒ 3 1 12 2 23 3 28 4 42 5 55 6 61 7 73 8 87 9 95 10 100 key 1 2 3 4 5 6 7 8 9 10 12 23 28 42 55 61 73 87 95 100 key 상한값 F 중간값 M 하한값 L 1 12 2 23 3 28 4 42 F M L 3 28 4 42 F,M L

3. 피보나치검색 (Fibonacci Search) - 피보나치 순열을 이용하여 서브 파일을 형성해 가면서 검색 (레코드가 반드시 정렬되어 있어야 한다.) - 이진검색은 나눗셈을 이용하나, 피보나치 검색은 덧셈과 뺄셈만으로 검색 가능 (속도 빠름) - 평균검색시간 : O(log2n) - 알고리즘 Fk-1 를 인덱스로 하여 인덱스가 가진 값과 K를 비교 ① K < KFk-1 일 경우 : 인덱스 1부터 Fk-1 –1까지의 서브 파일을 재귀적으로 탐색 ② K=KFk-1 이면 탐색 성공 ③ K > KFk-1 일 경우 : 인덱스 Fk-1 +1부터 Fk-1 -1까지의 서브파일을 재귀적으로 탐색 재귀적으로 탐색할 인덱스 범위가 결정되면 ①의 경우 다음 탐색될 레코드의 인덱스는 Fk-2 이며 ③의 경우 탐색될 레코드의 인덱스는 Fk-1 + Fk-3 이 된다.

피보나치 수는 0,1,1,2,3,5,8,13,21,…이 되고, 입력파일은 20개의 값을 가지므로 Fk = 21 - 피보나치 검색의 예) 피보나치 수는 0,1,1,2,3,5,8,13,21,…이 되고, 입력파일은 20개의 값을 가지므로 Fk = 21 ⅰ) Fk-1=13이므로 인덱스 13의 값 33과 비교. K=15, KFk-1=33 이므로 K < KFk-1 탐색 레코드는 인덱스1~인덱스12 사이에 위치 ⅱ) Fk-2=8이므로 인덱스 8의 값 18과 비교. K=15, KFk-2=18 이므로 K < KFk-2 탐색 레코드는 인덱스1~인덱스7 사이에 위치 ⅲ) Fk-3=5이므로 인덱스 5의 값 8과 비교. K=15, KFk-3=5 이므로 K > KFk-3 탐색 레코드는 인덱스6~인덱스7 사이에 위치 ⅳ) Fk-1 + Fk-3 = 5 + 2 = 7이므로 인덱스 7의 값 15와 비교. K = K(Fk-1+Fk-3) 2 1 3 6 7 4 8 5 12 15 18 20 9 23 10 24 11 27 33 13 41 14 45 49 16 55 17 66 75 19 89 K 인덱스 Fk-1 Fk-2 Fk-3

4. 보간검색 (Interpolation Search) - 탐색 대상이 있을 것으로 예상되어지는 위치를 선택하여 탐색 (레코드가 반드시 정렬되어 있어야 한다.) - 사전, 전화번호, 색인명 검색 - - 예) ⅰ) (56-20) / (78-20) * 11 = 6.82 ≠ 7 인덱스 7의 값 60과 비교 -> 찾는 레코드는 인덱스 1부터 6사이에 존재 ⅱ) (56-20) / (56-20) * 6 = 6 인덱스 6의 값 56과 비교 -> 탐색 성공 X : 특정 키 A(max), A(min) : 키의 최대값과 최소값 n : 레코드의 총수 X – A(min) * n i = A(max) – A(min) 1 20 2 25 3 35 4 43 5 48 6 56 7 60 8 69 9 72 10 75 11 78

- 블록간에는 정렬되어 있어야 하나, 블록내에는 정렬되어 있을 필요 없음. 5. 블록검색 (Block Search) - 블록간에는 정렬되어 있어야 하나, 블록내에는 정렬되어 있을 필요 없음. - 인덱스 구성은 블록의 최대 값에 대한 주소로만 구성 - 예) ⅰ) 첫번째 인덱스 2가 갖는 값 9와 77비교 ⅱ) 두번째 인덱스 7이 갖는 값 40과 77비교 ⅲ) 세번째 인덱스 11이 갖는 값 105와 77비교 -> 77은 세번째 블록에 있음 ⅳ) 세번째 블록의 값들을 순차적으로 탐색 대표인덱스 2 7 11 14 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 레코드 인덱스 1 9 5 7 31 27 40 20 99 67 105 77 50 59 55 52

6. 해싱 (Hashing) - 해싱 함수를 이용하여 레코드가 저장되어 있는 주소를 직접 구하여 검색 (키를 비교하지 않고 계산에 의해 검색하는 방법) - 삽입과 삭제가 빈번한 자료에 적합 - 용어) 해싱표(hashing table) : 레코드 위치 저장을 위한 기억공간 테이블은 버켓으로 구성되고, 버켓은 여러 개의 슬롯으로 구성 버켓(bucket) : 해싱 주소법에 삽입 가능한 키의 개수 슬롯(slot) : 한 개의 레코드를 저장할 수 있는 공간 충돌(collision) : 두개 이상의 레코드가 동일한 버켓 주소를 갖는 경우 동거자(synonym) : 동일한 버켓 주소를 갖는 서로 다른 레코드의 집합 - 오버플로우 처리방법 개방주소지정(open addressing) 충돌발생시 해싱테이블에 비어 있는 다른 버켓을 찾아 주소 저장 (주소 재계산) 체인(chain) 기법 : 포인터를 이용하여 비어 있는 버켓을 지정 폐쇄주소지정(close addressing) 오버플로우 발생시 링크로 연결하여 해결

◆ 다시 한 번 1. 순차검색(Linear Search, Sequential Search) ◆ 다시 한 번 1. 순차검색(Linear Search, Sequential Search) - 기억장소의 처음부터 차례대로 탐색하는 방법이다. - 가장 간단하나 속도가 느리다. - 자료가 정렬되어 있을 필요가 없다. 2. 이진검색(Binary Search) - 처음값과 마지막값에 대한 중간값을 계산한 후 키 값과 비교하여 검색한다. - 이미 자료가 정렬되어 있어야 한다. - 자료가 많을 수록 효과적이다. 3. 피보나치검색(Fibonacci Search) - 피보나치 순열을 이용해서 탐색한다. - 자료가 정렬되어 있어야 한다. - 덧셈과 뺄셈만으로 탐색이 가능하다. - 알고리즘 구현이 복잡하고, 초기에 피보나치 수열화되어 있어야 한다. 4. 보간검색(Interpolation Search) - 자료가 있을만한 위치의 키를 선택하여 탐색한다. (자료가 정렬되어 있어야 한다.) - 파일이나 키의 분포 상황에 따라 영향을 받는다. - 곱하기와 나누기 연산을 많이 하므로 자주 사용하지 않는다. 5. 블록검색(Block Search) - 파일을 몇 개의 블록으로 나누어 찾는 레코드가 어느 블록에 있는가 찾는 방법이다. - 어느 블록에 있는지 판단되었으면 그 블록내에서 선형검색한다. - 자료가 어느 정도 정렬되어 있을 경우 효과적이 방법이다.

기출 . 예상 문제 1. 다음 탐색(Search) 방법 중 가장 빠른 것은? ① Binary Search Tree ② Sequential Search ③ Block Search ④ Linear Search 2. 블록 탐색은 어느 경우에 특히 유용한가? ① 자료가 네 가지 범주에 정리되어 있지 않을 때 ② 출력량이 많을 때 ③ 알파벳 코드를 사용할 때 ④ 자료가 거의 올바른 순서로 정리되어 있을 때 3. 이진탐색(Binary Search)의 특징이 아닌것은? ① 작은 리스트에 적합하다. ② 전체 레코드를 찾는 시간은 증가한다. ③ 원하는 레코드를 신속히 찾을 수 있다. ④ 약간의 계산이 필요하다.

기출 . 예상 문제 4. 정렬되어 있지 않은 자료를 탐색하기 위하여 가장 효과적인 방법은? ① 순차탐색(Sequential Search) ② 2진탐색(Binary Search) ③ 확률탐색(Probabilistic Search) ④ 피보나치탐색(Fibonacci Search) 5. 정렬되어 있는 N개의 요소를 가진 파일에서 하나의 요소에서 순차적 탐색을 할 때 평균 search 길이는? ① {N(N+1)} / 2 ② (N+1) / 2 ③ (N+1) /2N ④ (2N+1) /2 6. 해싱(Hashing) 기법에 대한 설명으로 옳은 것은? ① 버킷(bucket)이란 한 개의 레코드를 저장할 수 있는 공간으로 N개의 버킷이 모여 슬롯을 이룬다. ② 충돌(collision)이란 두개 이상의 레코드가 동일한 버켓 주소를 갖는 경우를 말한다. ③ 동거자(synonym)란 서로 다른 버켓 주소를 갖는 레코드의 집합. ④ 개방주소법(open addressing)이란 오버플로 발생시 이를 별도의 기억공간에 두고 링크로 연결하여 사용하는 방법을 말한다.