๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿš— Major Study (Bachelor)/๐ŸŸจ Algorithm

์•Œ๊ณ ๋ฆฌ์ฆ˜ 1์ฃผ์ฐจ ์›”์š”์ผ ๊ฐ•์˜

by UKHYUN22 2022. 3. 1.
728x90

๋ฌธ์ œ์— ๋Œ€ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์–ด๋–ค ์‹์œผ๋กœ ๋ถ„์„ํ• ์ง€ ์ด๋ฏธ ์•Œ๊ณ  ์žˆ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋ถ„์„ํ•˜๋Š” ์‹œ๊ฐ„

 


Unsorted List ์—์„œ record ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•ด์„œ Sorted List์— ๋„ฃ๋Š”๋‹ค. ๋ฐฉ๋ฐ”๋‹ฅ์— 1๋ถ€ํ„ฐ 100๊นŒ์ง€ ์ ํ˜€์ ธ์žˆ๋Š” ์ˆซ์ž๊ฐ€ ์žˆ๊ณ  ์นด๋“œ ์ˆซ์ž๊ฐ€ ์•ˆ๋ณด์ธ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž. ๋งŒ์•ฝ ๋ˆ„๊ฐ€ ์ •๋ ฌํ•ด์„œ 1๋ถ€ํ„ฐ 100๊นŒ์ง€ ์ •๋ ฌํ•ด์„œ ๊ฐ€์ ธ์˜ค๋ผ๊ณ  ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ํ•  ๊ฒƒ ์ธ๊ฐ€? ๋Œ€๋ถ€๋ถ„ ์ž„์˜์˜ ์นด๋“œ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•˜๋Š”๋ฐ ์ด๋Š” ์ด๋ฏธ ์ •๋ ฌ๋œ ๊ฐ’์ด๊ณ  ๋‹ค์Œ ์นด๋“œ๊ฐ€ ์ฒซ ๋ฒˆ์งธ ์ˆซ์ž๋ณด๋‹ค ํฌ๋ฉด ์˜ค๋ฅธ์† ์ž‘์œผ๋ฉด ์™ผ์†์œผ๋กœ ๋„ฃ๋Š”๋‹ค. ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์œ„์น˜์‹œํ‚ค๋ฉด ์™ผ์†๊ณผ ์˜ค๋ฅธ์†์— ์นด๋“œ๊ฐ€ ์ •๋ ฌ๋ผ์„œ ์œ„์น˜ํ•  ๊ฒƒ์ด๋‹ค. ๋…ธ๋ž€์ƒ‰์€ Sorted List์ด๊ณ  ์˜ค๋ฅธ์ชฝ์€ Unsorted List์ด๋‹ค. Bar๊ฐ€ ๊ทธ ์‚ฌ์ด๋ฅผ ๊ตฌ๋ถ„ํ•œ๋‹ค๊ณ  ํ•˜๋ฉด ๋งจ ์™ผ์ชฝ์— ์žˆ๋Š” Element๋Š” Sorted List์— ์†ํ•˜๊ณ  ์ด๋ ‡๊ฒŒ ์‹œ์ž‘ํ•˜๊ฒŒ ๋œ๋‹ค. ์ž„์˜์˜ Element๋ฅผ Unsorted List์—์„œ ํ•˜๋‚˜ ์„ ํƒํ•˜๊ฒŒ ๋˜๋Š”๋ฐ Bar์—์„œ ๊ฐ€์žฅ ๊ฐ€๊นŒ์ด ์žˆ๋Š” ํ•‘ํฌ์ƒ‰ Element๊ฐ€ ์„ ํƒ์ด ๋˜๊ณ  ๊ทธ๊ฒƒ์„ Sorted List์— ์–ด๋””๋กœ ๋“ค์–ด๊ฐ€์•ผ ํ•˜๋Š”์ง€ ๊ณ„์† ๊ฒฐ์ •ํ•˜๊ฒŒ ๋œ๋‹ค. ํ•˜์ง€๋งŒ ๋‘ ๋ฒˆ์งธ ์ดํ›„๋กœ Sorted List์—์„œ๋Š” ์ •๋ ฌ์„ ์–ด๋–ป๊ฒŒ ํ•  ๊ฒƒ์ธ๊ฐ€! ์ด๋Š” Comparison ๋ฐฉ๋ฒ•์„ ํƒํ•ด์„œ ํ•ด๋‹น ์œ„์น˜์™€ Change ํ•˜๊ฒŒ ๋œ๋‹ค.

 

 


