[210628]
알고리즘 : 어떤 일을 하기 위한 명령의 집합
성능
탐색 문제를 풀 때 사용.
탐색 문제 search 를 풀 때 사용.
이진 탐색은 매 단계마다 절반의 후보들을 없앨 수 있다.
(홀수 + 1) / 2
로 계산def binary_search(list, item):
low = 0
high = len(list)-1
while low <= high:
mid = (low + high) / 2
guess = list[mid]
if guess == item: ## 추측한 값이 정답임
return mid
if guess > item: ## guess가 너무 큼 - 탐색 천장을 mid-1로 설정
high = mid - 1
else: ## guess가 너무 작음
low = mid - 1
return None ## 아이템이 리스트에 없음
my_list = [1, 3, 5, 7, 9]
print binary_search(my_list, 3) ## return = 1
print binary_search(my_list, -1) ## return = None
시간 또는 저장공간 면에서 가장 효율적인 알고리즘을 나타낼 수 있다
어떤 알고리즘이 얼마나 빠른지 표기하는 방법. (시간복잡도 표기)
위쪽일수록 빠르고, 아래쪽일수록 느림
실행시간이 O(n!)인 알고리즘. (외판원=세일즈맨)
문제 : 세일즈맨이 가장 짧은 거리로 n개의 도시를 모두 방문하려 할 때, 도시를 방문하는 모든 경로를 살펴보아야 한다.
도시의 수가 n개일 때, 경로 탐색을 위한 연산 횟수는 n!로 증가율이 엄청나게 높다.