Algorithms

Binary Search

술임 2023. 3. 7. 20:17

이진 탐색 알고리즘 : 리스트 내에서 데이터를 매우 빠르게 탐색하는 알고리즘

 

순차 탐색 Sequential Search

리스트 안에 있는 특정한 데이터를 찾기 위해 앞에서부터 데이터를 하나씩 차례대로 확인하는 방법

정렬되지 않은 리스트에서 데이터 찾을 때 사용

 

이진 탐색 Binary Search

배열 내부의 데이터가 정렬되어있어야만 사용 가능함

찾으려는 데이터와 중간점 위치에 있는 데이터를 반복적으로 비교해서 원하는 데이터를 찾는 것

입력 데이터가 많거나 탐색 범위가 넒음

확인하는 원소의 개수가 절반씩 줄어들기 때문에 시간 복잡도 O(logN)

# 반복문
def binary_search(array, target, start, end):
	while start <= end:
    	mid = (start+end)//2
        
        if array[mid] == target:
        	return mid
        elif array[mid]> target:
        	end = mid-1
        else:
        	start= mid+1
        return None
# 재귀함수 활용
def binary_search(array, target, start, end):
	if start > end:
    	return None
    mid = (start+end)//2
    
    if array[mid]==target:
    	return mid
    
    elif array[mid]>target:
    	return binary_search(array, target, start, mid-1)
    else:
    	return binary_search(array, target, mid+1, end)

 

트리 자료 구조

데이터베이스는 내부적으로 대용량 데이터 처리에 적합한 tree 자료구조를 이용해서 데이터가 정렬됨

노드와 노드의 연결로 표현

* 노드 : 정보의 단위, 어떠한 정보를 가지고 있는 개체

 

* 트리는 부모 노드와 자식 노드의 관계로 표현

* 트리의 최상단 노드가 루트 노드

* 트리의 최하단 노드는 단말 노드

* 트리의 일부를 떼어내도 트리 구조 -> 서브 트리

* 파일 시스템 같은 계층적이고 정렬된 데이터 다루기 적합

 

이진 탐색 트리

* 부모 노드보다 왼쪽 자식 노드가 작다

* 부모 노드보다 오른쪽 자식 노드가 크다

 

데이터 개수가 천만개를 넘거나 탐색 범위 크기가 천억 이상이면 이진 탐색 알고리즘 의심

# 입력 데이터가 많을 때
import sys

input_data = sys.stdin.readline().rstrip()

'Algorithms' 카테고리의 다른 글

Shortest Path  (0) 2023.03.08
Dynamic Programming  (0) 2023.03.07
Sorting  (0) 2023.03.06
Depth-First Search  (0) 2023.03.05
Stack & Queue  (0) 2023.03.04