์ด๋ ‡๊ฒŒ ์•„์ด๋””์–ด๋ฅผ ํ†ตํ•ด์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค. ๋ญ”๊ฐ€ ์ ˆ์ฐจ์ ์ด๊ณ  ๋…ผ๋ฆฌ์ ์ด๊ณ  ๋ช…ํ™•ํ•˜๊ฒŒ ๊ธฐ์ˆ ์„ ํ•ด์•ผ ํ•œ๋‹ค. ํฌ์ธํŠธ๋Š” ํ•˜๋‚˜์”ฉ ํ•˜๋‚˜์”ฉ Pick์„ ์˜ฎ๊ฒจ ๊ฐ€๋Š” ๊ฒƒ๊ณผ Sorted List๋กœ ์ž˜ ์ฐพ์•„์„œ Insert ํ•˜๋Š” ๊ฒƒ ์ด ๋‘๊ฐ€์ง€์ด๋‹ค. Example: Insertion Sort. ์ผ๋‹จ Insertํ•ด์•ผํ•  Element๋ฅผ ๋ณต์‚ฌํ•ด์„œ Key๋ผ๋Š” ๋ณ€์ˆ˜์— ๋„ฃ๋Š”๋‹ค. ๊ทธ๋ฆฌ๊ณ  Key๊ฐ€ ์œ„์น˜ํ•œ Index๋„ j์— ์ €์žฅํ•ด์„œ j๋ณด๋‹ค ์ž‘์€ j-1 ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ 1๋ฒˆ์งธ Index๊นŒ์ง€ ์ด๋™ํ•œ๋‹ค. ๋น„๊ต๋ฅผ ํ•˜๋‹ค๊ฐ€ ํ•ด๋‹น Element๊ฐ€ Key๊ฐ’๋ณด๋‹ค ํฌ๋‹ค๋ฉด ๊ณ„์† Change๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค. i๊ฐ€ 0์ด ๋˜๋ฉด ์ œ์ผ ์ž‘์€ Element๋ผ๋Š” ๊ฒƒ์ด๋ฏ€๋กœ while ๋ฌธ์˜ ํƒˆ์ถœ์กฐ๊ฑด์œผ๋กœ ์ ์–ด๋†“๋Š”๋‹ค. Key๊ฐ’๊ณผ Element๋ฅผ ๋น„๊ตํ•ด์„œ Key๊ฐ’์ด Element๋ณด๋‹ค ์ž‘์„ ๋•Œ์™€ i = 0์ด ๋˜์—ˆ์„ ๋•Œ ๋น ์ ธ๋‚˜๊ฐ€๊ฒŒ ๋˜๋Š” ์กฐ๊ฑด์„ ์„ค์ •ํ•˜๋ฉด ๋œ๋‹ค.

 


Insertion sort
j = 2 ์ผ๋•Œ Key๊ฐ’์„ ๋ณต์‚ฌ๋ฅผ ํ•˜๊ณ  A[j]๋ฅผ Sorted Array์— ๋„ฃ์–ด์•ผ ํ•œ๋‹ค. i๋Š” j-1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์•ผ ํ•˜๊ณ  i๊ฐ€ 1์”ฉ ๊ฐ์†Œ๋ฅผ ํ•ด์•ผ ํ•œ๋‹ค. ๋งŒ์•ฝ Key๊ฐ€ Element๋ณด๋‹ค ํฌ๋‹ค๋ฉด i+1 ์œ„์น˜์— i์˜ ๊ฐ’์„ ๋„ฃ๋Š”๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ i๊ฐ€ 0๋ณด๋‹ค ์ปค์•ผํ•œ๋‹ค๋Š” ์กฐ๊ฑด ๋˜ํ•œ AND ์กฐ๊ฑด์œผ๋กœ ๋„ฃ์–ด์•ผ ํ•œ๋‹ค. ์™œ๋ƒํ•˜๋ฉด i๊ฐ€ 0๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์„ ๊ฒฝ์šฐ์—๋„ ์‹œํ–‰์ด ๋œ๋‹ค๋ฉด ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋„ ์„ฑ๋ฆฝํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. While์ด ๋๋‚ฌ์„ ๋•Œ Key๊ฐ’์„ i+1 ์ธ๋ฑ์Šค ์œ„์น˜์— ์ง‘์–ด๋„ฃ์–ด์•ผ ํ•œ๋‹ค.

 

 

