- Basic Concepts
1. Introduction
์ํํธ์จ์ด ๊ฐ๋ฐ ๊ณผ์ ์์์ System Life Cycle์ ์ค๋ช
๋ฌธ์ ํด๊ฒฐ์ ์ํด ๋ค์ 5๋จ๊ณ๋ฅผ ๋ฐ๋ฆ:
1. Requirement (์๊ตฌ์ฌํญ: ์ ๋ ฅ/์ถ๋ ฅ ์ ์)
2. Analysis (๋ฌธ์ ๋ถํด: manageable sub-problems๋ก ๋๋)
3. Design (ADT์ ์๊ณ ๋ฆฌ์ฆ ์์ค์ ์ค๊ณ)
4. Coding (๊ตฌํ)
5. Verification (๊ฒ์ฆ, ํ ์คํธ ๋ฐ ์ค๋ฅ ์ ๊ฑฐ)
2. Algorithms
์๊ณ ๋ฆฌ์ฆ ์ ์: ํน์ ์์ ์ ์ํํ๋ ์ ํ ๊ฐ์ ๋ช ๋ น์ด ์งํฉ
์กฐ๊ฑด:
โข ์ ๋ ฅ (0๊ฐ ์ด์)
โข ์ถ๋ ฅ (์ต์ 1๊ฐ)
โข ๋ช ํ์ฑ (Definiteness)
โข ์ ํ์ฑ (Finiteness)
โข ํจ๊ณผ์ฑ (Effectiveness)
์๊ณ ๋ฆฌ์ฆ โ ํ๋ก๊ทธ๋จ
(์๊ณ ๋ฆฌ์ฆ์ ๊ฐ๋
์ ๋จ๊ณ, ํ๋ก๊ทธ๋จ์ ๊ตฌ์ฒด์ ๊ตฌํ)
3. Pseudo Code
์ฝ๋ ์ ์ฌ ํ์์ ์๊ณ ๋ฆฌ์ฆ ํํ ๋ฐฉ๋ฒ (์์ด+ํ๋ก๊ทธ๋๋ฐ ๋ ผ๋ฆฌ ํผํฉ)
์ฅ์ :
- ์ธ์ด ๋ ๋ฆฝ์
- ๋ก์ง ์ค๊ณ์ ์ง์ค ๊ฐ๋ฅ
3๊ฐ์ง ๊ตฌ์กฐ:
- ์์ฐจ (Sequence)
- ์ ํ (Selection)
- ๋ฐ๋ณต (Loop)
์ค์ ์คํ์ ์ ๋์ง๋ง, ํ๋ก๊ทธ๋จ ์ค๊ณ์ ์ค๊ฐ ๋จ๊ณ๋ก ํ์ฉ๋จ
4. Abstract Data Type (ADT)
ADT๋?: ๋ฐ์ดํฐ + ๊ทธ์ ๋ํ ์ฐ์ฐ์ ์งํฉ์ ์ถ์์ ์ผ๋ก ์ ์
โ๋ฌด์์ ํ ์ ์๋๊ฐโ์ ์ง์ค (What it does)
๋ด๋ถ ํํ๊ณผ ๊ตฌํ์ ์จ๊น (How it is done)
์์:
โข ์์ฐ์ ADT: Add, Subtract, Is_Zero ๋ฑ
โข ๋ฆฌ์คํธ ADT: insert, retrieve ๋ฑ
5. ADT Implementations
ADT๋ฅผ ๊ตฌํํ๋ ๋ ๊ฐ์ง ๋ํ ๋ฐฉ์:
- Array ๊ธฐ๋ฐ: ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํ ์์ฐจ์ ์ ๊ทผ
- Linked List ๊ธฐ๋ฐ: ํฌ์ธํฐ๋ฅผ ์ด์ฉํ ๋์ ์ฐ๊ฒฐ ๊ตฌ์กฐ
๊ด๋ จ ๊ฐ๋ :
- ํฌ์ธํฐ (Pointer)
- ๊ตฌ์กฐ์ฒด (Structure)
- self-referential ๊ตฌ์กฐ (struct Node { int data; struct Node *next; })
์ ํ ๋ฆฌ์คํธ์ ๋น์ ํ ๋ฆฌ์คํธ ๊ตฌํ๋ ์๊ฐ๋จ
6. Generic Code for ADTโs
๋ค์ํ ํ์ ์ ์๋ฃํ์ ๋ํด ์ผ๋ฐํ๋ ๊ตฌํ์ด ํ์ํจ
C์ธ์ด์์์ ๋ฐฉ๋ฒ:
- void* ํฌ์ธํฐ๋ฅผ ํ์ฉํ ์๋ฃํ ๋ ๋ฆฝ์ฑ
- function pointer๋ฅผ ํตํ ์ฐ์ฐ ์ผ๋ฐํ
C++, Java์์๋ ํ ํ๋ฆฟ(generic programming) ์ง์์ผ๋ก ๋ ๊ฐ๋จํ๊ฒ ์ฒ๋ฆฌ ๊ฐ๋ฅ
์์:
-
void* createNode(void* itemPtr);
-
๋น๊ต ํจ์ ํฌ์ธํฐ: int (compare)(void, void*)
7. Algorithm Efficiency
์๊ณ ๋ฆฌ์ฆ์ ์ฑ๋ฅ์ ์ํ์ ์ผ๋ก ๋ถ์
๋ณต์ก๋ ํ๊ธฐ: ์๊ฐ/๊ณต๊ฐ ๋ณต์ก๋, ํนํ ์๊ฐ ๋ณต์ก๋ ๋ถ์
๋ถ์ ๋ฐฉ๋ฒ:
โข ๋ฐ๋ณต๋ฌธ (linear: O(n), quadratic: O(nยฒ), logarithmic: O(log n) ๋ฑ)
โข ์ค์ฒฉ ๋ฐ๋ณต๋ฌธ (nested loop)์ ์ด ์ํ ํ์ ๊ณ์ฐ
Big-O ํ๊ธฐ๋ฒ: ์ต์ ์ ๊ฒฝ์ฐ ๋ณต์ก๋ ํํ
- O(1), O(n), O(log n), O(n log n), O(nยฒ), O(2โฟ), O(n!) ๋ฑ
ํต์ฌ: ์ ๋ ฅ ํฌ๊ธฐ๊ฐ ์ปค์ง์๋ก ์ฐจ์(์ง์)์ ์ฐจ์ด๊ฐ ํจ์ฌ ์ค์ํ๋ฉฐ, ์์ ๊ณ์๋ ์ค์ํ์ง ์์
๊ฒฐ๋ก
์ด Agenda๋ ์๋ฃ๊ตฌ์กฐ ์์ ์ ๊ธฐ๋ฐ์ ํ์ฑํ๋ ํต์ฌ ๊ตฌ์ฑ ์์๋ก์, ๋จ์ํ ์ฝ๋ ๊ตฌํ์ด ์๋๋ผ ๋ฌธ์ ํด๊ฒฐ ์ ์ฐจ, ์ถ์ํ, ์ฑ๋ฅ ๋ถ์๊น์ง ํฌํจํ๋ ์ ๋ฐ์ ์ธ ์ค๊ณ ์ฒ ํ์ ๋ด๊ณ ์๋ค.
System Life Cycle: Problem ->Problem solving -> Solution
Problem Solving๋จ๊ณ(4๋จ๊ณ)
- Requirement (์๊ตฌ์ฌํญ ๋ถ์)
- ์ ๋ ฅ๊ณผ ์ถ๋ ฅ ์ ์
- ๋ฌธ์ ์ ํ์ํ ๊ธฐ๋ฅ ๋๋ ์กฐ๊ฑด๋ค์ ๋ช ํํ ์ค์
- Analysis (๋ถํด ๋ถ์)
- ๋ฌธ์ ๋ฅผ ๋ ์์ ๋จ์๋ก ๋๋์ด ์ดํด
- ๊ฐ ๊ตฌ์ฑ ์์๊ฐ ์ด๋ค ์ญํ ์ ํ๋์ง ํ์
- Design (์ค๊ณ)
- ์ถ์ ์๋ฃํ(ADT), ์๊ณ ๋ฆฌ์ฆ ์ค๊ณ
- ํจ์จ์ ์ธ ํด๊ฒฐ ๋ฐฉ์์ ์ค๊ณ
- Coding(์ฝ๋ฉ)
- ์ค๊ณ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ก๊ทธ๋จ ์ฝ๋ ์์ฑ
Solution: Program Code
์ดํ ๋จ๊ณ
- Verification(๊ฒ์ฆ)
- ํ๋ก๊ทธ๋จ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋์ง ํ ์คํธ
- ์๊ตฌ์ฌํญ์ ์ ๋๋ก ์ถฉ์กฑํ๋์ง ํ์ธ
Leave a comment