자연어, 순서도, 의사 코드, 프로그래밍 언어를 이용해서 표현하며 | 규칙 | 설명 | 
|---|---|
| Input | 외부로부터 입력되는 자료 0개 이상 | 
| Output | 출력되는 결과 1개 이상 | 
| 명확성 | 각 명령어의 의미가 명확해야한다. | 
| 유한성 | 정해진 단계를 지나면 종료 | 
| 유효성 | 모든 명령은 실행이 가능한 연산들이어야 한다. | 
의사 코드 Pseudo Code (슈도 코드)
- 프로그램을 작성할 때, 각 Module이 작동하는 논리를 표현하기 위한 언어
- 일반적인 언어로 코드를 흉내내어 알고리즘을 써놓은 코드
분할과 정복, 동적 계획법, 탐욕법, 백트래킹 기법이 존재한다.| 설계 기법 | 설명 | 
|---|---|
| 분할과 정복 Divide and Conquer | 문제를 나눌 수 없을 때까지 나누고, 각각을 풀면서 다시 병합하여 문제의 답을 얻는 알고리즘 기법 | 
| 동적 계획법 Dynamic Programming | 어떤 문제를 풀기 위해 그 문제를 더 작은 문제의 연장선으로 생각하고 과거에 구한 해를 활용하는 방식의 알고리즘 | 
| 탐욕법 Greedy | 결정을 해야할 때마다 그 순간에 가장 좋다고 생각되는 것을 해답으로 선택함으로써 최종 해답에 도달하는 방식의 알고리즘 | 
| 백트래킹 Backtracking | 어떤 노드의 유망성 점검 후, 유망하지 않으면 해당 노드의 부모로 복귀 다른 자손 노드를 검색하는 알고리즘 | 
시간 복잡도를 고민한다는 것이다.시간 복잡도는 다음과 같다.알고리즘의 시간 복잡도를 고민하는 것
=> "입력 값의 변화에 따라 연산을 실행할 때
    연산 횟수에 비해 시간이 얼마만큼 걸리는가."
시간 복잡도는 Big-O 표기법을 사용해서 나타낸다.최소한 보장되는 성능을 표기하기 때문에, 가장 일반적으로 사용한다.
Big-Ω, Big-θ 표기법이 존재한다.
    Big-Ω: 알고리즘 최상의 실행 시간을 표기한다.Big-θ: 알고리즘 평균 실행 시간을 표기한다.| 복잡도 | 설명 | 대표 알고리즘 | 
|---|---|---|
| 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^2가n log n보다 빠를 수 있음 | 거품 정렬, 삽입 정렬 선택 정렬 | 
| Hash 함수 | 설명 | 
|---|---|
| 제산법Division | %연산자를 이용하여 Table 주소를 계산하는 방식 | 
| 제곱법Mid Square | Record Key 값을 제곱한 후, 결과 값의 중간 부분에 있는 몇 bit 선택 Hash Table의 홈 주소로 사용하는 방식 | 
| 숫자 분석법Digit Analysis | 레코드 키를 구성하는 수들이 모든 키들 내에서 자리 별로 어떤 분포인지를 조사하여 비교적 고른 분포를 나타내는 자릿수를 필요한 만큼 선택하여 레코드의 홈 주소로 사용하는 방식 | 
| 폴딩법Folding | 레코드 키를 여러 부분으로 나누고, 나눈 부분의 각 숫자를 더하거나 XOR(A * !B + !A + B)한 값을 홈 주소로 사용하는 기법 | 
| 기수 변환법Radix Conversion | 어떤 진법으로 표현된 주어진 레코드 키를 다른 진법으로 간주 키를 변환하여 홈 주소를 얻는 방식 (어떤 기법이 16진법으로 표현됐다면, 이를 10진법으로 표현된 것으로 간주 키 값을 변환하여 홈 주소를 계산) | 
| 무작위 방법Random | 난수를 발생시켜, 각 레코드 키의 홈 주소를 결정하는 방식 | 
순차 탐색 과정
[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번 시도하였음.
M = [(F + L) / 2]
M => 남은 범위 내 가운데 레코드 번호
F => 남은 범위 내 첫번째 레코드 번호
L => 남은 범위 내 마지막 레코드 번호
* 수식 결과 값에서 소수점이 나올 경우에는 버림 처리한다.
데이터 양, 초기 데이터 배열 상태, 키 값들의 분포 상태, 소요 공간, 소요 시간, …| 고려 요소 | 설명 | 
|---|---|
| 데이터 양 | 정렬해야 할 데이터가 많고 적음에 따라 알고리즘 선정 | 
| 초기 데이터 배열 상태 | 초기 데이터에 따라서, 정렬 알고리즘 성능 차이가 발생하기 때문에 초기 데이터 고려해야한다. | 
| 키 값들의 분포 상태 | 정렬할 데이터에서 값의 종류가 적은 지, 많은 지에 따라 알고리즘 별 성능 차이가 발생한다. | 
| 소요 공간 | 정렬에 필요한 추가 기억 공간의 크기를 고려 | 
| 소요 시간 | O(1),O(log2n)등 알고리즘의 수행 시간 고려 | 
분할과 정복 기법에 의한 정렬 알고리즘O(n log2n)O(n log2n)O(n^2)분할과 정복 기법에 의한 정렬 알고리즘O(n log2n)O(n log2n)O(n log2n)완전 이진 트리 Complite Binary Tree로 입력 자료 레코드 구성함.| 수행 시간 | 수식 | 
|---|---|
| 최적 | O(nlog2n) | 
| 평균 | O(nlog2n) | 
| 최악 | O(nlog2n) | 
요소의 개수 - 1회 수행하면 모든 숫자가 정렬된다.| 수행 시간 | 수식 | 
|---|---|
| 최적 | O(n^2) | 
| 평균 | O(n^2) | 
| 최악 | O(n^2) | 
| 수행 시간 | 수식 | 
|---|---|
| 최적 | O(n) | 
| 평균 | O(n^2) | 
| 최악 | O(n^2) | 
n개의 레코드 중에서 최솟값을 찾아 첫 번째 레코드 위치에 놓고 | 수행 시간 | 수식 | 
|---|---|
| 최적 | O(n^2) | 
| 평균 | O(n^2) | 
| 최악 | O(n^2) |