<ALgorithm>
์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ž€ ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š” ๋ฐฉ๋ฒ•์ธ๋ฐ, ์ด ์ˆ˜์—…์—์„œ ํ•˜๋Š” ๊ฒƒ์€ 1. ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋””์ž์ธํ•˜๊ณ  2. ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ถ„์„ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ ์ฃผ๊ณ  ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋””์ž์ธํ•ด๋ด~ ์˜ ์ˆ˜์—…์ด ์•„๋‹ˆ๋ผ ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•œ ๋ถ„์„์„ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ฃผ๋ชฉ์ ์ด ๋œ๋‹ค. ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ž€ ๋‘๊ฐ€์ง€๋กœ ๋‚˜๋‰œ๋‹ค. 1. Correctness์™€ 2. Efficient์ธ๋ฐ ์ฃผ๋กœ Time ๊ณผ Storage ์ธก๋ฉด์—์„œ ์ด์•ผ๊ธฐํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

 


Design paradigm
incremental ๋””์ž์ธ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ์–˜๊ธฐ๋ฅผ ํ•œ๋‹ค. Divide-and-conquer approach๋ผ๊ณ  ๋ถˆ๋ฆฐ๋‹ค. Merge sort๋ฅผ ๋ณด๋ฉด ์ ˆ๋ฐ˜์œผ๋กœ Divideํ•˜๊ณ  ๋ฐ˜๋ฐ˜์„ ๋‹ค์‹œ ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆ„๊ณ  ๊ณ„์† Divideํ•ด ๋‚˜๊ฐ„๋‹ค. Element๊ฐ€ ํ•˜๋‚˜๊ฐ€ ๋ ๋•Œ๊นŒ์ง€ Divide๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  ์ด๋ฅผ ๊ฐ๊ฐ Merge๋ฅผ ํ•˜๋ฉด์„œ ์ •๋ ฌํ•˜๊ฒŒ ๋œ๋‹ค. ํฐ ๋ฌธ์ œ๋ฅผ ์‚ฌ์ด์ฆˆ๊ฐ€ ์ž‘์€ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆ„๊ณ  ๋‚˜๋ˆ„์–ด์ง„ ๊ฒƒ์„ Conquer(Merge)๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค. 1๋ถ€ํ„ฐ j-1๊นŒ์ง€์˜ Sorted ๋œ SubArray๊ฐ€ ์žˆ๊ณ  j๋ฅผ ํ•˜๋‚˜๋” ์ง‘์–ด๋„ฃ์–ด์„œ ๋‹ค์‹œ j-1๊ฐœ์˜ ๋น„๊ต๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค. Divide -> Conquer -> Merge

 


Other Design paradigms
Brute force ๋ฐฉ์‹์€ ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ๋‹ค ๊ณ ๋ คํ•ด์„œ ์ง„ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ์— Paradigm์ด๋ผ๊ณ  ์–˜๊ธฐํ•˜๊ธฐ๋Š” ์‚ด์ง ์• ๋งคํ•œ ๊ฐ์ด ์žˆ๋‹ค!!!

 


Correctness, ์˜ณ์Œ์„ ํŒ๋‹จํ•˜๋Š” ๊ฒƒ์ด๊ณ  Efficiency๋Š” Time complexity์— ๋Œ€ํ•ด์„œ ์ƒ๊ฐํ•ด๋ณด๋Š” ๊ฒƒ์ด๋‹ค. Storage ๋ถ€๋ถ„๋„ ์–˜๊ธฐํ•˜๊ฒŒ ๋  ๊ฒƒ

 


