IEIP_Note

알고리즘의 정의

규칙 설명
Input 외부로부터 입력되는 자료 0개 이상
Output 출력되는 결과 1개 이상
명확성 각 명령어의 의미가 명확해야한다.
유한성 정해진 단계를 지나면 종료
유효성 모든 명령은 실행이 가능한 연산들이어야 한다.
의사 코드 Pseudo Code (슈도 코드)

- 프로그램을 작성할 때, 각 Module이 작동하는 논리를 표현하기 위한 언어
- 일반적인 언어로 코드를 흉내내어 알고리즘을 써놓은 코드

알고리즘 기법

설계 기법 설명
분할과 정복
Divide and Conquer
문제를 나눌 수 없을 때까지 나누고, 각각을 풀면서
다시 병합하여 문제의 답을 얻는 알고리즘 기법
동적 계획법
Dynamic Programming
어떤 문제를 풀기 위해 그 문제를 더 작은 문제의 연장선으로 생각하고
과거에 구한 해를 활용하는 방식의 알고리즘
탐욕법
Greedy
결정을 해야할 때마다 그 순간에 가장 좋다고 생각되는 것을
해답으로 선택함으로써 최종 해답에 도달하는 방식의 알고리즘
백트래킹
Backtracking
어떤 노드의 유망성 점검 후, 유망하지 않으면 해당 노드의 부모로 복귀
다른 자손 노드를 검색하는 알고리즘

시간 복잡도 Time Complexity

알고리즘의 시간 복잡도를 고민하는 것
=> "입력 값의 변화에 따라 연산을 실행할 때
    연산 횟수에 비해 시간이 얼마만큼 걸리는가."

Big-O 표기법

복잡도 설명 대표 알고리즘
O(1) 상수형 복잡도
자료 크기 무관하게 항상 같은 속도로 작동
알고리즘 수행 시간이 입력 데이터 수와 관계없이 일정함.
Hash Function
O(log n) log형 복잡도
문제를 해결하기 위한 단계의 수가
log n번 만큼의 수행 시간을 가진다.
Binary Search
(이진 탐색)
O(n) 선형 복잡도
입려 자료를 차례로 하나씩 모두 처리
수행 시간이 자료 크기와 직접적 관계로 정비례
Sequential Search
(순차 탐색)
O(n log n) 선형 로그형 복잡도
문제를 해결하기 위한 단계의 수가
n log n번만큼의 수행 시간을 가진다.
퀵 정렬, 병합 정렬
힙 정렬
O(n^2) 제곱형 주요 처리 루프 구조가 2중인 경우
n 크기 작을 때는 n^2n log n보다 빠를 수 있음
거품 정렬, 삽입 정렬
선택 정렬

Hashing Function (== Hash Function)

Hash 함수 설명
제산법
Division
% 연산자를 이용하여 Table 주소를 계산하는 방식
제곱법
Mid Square
Record Key 값을 제곱한 후, 결과 값의 중간 부분에 있는 몇 bit 선택
Hash Table의 홈 주소로 사용하는 방식
숫자 분석법
Digit Analysis
레코드 키를 구성하는 수들이 모든 키들 내에서 자리 별로 어떤 분포인지를 조사하여
비교적 고른 분포를 나타내는 자릿수를 필요한 만큼 선택하여
레코드의 홈 주소로 사용하는 방식
폴딩법
Folding
레코드 키를 여러 부분으로 나누고, 나눈 부분의 각 숫자를 더하거나
XOR(A * !B + !A + B) 한 값을 홈 주소로 사용하는 기법
기수 변환법
Radix Conversion
어떤 진법으로 표현된 주어진 레코드 키를 다른 진법으로 간주
키를 변환하여 홈 주소를 얻는 방식
(어떤 기법이 16진법으로 표현됐다면, 이를 10진법으로 표현된 것으로 간주
키 값을 변환하여 홈 주소를 계산)
무작위 방법
Random
난수를 발생시켜, 각 레코드 키의 홈 주소를 결정하는 방식

검색 알고리즘

Sequential Search 순차 탐색

순차 탐색 과정

[92, 100, 215, 341, 625, 716, 812, 813, 820, 901, 902]

- 위의 배열에서 '901'이란 값을 찾는다.

1. 첫번째 레코드에 있는 92와 901과 같은 지 비교 (1트)
2. 두번째 레코드에 있는 100과 901이 같은 지 비교 (2트)
3. 세번째 레코드 215와 901 같은 지 비교 (3트)
...
10. 10번째 레코드 901과 찾는 값 901 같은 지 비교 (10트)
    같은 값을 찾았기에 탐색 종료, 총 10번 시도하였음.

Binary Search 이진 탐색

M = [(F + L) / 2]

M => 남은 범위 내 가운데 레코드 번호
F => 남은 범위 내 첫번째 레코드 번호
L => 남은 범위 내 마지막 레코드 번호

* 수식 결과 값에서 소수점이 나올 경우에는 버림 처리한다.

정렬 알고리즘

고려 요소 설명
데이터 양 정렬해야 할 데이터가 많고 적음에 따라 알고리즘 선정
초기 데이터 배열 상태 초기 데이터에 따라서, 정렬 알고리즘 성능 차이가
발생하기 때문에 초기 데이터 고려해야한다.
키 값들의 분포 상태 정렬할 데이터에서 값의 종류가 적은 지, 많은 지에 따라
알고리즘 별 성능 차이가 발생한다.
소요 공간 정렬에 필요한 추가 기억 공간의 크기를 고려
소요 시간 O(1), O(log2n) 등 알고리즘의 수행 시간 고려

Quick Sort 퀵 정렬


Merge Sort 합병 정렬


Heap Sort 힙 정렬

수행 시간 수식
최적 O(nlog2n)
평균 O(nlog2n)
최악 O(nlog2n)

Bubble Sort 거품 정렬

수행 시간 수식
최적 O(n^2)
평균 O(n^2)
최악 O(n^2)

Insertion Sort 삽입 정렬

수행 시간 수식
최적 O(n)
평균 O(n^2)
최악 O(n^2)

Selection Sort 선택 정렬

수행 시간 수식
최적 O(n^2)
평균 O(n^2)
최악 O(n^2)