DAY 7
📚 IT 5분 잡학사전
🔖오늘 읽은 범위: episode 22~25
알고리즘: 컴퓨터에게 내리는 지시 사항을 나열한 것
등교 준비하기 알고리즘이 있다고 하면, 효율성이 좋은 알고리즘일 수록 등교 속도가 빨라진다.
자료구조: 데이터를 효율적으로 보관하고 찾기 위해 필요
짐이 마구잡이로 쌓인 택배 창고에서는 물건을 빨리 찾을 수 없다.
배열의 특징을 알려면 배열에서 자주 벌어지는 사건을 알아야 한다.
즉, 읽기(lead), 검색(search), 추가(add), 삭제(delete) 과정에서의 시간 복잡도를 알아야 한다.
이제 램의 관점에서 배열을 보자. 프로그래밍을 공부할 때 가장 먼저 만나는 자료구조인 배열(Array)은 램에 줄줄이 이어진 형태로 공간을 차지하고 있다. 배열의 구체적인 특징은 다음과 같다.
알고리즘으로 작업을 완료할 때 까지 걸리는 절차 수 N
을 이용하여 O(N)
, O(log N)
과 같이 표현한다.
예시) 선형 검색 알고리즘
: 배열 앞에서부터 하나씩 검사하기 때문에 배열의 길이가 N이면 최대 검색 횟수가 N이다.
O(N)
으로 표현한다.빅오 표기법은 설명을 간단시 해줄 뿐만 아니라, 알고리즘 분석을 빠르게 할 수 있게 한다.
알고리즘 선택 전, 빅오표기법을 보고 어떤 알고리즘을 사용할지 파악 할 수 있다.
O(1)
첫 번째 데이터를 한 번 출력하는 함수의 시간 복잡도는 O(1)
이다.
O(1)을 상수 시간(실행 횟수가 고정으로 정해진 것)
내에 실행된다고 말하기도 한다. 즉, 배열의 길이가 100이어도 첫 번째 데이터를 출력하는 함수는 실행 횟수가 고정적(첫 번째 데이터니까 실행 횟수가 한 번)으로 정해져 있기 때문에 상수 시간내에 실행된다고 말한다.
첫 번째 데이터를 두 번 출력하는 함수의 시간 복잡도도 O(1)
이다.
왜냐하면 Big-O는 실행단계에 영향주는 요소만 보기 때문이다.
즉, 배열의 길이와 상관없이 첫 번째 데이터를 출력하기 때문에 실행 횟수는 한 번이다.
시간 복잡도 O(N)
배열의 모든 데이터를 출력하는 함수의 경우, 배열의 모든 데이터를 출력해야 하기 때문에 배열 길이에 따라 실행 시간이 달라진다.
따라서 시간 복잡도는 O(N)이다. (p.148 그래프 참고)
시간 복잡도 O(N*N) = O(N제곱)
중첩 반복문 있을 때 발생하는 이차 시간(quadratic time)의 경우, 배열이 길어지면 길어질 수록 시간 제곱배로 느려진다.
O(N*N) = O(N제곱) (p.149 그래프 참고)
(y= 시간, x=배열 길이)
(p. 151, 153 그래프 참고)
선형 알고리즘(linear search) | 이진 검색 알고리즘(binary search) | |
---|---|---|
특징 | 배열 맨 처음부터 검색을 시작하여 배열 끝까지 순서대로 검색 | 배열 중앙 값 기준에서 검색을 시작하여 찾는 값이 중앙값 보다 작은 지 큰지 비교하며 검색 범위를 줄여가며 검색함. 줄인 범위의 중앙값 기준으로 검색하고 또 반복. 단, 정렬이 끝난(data가 순서대로 정렬된) 배열에서만 사용 가능 |
배열 길이와 검색 속도 | (y=x), 배열 길이가 길어지면 검색 시간도 길어짐 | (y=logx), 배열길이가 길어져도 검색 시간이 확 커지지는 않음 |
예) 1에서 부터 9까지 있는 배열에서 6을 찾으시오 | 배열 맨 처음부터 검색 시작: 검색 6번 째에 6 찾음 | 배열 중앙값인 5부터 검색 시작하여 찾는 값보다 작은 범위는 삭제하며 중앙값으로 검색: 검색 1번 째에 6찾음 |
이진 검색 알고리즘
와.. 알고리즘 너무 재미있어…!!! 눈이 반짝반짝 떠진다.
알고리즘이라고 하면 대기업 면접 볼 때 꼭 쳐야 하는 시험 느낌이 강했는데 이렇게 재밌는지는 꿈에도 몰랐다. 와 너무 재미있다!
.