Correctness
์•Œ๊ณ ๋ฆฌ์ฆ˜์ด correctํ•˜๋‹ค๋Š” ๊ฒƒ์€ ๋ชจ๋“  Input instance์— ๋Œ€ํ•ด์„œ correct output์„ ๋งŒ๋“ค๊ณ  ๋ฉˆ์ถฐ์•ผ ํ•œ๋‹ค. Halt!!) Input instance๊ฐ€ ํ•˜๋‚˜๊ฐ€ ์•„๋‹ˆ๋ผ ๊ต‰์žฅํžˆ ๋งŽ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ˆ˜ํ•™์˜ ๊ฒฝ์šฐ ๋ชจ๋“  ์ž์—ฐ์ˆ˜์— ๋Œ€ํ•ด์„œ, ๋ชจ๋“  ์ •์ˆ˜์— ๋Œ€ํ•ด์„œ ๋“ฑ๋“ฑ ์กฐ๊ฑด์ฒ˜๋Ÿผ ๋™์ผํ•˜๊ฒŒ ์ ์šฉ์ด ๋œ๋‹ค. ์ฃผ์–ด์ง„ ๋ฌธ์ œ๋ฅผ Solveํ•  ์ˆ˜ ์ž‡์–ด์•ผ ํ•œ๋‹ค.

 


Loop invariant
Insertion ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์˜ณ๋‹ค๋Š” ๊ฒƒ์„ ์ฆ๋ช…ํ•ด์•ผ ํ•œ๋‹ค. ์–ด๋–ป๊ฒŒ ์ฆ๋ช…ํ• ๊นŒ? ๊ต๊ณผ์„œ์—์„œ Loop invariant๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ’€์—ˆ๋‹ค. Incremental Approach ์ฒ˜๋Ÿผ ๋…ํŠนํ•œ ๋ฐฉ์‹์„ ์–ธ๊ธ‰ํ•˜๋Š” ๊ฒƒ์ด์ง€ ๋ชจ๋“  ์ฑ…์—์„œ ๋™์ผํ•˜๊ฒŒ ์–˜๊ธฐํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์€ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•จ. invariants๋Š” ๋ณ€ํ•˜์ง€ ์•Š์Œ์„ ์˜๋ฏธํ•˜๊ณ  loop์„ ๋Œ๋ฉด์„œ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ์„ฑ์งˆ์„ ์ด์•ผ๊ธฐ ํ•œ๋‹ค. Loop์ด ๋Œ์•„๊ฐ€๋”๋ผ๋„ ๋ฌด์—‡์ธ๊ฐ€ ๋ณ€ํ•˜์ง€๋งŒ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ์–ด๋–ค ์„ฑ์งˆ์ด ์žˆ๊ณ  ๊ทธ๊ฒƒ์„ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. condition์ด๋‚˜ relationship์ธ๋ฐ loop์ด ํ•œ๋ฒˆ ๋Œ์•„๊ฐ€๋”๋ผ๋„ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ์กฐ๊ฑด๊ณผ ๊ด€๊ณ„๋ฅผ ์ด์•ผ๊ธฐ ํ•œ๋‹ค.

 


Loop invariant
1. Initialization. ์ฒซ ๋ฒˆ์งธ loop์ด ๋Œ์•„๊ฐ€๊ธฐ ์ „์— True์˜€๋˜ ์–ด๋–ค ๊ฒƒ์„ ์ด์šฉํ•˜์ž. 
2. Maintenance
3. Termination
Loop์ด ๋Œ์•„๊ฐ€๊ธฐ ์ „, ์ค‘, ํ›„ ๋ชจ๋‘ True์ธ ๊ฒฝ์šฐ๋ฅผ ์ด์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 


Correctness of insertion sort
loop invariant. for loop์ด ๋Œ์•„๊ฐˆ ๋•Œ ๋งˆ๋‹ค 1๋ถ€ํ„ฐ j-1๊นŒ์ง€์˜ ๋ฐฐ์—ด์€ ์›๋ž˜๋ถ€ํ„ฐ sorted๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. j๊ฐ€ 2๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š”๋ฐ j๊ฐ€ 1์ผ ๋•Œ ๊ทธ ํ•˜๋‚˜๋Š” ์›๋ž˜ ๋ฐฐ์—ด์˜ Element์ด๊ณ  Sorted๋œ ์ƒํƒœ์ด๋‹ค. ๋‹ค์Œ j = 3์˜ ๊ฒฝ์šฐ j =1 , 2 ์˜ ๊ฐ’์€ Element์— ์†ํ•˜๋ฉฐ Sorted ๋ฐฐ์—ด์ด๋ผ๋Š” ์ . Initialization์ผ ๋•Œ๋Š” j = 2์ธ ๊ฒฝ์šฐ์ด๊ณ  Maintenance๋Š” informallyํ•˜๊ฒŒ ์ฆ๋ช…์ด ๋˜์—ˆ๋‹ค. ๋ฐ˜๋ณต๋ฌธ์˜ Body์— ์†ํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.  A[j-1], A[j-2], A[j-3]์œผ๋กœ ๊ณ„์† ์ด๋™ํ•ด๋‚˜๊ฐ€๋Š” ๊ทธ ๊ณผ์ •์ด๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ  Termination์€ j = n+1์ผ ๋•Œ ๋๋‚˜๊ฒŒ ๋œ๋‹ค. 1๋ฒˆ์งธ index๋ถ€ํ„ฐ n๋ฒˆ์งธ index๊นŒ์ง€ ๋ชจ๋“  ๋ฐฐ์—ด์˜ Element์ด๊ณ  Sorted ๋œ ๋ฐฐ์—ด์ด ๋งŒ์กฑ๋˜๋ฏ€๋กœ Correctnessํ•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

 

