728x90
728x90
순차 탐색(Sequential Search)
순차 탐색
- 어떤 데이터는 정렬되지 않은 상태로 존재하고, 어떤 데이터는 정렬된 상태로 존재한다.
- 이 두 경우에 데이터를 찾는 방법은 조금 다르다.
① 정렬되지 않은 집합에서의 순차 탐색
검색 성공
- 첫 번째 데이터부터 차례로 비교해서 찾은 데이터의 위치를 반환한다.
검색 실패
- 첫 번째 데이터부터 차례로 비교해서 찾지 못할 경우, -1 위치를 찾았다고 반환해서 검색에 실패한 것으로 처리한다.
def seqSearch(ary, fData) : pos = -1 size = len(ary) print('## 비교한 데이터 ==> ', end = '') for i in range(size) : print(ary[i], end = ' ') if ary[i] == fData : pos = i break print() return pos dataAry = [188, 150, 168, 162, 105, 120, 177, 50] findData = 0 findData = int(input('* 찾을 값을 입력하세요. --> ')) print('배열 -->', dataAry) position = seqSearch(dataAry, findData) if position == -1 : print(findData, '(이)가 없네요.') else : print(findData,'(은)는 ', position, '위치에 있음')
결과 보기
* 찾을 값을 입력하세요. --> 105 배열 --> [188, 150, 168, 162, 105, 120, 177, 50] ## 비교한 데이터 ==> 188 150 168 162 105 105 (은)는 4 위치에 있음 * 찾을 값을 입력하세요. --> 100 배열 --> [188, 150, 168, 162, 105, 120, 177, 50] ## 비교한 데이터 ==> 188 150 168 162 105 120 177 50 100 (이)가 없네요.
② 정렬된 집합에서의 순차 탐색
검색 성공
- 첫 번째 데이터부터 차례로 비교해서 찾은 데이터의 위치를 반환한다.
검색 실패
- 첫 번째 데이터부터 차례로 비교해서 찾을 데이터보다 큰 데이터를 만나도 못 찾으면 이후는 검색할 필요 없이 검색에 실패한 것이다. 이때는 -1 위치를 찾았다고 반환해서 검색에 실패한 것으로 처리한다.
def seqSearch(ary, fData) : pos = -1 size = len(ary) print('## 비교한 데이터 ==> ', end = '') for i in range(size) : print(ary[i], end = ' ') if ary[i] == fData : pos = i break elif ary[i] > fData : break print() return pos dataAry = [188, 150, 168, 162, 105, 120, 177, 50] findData = 0 dataAry.sort() findData = int(input('* 찾을 값을 입력하세요. --> ')) print('배열 -->', dataAry) position = seqSearch(dataAry, findData) if position == -1 : print(findData, '(이)가 없네요.') else : print(findData, '(은)는 ', position, '위치에 있음')
결과 보기
* 찾을 값을 입력하세요. --> 150 배열 --> [50, 105, 120, 150, 162, 168, 177, 188] ## 비교한 데이터 ==> 50 105 120 150 150 (은)는 3 위치에 있음 * 찾을 값을 입력하세요. --> 70 배열 --> [50, 105, 120, 150, 162, 168, 177, 188] ## 비교한 데이터 ==> 50 105 70 (이)가 없네요.
순차 탐색의 시간 복잡도
정렬되지 않은 집합
- 정렬되지 않은 집합의 순차 탐색은 찾는 데이터가 앞쪽에 배치되어 있는 운이 좋은 경우에는 몇 번의 비교만으로 검색을 완료할 수 있다.
- 하지만, 가장 뒤쪽에 배치되거나 아예 없는 데이터를 모든 데이터와 비교해야 한다.
- 데이터 개수가 개라면 시간 복잡도는 으로 표현된다.
정렬된 집합
- 정렬된 집합의 순차 탐색 역시 운이 좋게 찾을 데이터가 앞쪽이라면 몇 번의 비교만으로 완료할 수 있다.
- 검색할 데이터가 없는 경우에도 데이터의 크기가 작다면 앞쪽만 검색한 후 검색 실패를 효율적으로 확인할 수 있다.
- 하지만, 최악의 경우에는 맨 마지막까지 검색할 수 있으므로 시간 복잡도는 으로 표현해야 한다.
728x90
728x90
'Computer Science > 자료구조' 카테고리의 다른 글
[C] 원형 연결 리스트(Circular Linked List) (0) | 2022.07.12 |
---|---|
[C] 단순 연결 리스트(Singly Linked List) (0) | 2022.07.12 |
[Python] 큐(Queue) (0) | 2022.07.01 |
[Python] 스택(Stack) (0) | 2022.07.01 |
[Python] 이진 탐색(Binary Search) (0) | 2022.06.29 |
[Python] 원형 연결 리스트(Circular Linked List) (0) | 2022.06.22 |
[Python] 단순 연결 리스트(Singly Linked List) (0) | 2022.06.22 |
[Python] 선형 연결 리스트(Linear Linked List) (0) | 2022.06.22 |