๐Ÿ“š Study/Algorithm

[์•Œ๊ณ ๋ฆฌ์ฆ˜] 2์ฃผ์ฐจ ๊ฐ•์˜ | ์šฐ์„ ์ˆœ์œ„ ํ ADT, ์ œ์ž๋ฆฌ ์„ ํƒ์ •๋ ฌ, ์ œ์ž๋ฆฌ ์‚ฝ์ž…์ •๋ ฌ

์œฐ๊ฐฑ 2022. 9. 10. 02:36

โœ… ์šฐ์„ ์ˆœ์œ„ ํ 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

https://hanamon.kr/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-time-complexity-%EC%8B%9C%EA%B0%84-%EB%B3%B5%EC%9E%A1%EB%8F%84/

+์ฐธ๊ณ  ๋ธ”๋กœ๊ทธ 2

https://luna-archive.tistory.com/7


๋ณธ ๊ฒŒ์‹œ๋ฌผ์€ ์„ธ์ข…๋Œ€ํ•™๊ต ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆ˜์—…๊ต์žฌ '์•Œ๊ณ ๋ฆฌ์ฆ˜ ์›๋ฆฌ์™€ ์‘์šฉ'(๊ตญํ˜•์ค€ ์ง€์Œ)์„ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.