Efficiency
์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ resource, ์‹œ๊ฐ„๊ณผ ๋ฉ”๋ชจ๋ฆฌ์— ๊ด€ํ•œ ๋ฌธ์ œ๋ฅผ ๋‹ค๋ฃฌ๋‹ค. ์ฃผ๋กœ Input size์˜ function์„ ํ‘œ์‹œํ•œ๋‹ค. (n์— ๋Œ€ํ•œ ํ‘œํ˜„) ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์ด์ฆˆ๋Š” ์‹œ๊ฐ„์— ๋น„ํ•ด ์ค‘์š”ํ•˜๊ฒŒ ์—ฌ๊ฒจ์ง€์ง€ ์•Š๋Š”๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ Time๋ณด๋‹ค๋Š” ๋œ ์ค‘์š”ํ•˜๊ณ  ์ฃผ๋กœ Time์— ๋Œ€ํ•ด์„œ ์ด์•ผ๊ธฐํ•˜๊ฒŒ ๋œ๋‹ค.

 


Efficiency
์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ํ•˜๋“œ์›จ์–ด์—์„œ ๋Œ์•„๊ฐ€์•ผ ํ•˜๋Š”๋ฐ ์–ด๋–ค ํ•˜๋“œ์›จ์–ด์ธ์ง€ ๋ชจ๋ธ์— ๋Œ€ํ•ด์„œ ์•Œ์•„์•ผ ํ•œ๋‹ค. Random access machine ๋ชจ๋ธ๋กœ ์ผ๋ฐ˜์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ํ•˜๋“œ์›จ์–ด๋ฅผ ์ด์•ผ๊ธฐ ํ•œ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ RAM์€ ๋™์‹œ์— operation์ด ์ผ์–ด๋‚˜์ง€ ์•Š๊ณ  Pipeline์˜ ๋ฐฉ์‹์„ ๋”ฐ๋ฅด์ง€ ์•Š๋Š”๋‹ค. ํ•˜๋‚˜์˜ Process๊ฐ€ ์žˆ๊ณ  Memory์˜ Instance๊ฐ€ Sequentialํ•˜๊ฒŒ ์‹œํ–‰๋œ๋‹ค๋Š” ๋ง์ด๋‹ค. ์ผ๋ฐ˜์ ์ธ ์ปดํ“จํ„ฐ์˜ Instruction์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. Arith, Data move, Control Instruction๋“ค์ด ์žˆ๋Š” ๊ฒƒ ๋ฉ”๋ชจ๋ฆฌ Hierachy๋ฅผ ์ƒ๊ฐํ•˜์ง€ ์•Š๊ณ  ๊ต‰์žฅํžˆ ๋‹จ์ˆœํ•œ ๋ชจ๋ธ์—์„œ ์ž‘๋™ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ๋œ๋‹ค.

 


