본문 바로가기
Algorithms

그림으로 개념을 이해하는 알고리즘 - Ch 01

by soojitasan 2024. 4. 23. 10:21

CH 01. 알고리즘 소개

 

 

- 알고리즘 : 어떤 일을 하기 위한 명령의 집합

- 이진 탐색 (binary search)
리스트의 원소가 정렬되어있어야만 사용 가능
리스트에 원하는 원소가 존재하면 그 원소의 위치를 반환, 아니면 null 반환
n개의 원소를 가진 리스트에서 최대 log_2⁡_n번 만에 답 찾기 가능

 

 

# 이진 탐색 함수
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:
      high = mid - 1
    else:
      low = mid + 1
  return None


## 테스트
my_list = [1, 3, 5, 7, 9]

print(binary_search(my_list, 3))
print(binary_search(my_list, -1))

 

- 실행 시간
> 선형 시간 : 추측해야할 최대 횟수 = 리스트의 길이 (순차적으로 확인하는 경우)
> 이진 시간 : 추측해야할 최대 횟수 = log_2⁡_n번=로그 시간 (이진 탐색 시)


- 빅오 표기법 : 알고리즘이 얼마나 빠른지 표시하는 방법, 괄호 안에는 연산 횟수 기재
1) 선형 시간 (빅오 표기법 기준) : O(n)
2) 이진 시간 (빅오 표기법 기준) : O(log n)
3) O(n*log n) : 퀵 정렬과 같이 빠른 정렬 알고리즘
4) O(n^2) : 선택 정렬과 같이 느린 정렬 알고리즘
5) O(n!) : 정말 느린 알고리즘


ex. 종이에 16개의 네모칸 만들기
알고리즘 1. 네모 하나씩 그려서 총 16개의 네모 그리기 > O(16) 시간
알고리즘 2. 종이를 4번 접어서 16개의 네모칸 접기 > O(log 16) 시간