โ ์ฐ์ ์์ ํ ADT
์ฐํธ๋ฐฐ๋ฌ๋ถ: ์ฐ์ฒด๊ตญ์์ ๊ทธ๋ ๋ฐฐ๋ฌํด์ผ ํ ์ฐํธ๋ฌผ๋ค์ ๊ฐ๋ฐฉ์ ๋ฃ์ด ์ฐ์ฒด๊ตญ์ ์ถ๋ฐํด์ ๋ฐฐ๋ฌ์ฒ๋ฅผ ๋๋ฉฐ ๋ฐฐ๋ฌํจ
- ๋ฐฐ๋ฌ๋ถA: ์ฐ์ฒด๊ตญ์์ ๊ฐ๋ฐฉ์ ์ฐํธ๋ฌผ์ ๋ด์ ๋ ์๋ฌด๋ ๊ฒ (fast), ๋ฐฐ๋ฌ ๊ณผ์ ์์๋ ๊ทธ๋๊ทธ๋์ ๋ฐฐ๋ฌ์ฒ์ ๋ง๋ ์ฐํธ๋ฌผ์ ์ฐพ์์ผ ํ๋๊น ์๊ฐ ๊ฑธ๋ฆผ (slow)
- ๋ฐฐ๋ฌ๋ถB: ์ฐ์ฒด๊ตญ์์ ๊ฐ๋ฐฉ์ ์ฐํธ๋ฌผ์ ๋ด์ ๋ ๋ฐฐ๋ฌ์ฒ ์ฃผ์ ์์๋๋ก ์ฐจ๊ณก์ฐจ๊ณก (slow), ๋ฐฐ๋ฌ ๊ณผ์ ์์๋ ์ฐจ๋ก๋ก ๊บผ๋ด๋ฉด ๋๊ธฐ ๋๋ฌธ์ ์๊ฐ ์ ์ฝ (fast)
๋ ๋ค๋ฅธ ์๋ก๋, ๊ฑฐ๋ฌ๋ค์ธ ์ํ ๋ต์์ง 100์ฅ์ ํ๋ฒ ์์๋๋ก ์ ์ํ์ ์ ๋ ฅํ๋ค๊ณ ํ ๋
- ๊ต์A: ๋ต์์ง ๋๋ฏธ์ ๋์ธ ์์๋๋ก ์ฑ์ (fast), ์ฑ์ ์๋ฃ๋ ๋ต์์ง ๋๋ฏธ์์ ํ๋ฒ ์์๋๋ก ์ฐพ์๋ด ์ ์ํ์ ์ ๋ ฅํจ (slow)
- ๊ต์B: ์ฑ์ ์ ๋ง์น ๋ต์์ง๋ฅผ ํ๋ฒ ์์ผ๋ก ์๊ณ (slow), ์ ์ ์ ๋ ฅํจ (fast)
์ฌ๊ธฐ์ ์ฐ๋ฆฌ๊ฐ ์ ์ ์๋ ๊ฒ
๊ณตํต์ ์ผ๋ก "๋ฐ์ดํฐ๋ฅผ ์ ์ฅ์์ ์ฝ์ ํ๊ณ , ์ดํ ์ ์ฅ์๋ก๋ถํฐ ์์๋๋ก ์ญ์ ํจ"
์ด๋, ์ฐํธ๋ฐฐ๋ฌ๋ถ์ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ ์ฐํธ๋ฌผ, ์ ์ฅ์๋ ์ฐํธ๊ฐ๋ฐฉ์ด๊ณ
๊ต์์ ๊ฒฝ์ฐ์๋ ๋ฐ์ดํฐ๋ ๋ต์์ง, ์ ์ฅ์๋ ์ฑ์ ์๋ฃ๋ ๋ต์์ง ๋๋ฏธ์ด๋ค.
์์ ๊ฐ์ ์ฌ๋ก์์ ๋๊ฐ ๋ ์ํ๋ค๊ณ ๋งํ๊ธฐ๋ ์ด๋ ต๋ค. ์ผํ๋ ์คํ์ผ์ด ๋ค๋ฅธ ๊ฒ
์ ์ฅ์์ ์ญํ ์ ํ๋ ์ถ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ฐ์ ์์ ํ ADT๋ผ๊ณ ํ๋ค.
๋ฌด์์ด ์ฐ์ ์์ ํ์ผ๊น?
์์ ๋ค๊ณ ์๋ ํธ์ง? ์ ๋ฐ? ์ด๋ฐ๊ฒ ์๋๊ณ
๋ฐ๋ก ์ฐํธ๊ฐ๋ฐฉ์ด๊ฒ ์ง!
โ Outline
โ 5.1 ์ฐ์ ์์ ํ ADT
5.11 ์ฐ์ ์์ ํ ADT
ADT(Abstract Data Type): ์์์ ๋ฐ์ดํฐ ํญ๋ชฉ์ด ์ฝ์ ๋๋ฉฐ, ์ผ์ ํ ์์์ ์ํด ์ญ์ ๋๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ
์ฐ์ ์์ ํ์ ์ ์ฅ๋๋ ๊ฐ ๋ฐ์ดํฐ ํญ๋ชฉ์ (ํค,์์)์์ผ๋ก ์ ์
์ผ๋ฐ์ ์ผ๋ก ํค๊ฐ ๋ ๊ฐ๋จ
์ฐํธ๋ฌผ์ ๊ฒฝ์ฐ์๋ (์ฃผ์, ์ฐํธ๋ฌผ)์ ์์ด๋ผ๊ณ ํ ์ ์๊ณ ,
๋ต์์ง์ ๊ฒฝ์ฐ์๋ (ํ๋ฒ,์ ์) ์์ด๋ผ๊ณ ํ ์ ์๋ค.
Q. ํ์ ์ฐ์ ์์ ํ์ ์ฐจ์ด์ ?
๋๋ค ์์์ ๋ฐ์ดํฐ ํญ๋ชฉ์ ์ ์ฅํ๊ณ ์ฃผ์ ์์
์ผ๋ก ์ฝ์
๊ณผ ์ญ์ ๊ฐ ๊ฐ๋ฅํ๋ค๋ ์ ์ ๊ฐ๋ค.
ํ์ง๋ง, ํ๊ฐ ์ฝ์
๋ ์์ ๊ทธ๋๋ก ์ญ์ ๋๋ค๋ฉด, ์ฐ์ ์์ ํ๋ ํค ์์์ ๋ฐ๋ผ ์ญ์ ๋๋ค๋ ์ ์์ ์ฐจ์ด๊ฐ ์์
5.12 ์ฐ์ ์์ ํ ์์ฉ
Q. ์ฐ์ ์์ ํ ์์ฉ์ฌ๋ก
ex1. ๊ฒฝ๋งค ์์ฅ
์ด๋ค ์ํ์ ๊ฒฝ๋งค์ ์ฐธ์ฌํ ์์ฐฐ์๋ค ๊ฐ์ด๋ฐ ์๊ฐ์ ์ผ๋ก ๊ฐ์ฅ ๋จผ์ ์์ฐฐํ ์์ฐฐ์๋ณด๋ค๋ ์ต๊ณ ๊ฐ๋ฅผ ์จ๋ธ ์์ฐฐ์ ๋์ฐฐ์ํฌ ๊ฒ์ด๋ค.
=> ์์ฐฐ์ ๋ฆฌ์คํธ: ์ฐ์ ์์ ํ
=> ์ต๊ณ ๊ฐ ์์ฐฐ์ ์ฐพ์๋ด ๋์ฐฐ์ํค๋ ๊ฒ: ์ญ์
ex2. ์ฃผ์์์ฅ
=> ์ฃผ์๊ฑฐ๋๋ฅผ ์ํ๋ ์ฌ์/ํ์ ์ฃผ๋ฌธ๋ค์ ๋ฆฌ์คํธ: ์ฐ์ ์์ ํ
=> ์ด ๊ฐ์ด๋ฐ ์ต๊ณ ๊ฐ ์ฌ์๋ ์ต์ ๊ฐ ํ์ ์ฃผ๋ฌธ์ด ์ฐ์ ์ ์ผ๋ก ์ฒ๋ฆฌ๋๋ ๊ฒ: ์ญ์
Q. ์ฐ์ ์์ ํ์ ์ค์ํ ์์ฉ: ์ ๋ ฌ
์ ๋ ฌ(sort): ๋ฐ์ดํฐ์์๋ค์ ์ผ์ ํ ํค ์์์ ์ํด ๋ค์ ๋ฐฐ์นํ๋ ๊ฒ
์ ๋ ฌ๊ณผ์ ์์ ๋ฐ์ดํฐ์์๋ค์ ์์ ๋ณด๊ดํ๋ ์ ์ฅ์๋ฅผ ์ด์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ฐ, ์ฐ์ ์์ ํ๋ฅผ ์ ์ฅ์๋ก ์ด์ฉํ์ฌ ์ ๋ ฌํ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
5.13 ์ฐ์ ์์ ํ ADT ๋ฉ์๋
์ฃผ์ ๋ฉ์๋
insertItem(k,e): ๋ค์ด๊ฐ๋ ํ์ดํ
element removeMin(): ๋๊ฐ๋ ํ์ดํ
- min๋ง ์ํ๋ฉด max๋ ํ ์ ์์ผ๋๊น min๋ง ์ง์คํด์
์ผ๋ฐ ๋ฉ์๋
integer size(): ๊ฐ๋ฐฉ ์ ๋ฐฐ๋ฌ ์ํ ์ฐํธ๋ฌผ์ด ๋ช๊ฐ
boolean isEmpty(): False, True ๋ฐํ, ์ฐํธ๋ฌผ์ ๋ค ๋ฐฐ๋ฌํ๊ณ ๋น์ด ์์ผ๋ฉด True๊ฐ ๋์ค๊ฒ ์ง
์ ๊ทผ ๋ฉ์๋
์ฝ์ ํ๊ฑฐ๋ ์ญ์ ํ์ง ์๊ณ ๋ค์ฌ๋ค๋ง ๋ด
element minElement(): ๊ฐ๋ฐฉ ์์ ์๋ ์ฐํธ๋ฌผ ์ค์ ๊ฐ์ฅ ๊ฐ๊น์ด ์ฃผ์์ ์ฐํธ๋ฌผ
element minKey(): ๊ฐ๋ฐฉ ์์ ์๋ ์ฐํธ๋ฌผ ์ค์ ๊ฐ์ฅ ๊ฐ๊น์ด ์ฃผ์
์์ธ
emptyQueueException(): ์ฐํธ๋ฌผ์ด ์๋๋ฐ ๋ฐฐ๋ฌํ๋ผ๋ ์๋ํ๋ ๊ฒฝ์ฐ
fullQueueException(): ๊ฐ๋ฐฉ์ด ๊ฝ ์ฐผ๋๋ฐ ์ฐํธ๋ฌผ์ ๋ ๋ฃ์ผ๋ ค๋ ๊ฒฝ์ฐ
โ 5.2 ์ฐ์ ์์ ํ๋ฅผ ์ด์ฉํ ์ ๋ ฌ
ํฌ๊ธฐ ๋น๊ต ๊ฐ๋ฅํ ์์ ์งํฉ์ ์ ๋ ฌํ๋๋ฐ ์ฐ์ ์์ ํ๋ฅผ ์ด์ฉํ ์ ์๋ค.
(1) ์ฐ์์ ์ธ insertItem(e,e) ์์ ์ ํตํด ์์๋ค์ ํ๋์ฉ ์ฝ์
(key=e๋ก ์ ์ ํจ, ๊ฐ๋จํ๊ฒ ํ์ํ๊ธฐ ์ํด)
(2) ์ฐ์์ ์ธ removeMin() ์์ ์ ํตํด ์์๋ค์ ์ ๋ ฌ ์์๋ก ์ญ์
๐ ์๊ณ ๋ฆฌ์ฆ PQ-Sort
Alg PQ-Sort(L)
input list L
output sorted list L
//๋น์ด ์๋ '์ฐ์ ์์ ํ P'๋ฅผ ์ด๊ธฐํ
1. P <- empty priority queue
// ์
๋ ฅ ๋ฆฌ์คํธ L์ ์์๋ค์ ์ฐจ๋ก๋ก ์ญ์ ํ์ฌ P์ ์ฝ์
2. while (!L.isEmpty())
e <- L.removeFirst()
P.insertItem(e)
//P๋ก๋ถํฐ ์ต์ ํค๋ฅผ ๊ฐ์ง ์์๋ถํฐ ์ฐจ๋ก๋ก ์ญ์ ํ์ฌ L์ ์ฝ์
3. while (!P.isEmpty())
e <- P.removeMin()
L.addLast(e)
//์ ๋ ฌ๋ ๋ฆฌ์คํธ L์ ์ป์ ์ ์์
4. return
[๊ทธ๋ฆผ 5-2]
key(ํค): ํค(height)์ผ ๋ ์๊ณ ๋ฆฌ์ฆ PQ-Sort๋ฅผ ์ด์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋ํ๋จ
โฐ ์๊ณ ๋ฆฌ์ฆ PQ-Sort์ ํน์ง
์๊ณ ๋ฆฌ์ฆ PQ-Sort๋ ์ํ ๋์์ธ ๋ฆฌ์คํธ L์ด ๋ฐฐ์ด or ์ฐ๊ฒฐ๋ฆฌ์คํธ ์ค ์ด๋ ๊ฒ์ผ๋ก ๊ตฌํ๋์๋์ง์ ๋ฌด๊ดํ๊ฒ ์๋ํจ. ์ฐ์ ์์ ํ P์ ๋ํด์๋ ๋ง์ฐฌ๊ฐ์ง๋ก P์ ์์ธ๊ตฌํ์ ํน์ ํ์ง ์๋๋ค.
L์ P์ฒ๋ผ ์์ธ ๊ตฌํ์ด ํน์ ๋์ง ์์ ๋ฐ์ดํฐ๊ตฌ์กฐ: ์ผ๋ฐ(generic) ๋ฐ์ดํฐ๊ตฌ์กฐ
์ผ๋ฐ ๋ฐ์ดํฐ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ ์๊ณ ๋ฆฌ์ฆ์ ํน์ ๋ฐ์ดํฐ๊ตฌ์กฐ๋ฅผ ๋์์ผ๋ก ์์ฑ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋นํด
ํ ์ฐจ์ ๋์ ์ถ์์ ์ฐจ์์์ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ํ๋ ๋งํผ ๊ฐ๋
์ฑ์ด ๋์ ๊ฒ์ ๋ฌผ๋ก ์์ฉ ๋ฒ์๋ ๋๋ค.
โฐ ์๊ณ ๋ฆฌ์ฆ PQ-Sort์ ๋จ๊ณ๋ณ ์คํ์๊ฐ
์ฐ์ ์์ ํ์ ์์ธ ๊ตฌํ์ ๋ฐ๋ผ ๋ค๋ฆ
โฐ ์ฐ์ ์์ ํ P๋ฅผ '๋ฌด์๋ฆฌ์คํธ(unordered list)'๋ก ๊ตฌํํ๋ ๊ฒฝ์ฐ
- ์ฐ์ ์์ ํ์ ํญ๋ชฉ๋ค์ ๋ฆฌ์คํธ์ ์์ ์์๋ก ์ ์ฅ
- ์ฑ๋ฅ
: ๋ฉ์๋ insertItem์ ์๊ฐ์ ์ํ
(ํญ๋ชฉ์ ๋ฆฌ์คํธ์ ๋งจ ์ or ๋งจ ๋ค์ ์ฝ์ ํ ์ ์๊ธฐ ๋๋ฌธ)
: removeMin, minKey, minElement ๋ฑ ์์ ์ ์๊ฐ ์ํ
(์ ์ฒด ๋ฆฌ์คํธ๋ฅผ ์ํํ๋ฉด์ ์ฐพ์์ผ ํ๊ธฐ ๋๋ฌธ)
โฐ ์ฐ์ ์์ ํ P๋ฅผ '์์๋ฆฌ์คํธ(ordered list)'๋ก ๊ตฌํํ๋ ๊ฒฝ์ฐ
- ์ฐ์ ์์ ํ์ ํญ๋ชฉ๋ค์ ๋ฆฌ์คํธ์ ํค ์์๋ก ์ ์ฅ
- ์ฑ๋ฅ
: ๋ฉ์๋ insertItem์ ์๊ฐ์ ์ํ
(ํญ๋ชฉ์ ์ฝ์ ํ ๊ณณ์ ์ฐพ์์ผ ํ๊ธฐ ๋๋ฌธ)
: removeMin, minKey, minElement ๋ฑ ์์ ์ ์๊ฐ ์ํ
(์ต์ ํค๋ฅผ ๊ฐ์ง ํญ๋ชฉ์ด ๋งจ ์์ ์๊ธฐ ๋๋ฌธ)
๐ ์ ํ ์ ๋ ฌ(selection sort)
PQ-Sort์ ์ผ์ข ์ผ๋ก ์ฐ์ ์์ ํ๊ฐ ๋ฌด์๋ฆฌ์คํธ๋ก ๊ตฌํ
์คํ์๊ฐ
- ํ์ insertItem ์์ ์ ์ฌ์ฉํ์ฌ ์์๋ค์ ์ฐ์ ์์ ํ์ ์ฝ์ ํ๊ธฐ ๋๋ฌธ์ ์๊ฐ ์์
- ํ์ removeMin ์์ ์ ์ฌ์ฉํ์ฌ ์์๋ค์ ์ฐ์ ์์ ํ๋ก๋ถํฐ ํค ์์๋ก ์ญ์ ํ๋๋ฐ ์ ๋น๋กํ๋ ์๊ฐ ์์
์ฆ, ์ ํ์ ๋ ฌ์
์๊ฐ์ ์ํํจ
์๋ ์์๋ฅผ ์ดํด๋ณด๋ฉด,
(1) ์ธํ๋ฆฌ ์ ๋๋ฌผ๋ค์ ํ๋์ฉ ์ฐจ๋ก๋๋ก ์ฐ๋ฆฌ๋ก ์ฎ๊ฒจ์ง๋ค.
(2) ํค๊ฐ ์์ ๊ฒ๋ถํฐ ์ฐจ๋ก๋ก ๊ณจ๋ผ๋ด(์ด ๋๋ฌธ์ '์ ํ์ ๋ ฌ') ์ฐ๋ฆฌ์์ ์ธํ๋ฆฌ๋ก ์ฎ๊ฒจ์ ธ ์ ๋ ฌ์ด ์๋ฃ
๐ ์ฝ์ ์ ๋ ฌ(insertion sort)
PQ-Sort์ ์ผ์ข ์ผ๋ก ์ฐ์ ์์ ํ๊ฐ ์์๋ฆฌ์คํธ๋ก ๊ตฌํ
์คํ์๊ฐ
- ํ์ insertItem ์์ ์ ์ฌ์ฉํ์ฌ ์์๋ค์ ์ฐ์ ์์ ํ์ ์ฝ์ ํ๊ธฐ ๋๋ฌธ์ ์ ๋น๋กํ๋ ์๊ฐ ์์
- ํ์ removeMin ์์ ์ ์ฌ์ฉํ์ฌ ์์๋ค์ ์ฐ์ ์์ ํ๋ก๋ถํฐ ํค ์์๋ก ์ญ์ ํ๋๋ฐ ์๊ฐ ์์
์ฆ, ์ฝ์ ์ ๋ ฌ์
์๊ฐ์ ์ํํจ
์๋ ์์๋ฅผ ์ดํด๋ณด๋ฉด,
(1) ์ธํ๋ฆฌ ์ ๋๋ฌผ๋ค์ ํ๋์ฉ ์ฐจ๋ก๋๋ก ์ฐ๋ฆฌ๋ก ์ฎ๊ฒจ์ง๋ค. ์ด๋, ํค ์์์ ๋ฐ๋ผ ์๊ธฐ ํค์ ๋ง๋ ์์น์ ์ฝ์
(์ด ๋๋ฌธ์ '์ฝ์
'์ ๋ ฌ)๋๋ ๋ฐฉ์์ผ๋ก!
(2) ์ฝ์
๋จ๊ณ๊ฐ ์๋ฃ๋ ํ, ์ฒซ๋ฒ์งธ ์ฐ๋ฆฌ๋ถํฐ ์์ํ์ฌ ์ฐจ๋ก๋ก ์ธํ๋ฆฌ๋ก ์ฎ๊ฒจ์ ธ ์ ๋ ฌ ์์ฑ
์ ํ์ ๋ ฌ๊ณผ ์ฝ์ ์ ๋ ฌ ๊ด๊ณ์ ๋ํด
๋์ด ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ์ด์ง๋ง. ์ฃผ์ ๋ฐ์ดํฐ๊ตฌ์กฐ์ธ ์ฐ์ ์์ ํ P๊ฐ ์ด๋ป๊ฒ ๊ตฌํ๋์๋์ง์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ฒ
- P๋ฅผ ๋ฌด์๋ฆฌ์คํธ๋ก ๊ตฌํํ๋ฉด ์ ํ์ ๋ ฌ
- P๋ฅผ ์์๋ฆฌ์คํธ๋ก ๊ตฌํํ๋ฉด ์ฝ์ ์ ๋ ฌ
- ์ธํ๋ฆฌ: L์ ์ญํ
- ์ฐ๋ฆฌ: P์ ์ญํ
โ 5.3 ์ ์๋ฆฌ ์ ๋ ฌ
๋๋ฌผ์ด ๋ค์ฏ ๋ง๋ฆฌ์ธ ๊ฒฝ์ฐ ๋๋ฌผ๋ค์ ์์ ์ ์ฅ์๋ก์ ์ ํํ ๋ค์ฏ ๊ฐ์ ์ฐ๋ฆฌ๊ฐ ํ์ํ๋ฐ,
์ด ์ฐ๋ฆฌ(Q)๋ค์ ์๋ ์ ๊ณต๋ ๋ด๋ถ ๊ณต๊ฐ์ธ ์ธํ๋ฆฌ ์ด์ธ์ ์ ๋ ฌ์ ์ํด ์ถ๊ฐ๋ก ์์๋๋ ๊ณต๊ฐ์ด๋ฏ๋ก
์ธ๋ถ๊ณต๊ฐ์ด๋ผ ํ ์ ์๋ค.
๋๋ฌผ์ด ๋ง๋ฆฌ๋ผ๋ฉด ์ฐ๋ฆฌ๊ฐ ๊ฐ ํ์ํ ๊ฒ (θ(n))
์ ํ์ ๋ ฌ, ์ฝ์ ์ ๋ ฌ ๋ชจ๋
ํฌ๊ธฐ์ ์ธ๋ถ ์ฐ์ ์์ ํ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌ์คํธ ์ ๋ ฌํจ!
๊ทธ๋ฌ๋
์๋ ๋ฆฌ์คํธ ์์ฒด๋ฅผ ์ํ ๋ด๋ถ ๊ณต๊ฐ ์ด์ธ์ ์ถ๊ฐ๋ก ํฌ๊ธฐ์ ์ธ๋ถ ๊ณต๊ฐ๋ง์ ์ฌ์ฉํ๋ค๋ฉด
์ด๋ฅผ ์ ์๋ฆฌ(in-place)์์ ์ํํ๋ค๊ณ ํ๋ค.
์ฆ, ์ฐ๋ฆฌ๋ฅผ ์ ํ ์ฌ์ฉํ์ง ์๊ณ ์ธํ๋ฆฌ๋ง ์ฌ์ฉํ์ฌ ์ ๋ ฌ์ ์ํํ๋ค๋ฉด ์ ์๋ฆฌ ์ ๋ ฌ
โ ์ ์๋ฆฌ ์ ๋ ฌ์ ์์
์ ์๋ฆฌ๋ ์๋๋๋ ์ข
์ข
์ค์ํจ
์๋ฅผ ๋ค์ด, ์ฐ๋ฆฌ ํ ๊ฐ๋ฅผ ๋น๋ ค์ค๋๋ฐ ๋น์ผ ๊ฐ์ ์น๋ค์ผ ํ๋ค๊ณ ๊ฐ์ ํ๋ค๋ฉด
์ ๋ ฌํ ๋๋ง๋ค ๋๋ฌผ ์ ์ ๋น๋กํ๋ ๋งํผ์ ๋น์ฉ์ด ๋ค ๊ฒ์ด๋ค ใ
๋ฐ๋ฉด์, ์ฐ๋ฆฌ๋ฅผ ์ ํ ๋น๋ฆฌ์ง ์๊ฑฐ๋ ๊ฒจ์ฐ ๋ช ๊ฐ, ์ฆ ์์ ๊ฐ์์ ์ฐ๋ฆฌ๋ก๋ง ์ํํ๋ค๋ฉด ๋น์ฉ์ ๊ฐ์ ํจ๊ณผ๊ฐ ์์ ๊ฒ!
์ด๋ค ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ด ์ ๋ ฌ ๋์ ๊ฐ์ฒด๋ฅผ ์ํด
์๋ ์ ๊ณต๋ ๋ฉ๋ชจ๋ฆฌ์๋ค ์ค์ง ์์ ๋ฉ๋ชจ๋ฆฌ๋ง์ ์ถ๊ฐ์ ์ผ๋ก ์ฌ์ฉํ๋ค๋ฉด
ํด๋น ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ์ ์๋ฆฌ ์ํํ๋ค๊ณ ์๊ธฐํจ
๐ ์ ์๋ฆฌ ์ ํ ์ ๋ ฌ
์ ํ์ ๋ ฌ์ด ์ธ๋ถ ๋ฐ์ดํฐ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ ๋์ ์ ์๋ฆฌ์์ ์ํํ๋๋ก ๊ตฌํ ๊ฐ๋ฅํจ
- ๋ฆฌ์คํธ์ ์ ๋ถ๋ถ์ ์ ๋ ฌ ์ํ๋ก ์ ์ง
- ๋ฆฌ์คํธ์์ ์์๋ฅผ ์ญ์ ํ๋ ๋์ ์์๋ค์ ์๋ฆฌ๋ฅผ ๋ง๋ฐ๊ฟ(swapElements)
- ์ ์ ์ผ๋ก ๋๋ฌ์ธ์ธ ๋ถ๋ถ์ ์ฐ๋ฆฌ, ์ฆ ์ฐ์ ์์ ํ ์ญํ ์ ํ๋ ๊ณต๊ฐ์ ์๋ฏธ
์ ๋ ฌ์ ๊ฐ ๋จ๊ณ๋ง๋ค
ํ์ฌ ์ฐ์ ์์ ํ์์ ์ต์ ํค๋ฅผ ๊ฐ์ง ๋๋ฌผ์
์ฐ์ ์์ ํ์ ๊ฐ์ฅ ์ผ์ชฝ ์๋ฆฌ์ ๋๋ฌผ๊ณผ ์์น๋ฅผ ๋ง๋ฐ๊พผ๋ค.
- ์ด๊ธฐ์๋ ์ ๋ ฅ ๋ฆฌ์คํธ ์ ์ฒด๊ฐ ์ฐ์ ์์ ํ๋ก ์ค์ ๋๋ฉฐ ์ ๋ ฌ์ด ์งํ๋จ์ ๋ฐ๋ผ ์ฐ์ ์์ ํ์ ํฌ๊ธฐ๊ฐ 5,4,3,2,1,0์ผ๋ก ์ผ์ชฝ์์๋ถํฐ ํ ์นธ์ฉ ์ข์์ง
๐ ์ ์๋ฆฌ ์ฝ์ ์ ๋ ฌ
์ฝ์ ์ ๋ ฌ์ด ์ธ๋ถ ๋ฐ์ดํฐ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ ๋์ ์ ์๋ฆฌ์์ ์ํํ๋๋ก ๊ตฌํ ๊ฐ๋ฅํจ
- ๋ฆฌ์คํธ์ ์ ๋ถ๋ถ์ ์ ๋ ฌ ์ํ๋ก ์ ์ง
- ๋ฆฌ์คํธ์์ ์์๋ฅผ ์ญ์ ํ๋ ๋์ ์์๋ค์ ์๋ฆฌ๋ฅผ ๋ง๋ฐ๊ฟ(swapElements)
- ์ ์ ์ผ๋ก ๋๋ฌ์ธ์ธ ๋ถ๋ถ์ ์ฐ๋ฆฌ, ์ฆ ์ฐ์ ์์ ํ ์ญํ ์ ํ๋ ๊ณต๊ฐ์ ์๋ฏธ
์ ๋ ฌ์ ๊ฐ ๋จ๊ณ๋ง๋ค
ํ์ฌ ์ฐ์ ์์ ํ์ ์ญ์ ๋์ง ์์ ๋๋ฌผ ์ค ๊ฐ์ฅ ์ผ์ชฝ์ ๋๋ฌผ์
์ฐ์ ์์ ํ ์์ ๋ฐ๋ฅธ ์๊ธฐ ์๋ฆฌ์ ์ฝ์ ํ๋ค.
- ์ด๊ธฐ์๋ ์ฐ์ ์์ ํ๊ฐ ๋น์ด ์๋ ๊ฒ์ผ๋ก ์ค์ ๋๋ฉฐ ์ ๋ ฌ์ ๋จ๊ณ๊ฐ ์งํ๋จ์ ๋ฐ๋ผ ์ฐ์ ์์ ํ์ ํฌ๊ธฐ๊ฐ 0,1,2,3,4,5 ์ค๋ฅธ์ชฝ๋ฐฉํฅ์ผ๋ก ํ ์นธ์ฉ ๋์ด์ง
์ ์๋ฆฌ ์ ํ ์ ๋ ฌ & ์ ์๋ฆฌ ์ฝ์ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ
์ ์๋ฆฌ ๋ฒ์ ์ธ ๋งํผ ์
๋ ฅ ๋ฐฐ์ด์ ํฌ๊ธฐ n๊ณผ ์๊ด ์์ด
pass, minLoc, j, save ๋ฑ ์์ ๋ฉ๋ชจ๋ฆฌ๋ก ์ถฉ๋ถํ ๋ช ๊ฐ์ ๊ธฐ์ด๋ณ์๋ง ์ฌ์ฉํ๋ ๊ฒ ์ ์ํ๊ธฐ!
Alg inPlaceSelectionSort(A)
input array A of n keys
output sorted array A
1. for pass // 0 to (n- 2)
minLoc <-pass //์ฐ์ ์์ ํ ์์์ ๊ฐ์ฅ ์ฒซ๋ฒ์งธ ์์๋ฅผ ์ค์
for j // (pass+1) to (n-1) ์ฐ์ ์์ ํ ์์์ ๊ฐ์ฅ ์ฒซ๋ฒ์งธ ์์๋ฅผ ์ ์ธํ๊ณ ํฌ๊ธฐ ๋น๊ตํ๊ธฐ
if (A[j] < A[minLoc]) // ์ฒซ๋ฒ์งธ ์์๋ณด๋ค ์์๊ฒ ์์ผ๋ฉด ๋ฐ๊พธ๊ธฐ
minLoc <- j
A[pass] <-> A[minLoc]
2. return
Alg inPlaceInsertionSort(A)
input array A of n keys
output sorted array A
1. for pass // 1 to (n-1) ์ฐ์ ์์ ํ์ ์ญ์
๋์ง ์์ ๋๋ฌผ ์ค ๊ฐ์ฅ ์ผ์ชฝ์ ์์
save <- A[pass]
j <- pass-1 // ์ฐ์ ์์ ํ์ ์ญ์
๋ ๋๋ฌผ ์ค ๊ฐ์ฅ ์ค๋ฅธ์ชฝ์ ์์
while ((j>=0) & (A[j]>save)) // ์ฐ์ ์์ ํ์ ์ญ์
๋ ๋๋ฌผ์ด ๋ ํฌ๋ค๋ฉด ์ค๋ฅด์ชฝ์ผ๋ก ์ฎ๊ธฐ๊ธฐ
A[j+1] <- A[j]
j <- j-1
A[j+1] <- save
2. return
โ 5.4 ์ ํ ์ ๋ ฌ๊ณผ ์ฝ์ ์ ๋ ฌ ๋น๊ต
๐ ๊ณตํต์
์ ์ฒด์ ์ผ๋ก ์๊ฐ์ ์ํํจ
์ค์ฒฉ ๋ฐ๋ณต๋ฌธ์ผ๋ก ์์ฑ๋๋๋ฐ
- ๋ด๋ถ ๋ฐ๋ณต๋ฌธ์ ์ ํ ํ์์ ์ํํ๋ฏ๋ก ์๊ฐ์ ์ํ
- ์ธ๋ถ ๋ฐ๋ณต๋ฌธ์ ๊ฐ์ ์ ๋ ฌ ๋จ๊ณ(ํจ์ค)๋ก ๊ตฌ์ฑ
๋์ ๊ณฑํ๋ฉด ์์ ๊ฐ์ ๊ฒฐ๊ณผ
๋ ์๊ณ ๋ฆฌ์ฆ ๋ชจ๋ ์ ์๋ฆฌ ๋ฒ์ ์ ๊ณต๊ฐ์ ์์ํจ
๋ ์๊ณ ๋ฆฌ์ฆ ๋ชจ๋ ๊ตฌํ์ด ๋จ์ํ๋ค๋ ์ฅ์ ์ด ์์ผ๋ฏ๋ก, ์
๋ ฅ ํฌ๊ธฐ n์ด ์์ ๊ฒฝ์ฐ์ ์ ์ฉ
๐ ์ฐจ์ด์
if ์ด๊ธฐ ์ ๋ ฅ ๋ฆฌ์คํธ๊ฐ ์์ ํ or ๊ฑฐ์ ์ ๋ ฌ๋ ๊ฒฝ์ฐ๋ผ๋ฉด
์ ์๋ฆฌ ์ฝ์ ์ ๋ ฌ์ด ์ ์๋ฆฌ ์ ํ ์ ๋ ฌ๋ณด๋ค ๋น ๋ฅด๋ค
because ์ ์๋ฆฌ ์ฝ์
์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ๋ด๋ถ ๋ฐ๋ณต๋ฌธ์ด ๋งค๋ฒ ์๊ฐ๋ง ์์ํ๊ธฐ ๋๋ฌธ
์ธ๋ถ ๋ฐ๋ณต๋ฌธ์ ์ํ ํ์๊น์ง ๊ณฑํ๋ฉด ์ ์ฒด์ ์ผ๋ก ์๊ฐ๋ง์ด ์์๋จ
if ๋ฐ์ดํฐ์์๋ผ๋ฆฌ ๊ตํ์์ (๋ฉ์๋ swapElements)์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ๊ฒฝ์ฐ๋ผ๋ฉด
์ ์๋ฆฌ ์ ํ ์ ๋ ฌ์ด ์ ์๋ฆฌ ์ฝ์ ์ ๋ ฌ๋ณด๋ค ๋น ๋ฅด๋ค
because ์ ์๋ฆฌ ์ ํ ์ ๋ ฌ์ ๊ฒฝ์ฐ ๊ตํ ์์
์ด ํจ์ค๋ง๋ค ํ ์ํ๋๋๋ฐ ๋นํด
์ ์๋ฆฌ ์ฝ์
์ ๋ ฌ์ ๊ฒฝ์ฐ์๋ ์ต์
์ ๊ฒฝ์ฐ ํจ์ค๋ง๋ค ๋ฒ ์ํ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ
โ 5.5 ์์ฉ ๋ฌธ์
5.51 ์ญ์น์ ์ฝ์ ์ ๋ ฌ
L์ n๊ฐ์ ์์๋ก ์ด๋ฃจ์ด์ง, ์ ์ฒด ์์ ๊ด๊ณ๊ฐ ์ ์๋ ๋ฆฌ์คํธ๋ก ๊ฐ์ ํ์
L๋ด์ ์ญ์น(inversion)๋ ๊ฐ ์์ ๋ํ๋์ง๋ง
> ์ธ ์์ ์ ๋ฅผ ๋งํ๋ค.
Q. ์ ์ ๋ฒ์์ ์ ์ผํ ์์๋ก ์ด๋ฃจ์ด์ง ํฌ๊ธฐ ์ ๋ฆฌ์คํธ ๋ด์ '์ต๋ ๊ฐ๋ฅํ ์ญ์น์ ์'์ ์ด๋์ '์ ์์ ๋ฐฐ์น'๋ฅผ ๊ตฌํ๋ผ.
<์ต๋ ๊ฐ๋ฅํ ์ญ์น์ ์>
<์ ์์ ๋ฐฐ์น>
๋ด๋ฆผ ์ฐจ์์ผ ๋(์ญ์ ๋ ฌ)
Q. ๋ง์ฝ ๋ชจ๋ ์์๊ฐ ๋ฐ๋ฅธ ์๋ฆฌ(์ฆ, ์ ๋ ฌ ์์ ์ ์์ด์ผ ํ ์๋ฆฌ)์์ ์นธ ์ด๋ด์ ์์นํ๋ค๋ฉด ์ ๋ํ ์ฝ์ ์ ๋ ฌ ์ํ์ ์๊ฐ์ด ์์๋จ์ ์ค๋ช ํ๋ผ.
hint) ์ฝ์ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ๊ฒํ ํ์ฌ ์ฐ์ , I๊ฐ ๋ฆฌ์คํธ ๋ด์ ์ด ์ญ์น์ ์๋ผ๊ณ ํ ๋ ์ฝ์ ์ ๋ ฌ์ด ์๊ฐ์ ์ํํจ์ ์ค๋ช ํ๋ผ.
(hint) ๋จผ์ ์ฆ๋ช ํด๋ณด์.
์ธ๋ถ ๋ฐ๋ณต๋ฌธ: O(n)
๋ด๋ถ ๋ฐ๋ณต๋ฌธ: ํ ๋ผ์ด๋๋ ํ์นธ์ฉ ์ผ์ชฝ์ผ๋ก ์งํํ๋ฉด์ ๋ฑ ํ๊ฐ์ ์ญ์น๋ง์ ๊ต์ ํจ. ๋ฐ๋ผ์ ๋ด๋ถ ๋ฐ๋ณต๋ฌธ์ ์ ํํ ์ด ์ญ์น์ ๊ฐ์์ธ I๋ผ์ด์ง๋ฅผ ์ํํด์ผ ํจ => O(I)
=> ์๊ณ ๋ฆฌ์ฆ O(n+I)
...๊ทธ ๋ค์ ์ดํด๊ฐ ์๋๋ ์ํ
โ ์์ฝ
- ์ฐ์ ์์ ํ ADT๋ ์์์ ๋ฐ์ดํฐ ํญ๋ชฉ์ด ์ฝ์ ๋ ์ ์๋ ์ ์ฅ์๋ก์จ ์ญ์ ์์๋ ์ต์ ํค๋ฅผ ๊ฐ์ง ํญ๋ชฉ๋ถํฐ ์ญ์ ๋๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๋งํ๋ค.
- ์ฐ์ ์์ ํ๋ฅผ ์ด์ฉํ์ฌ ์ ๋ ฌ์ ์ํํ ์ ์๋ค.
์ ํ ์ ๋ ฌ์ ์ฐ์ ์์ ํ๊ฐ ๋ฌด์๋ฆฌ์คํธ๋ก, ์ฝ์ ์ ๋ ฌ์ ์ฐ์ ์์ ํ๊ฐ ์์๋ฆฌ์คํธ๋ก ๊ตฌํ๋๋ค. - ์ผ๋ฐ์ ์ผ๋ก ์ด๋ค ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ด ์ ๋ ฌ ๋์ ๊ฐ์ฒด๋ฅผ ์ํด ์๋ ์ ๊ณต๋ ๋ฉ๋ชจ๋ฆฌ์ ์ถ๊ฐํ์ฌ ์ค์ง ์์ ๋ฉ๋ชจ๋ฆฌ๋ง์ ์ฌ์ฉํ๋ค๋ฉด, ํด๋น ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ด ์ ์๋ฆฌ์์ ์ํํ๋ค๊ณ ๋งํ๋ค.
- ์ ํ ์ ๋ ฌ๊ณผ ์ฝ์
์ ๋ ฌ์ ๋ชจ๋ ์ด ํ๋ค. (์ต์
์ ๊ฒฝ์ฐ) ์๊ฐ์ ์ํ
if ์ด๊ธฐ ์ ๋ ฅ ๋ฆฌ์คํธ๊ฐ ์์ ํ or ๊ฑฐ์ ์ ๋ ฌ๋ ๊ฒฝ์ฐ๋ผ๋ฉด ์ฝ์ ์ ๋ ฌ faster
if ๋ฐ์ดํฐ ์์๋ผ๋ฆฌ์ ๊ตํ ์์ ์ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฌ๋ ๊ฒฝ์ฐ๋ผ๋ฉด ์ ํ ์ ๋ ฌ faster
โ ์ฐ์ต๋ฌธ์
5-1 ์ ๋ ฌ ์ฐ์ต
Q. ๋ค์ ์ ๋ ฅ ๋ฆฌ์คํธ์ ๋ํ ์ ์๋ฆฌ ์ ํ ์ ๋ ฌ๊ณผ ์ ์๋ฆฌ ์ฝ์ ์ ๋ ฌ์ ์ํ ๋ด์ฉ์ ์์ํ๋ผ.
์ ๋ ฅ ๋ฆฌ์คํธ : 22 15 36 44 10 3 9 13 29 25
<์ ์๋ฆฌ ์ ํ ์ ๋ ฌ>
(`22` 15 36 44 10 `3` 9 13 29 25)
3 (`15` 36 44 10 22 `9` 13 29 25)
3 9 (`36` 44 `10` 22 15 13 29 25)
3 9 10 (`44` 36 22 15 `13` 29 25)
3 9 10 13 (`36` 22 `15` 44 29 25)
3 9 10 13 15 (`22` 36 44 29 25)
3 9 10 13 15 22 (`36` 44 29 `25`)
3 9 10 13 15 22 25 (`44` `29` 36)
3 9 10 13 15 22 25 29 (`44` `36`)
3 9 10 13 15 22 25 29 36 (44)
3 9 10 13 15 22 25 29 36 44
<์ ์๋ฆฌ ์ฝ์ ์ ๋ ฌ>
(22) `15` 36 44 10 3 9 13 29 25
(15 22) `36` 44 10 3 9 13 29 25
(15 22 36) `44` 10 3 9 13 29 25
(15 22 36 44) `10` 3 9 13 29 25
(10 15 22 36 44) `3` 9 13 29 25
(3 10 15 22 36 44) `9` 13 29 25
(3 9 10 15 22 36 44) `13` 29 25
(3 9 10 13 15 22 36 44) `29` 25
(3 9 10 13 15 22 29 36 44) `25`
(3 9 10 13 15 22 25 29 36 44)
3 9 10 13 15 22 25 29 36 44
5-2 ์ต์ ์ ์ ์๋ฆฌ ์ฝ์ ์ ๋ ฌ
Q. ์ ์๋ฆฌ ์ฝ์
์ ๋ ฌ์ ๋ํ ์ต์
์ ์
๋ ฅ ๋ฆฌ์คํธ์ ์๋ฅผ ๋ค์ด๋ผ.
๋ํ ๊ทธ๋ฌํ ๋ฆฌ์คํธ์ ๋ํด ์ ์๋ฆฌ ์ฝ์
์ ๋ ฌ์ด Ω์๊ฐ์ ์ํํจ์ ์ค๋ช
ํ๋ผ.
๋ต) ๊ฑฐ๊พธ๋ก ์ ๋ ฌ๋ ๋ฆฌ์คํธ
์ด์ )
- ํจ์ค๋ง๋ค ๊ฐ ์์๋ ๋ฆฌ์คํธ์ ์ฐ์ ์์ ํ ๋ถ๋ถ์ ๋งจ ์๊น์ง ์ด๋ํด์ผ ํจ
- ์ฆ, ํจ์ค๋ง๋ค ๊ฐ ์์๋ nํ ์ด๋ (๋ด๋ถ ๋ฐ๋ณต๋ฌธ)
- n๊ฐ์ ์์ ๊ฐ๊ฐ์ ๋ํด(์ธ๋ถ ๋ฐ๋ณต๋ฌธ) nํ์ ์ด๋์ด ํ์ํ๋ฏ๋ก ์ด n^2ํ์ ์ด๋์ ์ํ
+ ์ฐธ๊ณ ๋ธ๋ก๊ทธ 1
+์ฐธ๊ณ ๋ธ๋ก๊ทธ 2
https://luna-archive.tistory.com/7
๋ณธ ๊ฒ์๋ฌผ์ ์ธ์ข ๋ํ๊ต ์๊ณ ๋ฆฌ์ฆ ์์ ๊ต์ฌ '์๊ณ ๋ฆฌ์ฆ ์๋ฆฌ์ ์์ฉ'(๊ตญํ์ค ์ง์)์ ์ ๋ฆฌํ์์ต๋๋ค.
'๐ Study > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm] ํ์ ์๊ณ ๋ฆฌ์ฆ DFS, BFS (0) | 2025.04.06 |
---|---|
[Algorithm] ์ต๋จ ๊ฒฝ๋ก (0) | 2025.04.05 |
[Algorithm] ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ (0) | 2025.03.04 |
[Algorithm] ๊ทธ๋ฆฌ๋(Greedy) ์๊ณ ๋ฆฌ์ฆ ๊ธฐ์ถ๋ฌธ์ (0) | 2024.06.26 |
[Algorithm] ๊ทธ๋ฆฌ๋(Greedy) ์๊ณ ๋ฆฌ์ฆ (0) | 2024.06.26 |