Efficiency
Input ์‚ฌ์ด์ฆˆ์—์„œ ์–ผ๋งˆ๋งŒํผ์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋Š”์ง€ ์ธก์ •ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค. n๊ฐœ์˜ Element๊ฐ€ ์žˆ์„ ๋•Œ sortํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋Š” ๊ฒƒ์ธ์ง€๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค. ๋‘ ๊ฐœ์˜ Integer๋ฅผ ๊ณฑํ•˜๋Š” ๊ฒฝ์šฐ,, Word๊ฐ€ ๊ต‰์žฅํžˆ ๊ธธ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด Constant time์ด ๊ฑธ๋ฆฐ๋‹ค๊ณ  ๋ณด๊ธฐ ํž˜๋“ค๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ total number of bit๋กœ ํ‘œํ˜„์„ ํ•œ๋‹ค. n bit x n bit์ผ๋•Œ๋Š” ๋‹ค๋ฅด๊ฒŒ ํ‘œํ˜„ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์œผ๋ฉด ๋œ๋‹ค. Graph์˜ ๊ฒฝ์šฐ๋Š” Vertice์™€ Edge์˜ ๊ฐœ์ˆ˜๋กœ ํ‘œํ˜„ํ•˜๋ฏ€๋กœ ํ•ด๋‹น ์ •๋ณด๊ฐ€ ์ค‘์š”ํ•˜๋‹ค. 

 


Efficiency
Primitive ํ•œ Operation๋“ค์ด ํ•„์š”ํ•˜๋‹ค. Step๋“ค์€ Machine ์— independentํ•˜๋‹ค. ๋…๋ฆฝ์ ์ด๋ผ๋Š” ๊ฒƒ. pseudocode๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๊ฐ๊ฐ์˜ line๋“ค์€ constant time์ด ๊ฑธ๋ฆฐ๋‹ค๊ณ  ๊ฐ€์ •์„ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๊ณ  ๋™์ผํ•œ ์‹œ๊ฐ„์€ ์•„๋‹ˆ๋‹ค.

 


Time complexity Analysis
Worst-case๋ฅผ ๊ฐ€์ง€๊ณ  ๋ณดํ†ต Time complexity๋ฅผ ๊ตฌํ•˜๊ฒŒ ๋œ๋‹ค. ์ตœ์•…์˜ ๊ฒฝ์šฐ ์ด ์ตœ๋Œ€ ์ด ์‹œ๊ฐ„๋งŒํผ ๊ฑธ๋ฆฐ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค . Average case์˜ ๊ฒฝ์šฐ๋„ ์˜๋ฏธ ์žˆ๋Š”๋ฐ ์ด๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ Time์— ๋Œ€ํ•œ ์„œ์ˆ ์ด๋ฏ€๋กœ ๊ณต์ •ํ•˜๊ฒŒ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค. Input์ด ํ•œ์ •๋œ ๊ฒƒ์ด ์•„๋‹ˆ๋ฏ€๋กœ ํ†ต๊ณ„ํ•™์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ๋ถ„ํฌ๊ฐ€ ๋˜์–ด์žˆ๋Š”์ง€์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. Best-case๋Š” ์˜๋ฏธ๊ฐ€ ์—†๋‹ค. Cheat์ด๋ผ๊ณ  ํ‘œํ˜„์„ ํ•œ๋‹ค. ๋ง๋กœ๋Š” ์กด์žฌํ•˜์ง€๋งŒ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ๋Š” ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค.

 


Time complexity Analysis
Worst case์˜ ๊ฒฝ์šฐ upper bound( ์ด๊ฒƒ๋ณด๋‹ค๋Š” ์˜ค๋ž˜๊ฑธ๋ฆฌ์ง€ ์•Š์–ด) ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์–ด๋–ค ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ฒฝ์šฐ worst๋งŒํผ ์•ˆ์ข‹์„ ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ. ๊ฐ๊ฐ์˜ Input์ด ํ™•๋ฅ ์ ์œผ๋กœ ์ผ์–ด๋‚  ๊ฒฝ์šฐ๋ฅผ ๊ณ ๋ คํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜ํ•™์ ์ธ ๊ณ„์‚ฐ์ด ํ•„์š”ํ•˜๊ฒŒ ๋œ๋‹ค. 

 


Analysis of insertion-sort
8๊ฐœ์˜ line์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์ž‡๊ณ  C1~C8 ๊ฐ๊ฐ์˜ ์‹œ๊ฐ„๋งŒํผ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค๊ณ  ํ•œ๋‹ค. time์€ ๋ช‡ ๋ฒˆ ์‹คํ–‰๋˜๋Š” ๊ฐ€๋ฅผ ๊ณ ๋ คํ•˜๊ฒŒ ๋œ๋‹ค. 

 


Analysis of insertion-sort
cost์™€ time์„ ๊ณฑํ•ด์„œ ๋”ํ•˜๊ฒŒ ๋œ๋‹ค. ๋ณ€์ˆ˜๋Š” tj์— ํ•ด๋‹นํ•˜๋Š”๋ฐ, Best case์˜ ๊ฒฝ์šฐ๋Š” ํ•œ ๋ฒˆ๋งŒ ๋น„๊ตํ•˜๋ฉด์„œ ๋๋‚˜๊ฒŒ ๋œ๋‹ค. ๊ฐ๊ฐ์˜ While loop์—์„œ ํ•œ ๋ฒˆ์”ฉ๋งŒ ์‹คํ–‰ํ•˜๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ฆ‰ tj = 1์ผ ๋•Œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. T(n) = O(n) Worst์˜ ๊ฒฝ์šฐ ๋น„๊ต๊ฐ€ ๋ชจ๋‘ ์ง„ํ–‰๋˜๋Š” ๊ฒฝ์šฐ์ด๋‹ค. tj = i ๊ฐ€ ๋˜๋ฏ€๋กœ n(n+1)/2์ด๋ฉด O(n^2)๊ฐ€ ๋œ๋‹ค. Average case๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ๊ตฌํ•˜๋ ค๋ฉด ์ˆ˜ํ•™์ ์ธ ์ˆ˜์‹์ด ํ•„์š”ํ•˜๋‹ค. ํ•˜์ง€๋งŒ ๋Œ€๋žต์ ์œผ๋กœ ์ƒ๊ฐํ•ด๋ณด๋ฉด n^2/2 ์˜ ๊ฒฝ์šฐ์ด๋ฏ€๋กœ ์ด ์—ญ์‹œ O(n^2)๊ฐ€ ๋œ๋‹ค. Intuition ์ง๊ด€์ ์œผ๋กœ ์‚ดํŽด๋ณผ๋•Œ ๋‚˜์˜จ ์ˆ˜์น˜์ด๋‹ค. 

 

Analysis of merge sort
master theorem, Theorem ์— 3๊ฐœ์˜ case๊ฐ€ ์กด์žฌํ•˜๊ณ  ์–ด๋Š case์— ์†ํ•˜๋Š”์ง€ ๊ตฌํ•˜๋ฉด ์‰ฝ๊ฒŒ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค. Insertion sort์™€ ๋น„๊ตํ•ด๋ณด๋ฉด
Time complexity๋Š” ๋น ๋ฅด๋‹ค. Merge๋Š” ๋ณต์žกํ•˜๊ธฐ ๋•Œ๋ฌธ์— input size๊ฐ€ ์ž‘์œผ๋ฉด insertion์ด ์ข€ ๋” ๋น ๋ฅด๋‹ค. ํ•˜์ง€๋งŒ ์ ์  ์ปค์ง€๋‹ค๋ณด๋ฉด mergesort๊ฐ€ 
ํ›จ์”ฌ ๋นจ๋ผ์ง„๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ merge๊ฐ€ insertion๋ณด๋‹ค ๋น ๋ฅด๋‹ค๊ณ  ํ•  ์ˆ˜ ์ž‡๋‹ค.

Recurrence for merge sort
4์žฅ์—์„œ ๋‹ค๋ฃฐ ๋‚ด์šฉ

Keyword
๋ฌธ์ œ๊ฐ€ ์ฃผ์–ด์ง€๋ฉด Design Paradigm์„ ๊ฒฐ์ •์„ ํ•ด์•ผ ํ•œ๋‹ค. ๊ธฐ์กด์˜ Paradigm๋งŒ์„ ์ด์šฉํ•  ํ•„์š” ์—†์ด ์ฐฝ์˜์ ์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
Data Structure๋ฅผ ์–ด๋–ค ๊ฒƒ์„ ์‚ฌ์šฉํ• ์ง€ ๊ฒฐ์ •์„ ํ•˜๊ฒŒ ๋œ๋‹ค. ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ถ„์„ํ•˜๊ธฐ ์œ„ํ•ด์„œ Correctness๋ฅผ ์ฆ๋ช…ํ•˜๊ณ  Efficiency๋ฅผ ๊ณ„์‚ฐํ•˜๊ฒŒ ๋œ๋‹ค.
worst์™€  Average๊ฐ€ ์žˆ๊ณ  Best case๋Š” ๊ณ ๋ คํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค.