dev_sia 2022. 11. 4. 16:05
  • ์–ด๋–ค ๋ฌธ์ œ ํ•ด๊ฒฐ์„ ์œ„ํ•ด ์—ฌ๋Ÿฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•  ๋•Œ๋Š”, ๋ชจ๋“  ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๊ณ ๋ คํ•˜๋Š” ๋Šฅ๋ ฅ์ด ํ•„์š”ํ•˜๋‹ค.

1. ์‚ฝ์ž… ์ •๋ ฌ

  • ๋ฒ„๋ธ” ์ •๋ ฌ๊ณผ ์„ ํƒ ์ •๋ ฌ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(N^2)์œผ๋กœ ๊ฐ™์ง€๋งŒ ์‹ค์ œ ์‹คํ–‰๋˜๋Š” ๋‹จ๊ณ„ ์ˆ˜๋Š” ์„ ํƒ ์ •๋ ฌ์ด ๋‘ ๋ฐฐ ์ ๋‹ค. ์ฆ‰, ๋‘ ๋ฐฐ ๋น ๋ฅด๋‹ค.
  • 6์žฅ์—์„œ๋Š” ์‚ฝ์ž… ์ •๋ ฌ์— ๋Œ€ํ•ด ๋ฐฐ์šฐ๋ฉด์„œ ์ตœ์•…์˜ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋ถ„์„ํ•˜๋Š” ๊ฒƒ์— ์–ด๋–ค ์žฅ์ ์ด ์žˆ๋Š”์ง€ ์•Œ์•„๋ณธ๋‹ค.
  • ์‚ฝ์ž… ์ •๋ ฌ์˜ ์ˆ˜ํ–‰ ์ˆœ์„œ
    1. ์ฒซ ๋ฒˆ์งธ pass through์—์„œ ๋‘ ๋ฒˆ์งธ ์…€์˜ ๊ฐ’์„ ์‚ญ์ œํ•˜๊ณ  ์ด ๊ฐ’์„ ์ž„์‹œ ๋ณ€์ˆ˜์— ์ €์žฅํ•œ๋‹ค. ์‚ญ์ œํ•œ ๊ณต๊ฐ„์€ ๊ณต๋ฐฑ์œผ๋กœ ๋‚จ๋Š”๋‹ค.
    2. ๊ณต๋ฐฑ ๊ธฐ์ค€ ์™ผ์ชฝ์˜ ๊ฐ’๊ณผ ์ฐจ๋ก€๋Œ€๋กœ ๋น„๊ตํ•˜์—ฌ ์˜ฌ๋ฐ”๋ฅธ ์œ„์น˜์— ์ž„์‹œ ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์‚ฝ์ž…ํ•œ๋‹ค.
    3. ๋‘ ๋ฒˆ์งธ pass through๋Š” ์„ธ ๋ฒˆ์งธ ์…€์˜ ๊ฐ’์„ ์‚ญ์ œํ•˜๊ณ , ์œ„์˜ pass through๋ฅผ ๋ฐ˜๋ณตํ•œ๋‹ค.

2. ์‚ฝ์ž… ์ •๋ ฌ ๊ตฌํ˜„

fun main() {
	insertionSort(arrayOf(10, 9, 4, 6, 7, 8, 3, 2, 11, 1)).forEach { print("$it ") }
}

fun insertionSort(arr: Array<Int>): Array<Int> {
	for (i in 1 until arr.size) {
		var temp_value = arr[i]
		var position = i - 1
		while (position >= 0) {
			if (arr[position] > temp_value) {
				arr[position + 1] = arr[position]
				position--
			} else break
		}

		arr[position + 1] = temp_value
	}
	
	return arr
}

3. ์‚ฝ์ž… ์ •๋ ฌ์˜ ํšจ์œจ์„ฑ

  • ์‚ฝ์ž… ์ •๋ ฌ์— ํฌํ•จ๋œ ๋‹จ๊ณ„๋Š” ์‚ญ์ œ, ๋น„๊ต, ์‹œํ”„ํŠธ, ์‚ฝ์ž… ๋„ค ์ข…๋ฅ˜์ด๋‹ค.
  • ๋น„๊ต๋Š” 1 + 2 + 3 + … + N - 1๋ฒˆ ์ผ์–ด๋‚œ๋‹ค.
  • ์‹œํ”„ํŠธ๋Š” ๊ฐ’์„ ํ•œ ์…€ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์˜ฎ๊ธธ ๋•Œ๋งˆ๋‹ค ์ผ์–ด๋‚œ๋‹ค.
    • ๋ฐฐ์—ด์ด ์—ญ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ๋‹ค๋ฉด(์ตœ์•…์˜ ๊ฒฝ์šฐ) ๋น„๊ต๊ฐ€ ์ผ์–ด๋‚  ๋•Œ๋งˆ๋‹ค ๊ฐ’์„ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์‹œํ”„ํŠธํ•ด์•ผ ํ•œ๋‹ค.
    • ์ฆ‰, ๋น„๊ต ํšŸ์ˆ˜๋งŒํผ ์‹œํ”„ํŠธ๊ฐ€ ์ผ์–ด๋‚œ๋‹ค.
  • ๋ฐฐ์—ด๋กœ๋ถ€ํ„ฐ temp_value๋ฅผ ์‚ญ์ œํ•˜๊ณ  ๋‹ค์‹œ ์‚ฝ์ž…ํ•˜๋Š” ์ž‘์—…์€ pass through๋‹น ํ•œ ๋ฒˆ์”ฉ ์ผ์–ด๋‚œ๋‹ค.
  • pass through๋Š” ํ•ญ์ƒ N - 1๋ฒˆ์ด๋ฏ€๋กœ ๊ฒฐ๊ตญ N - 1๋ฒˆ์˜ ์‚ญ์ œ์™€ N - 1๋ฒˆ์˜ ์‚ฝ์ž…์ด ์ผ์–ด๋‚  ๊ฒƒ์ด๋‹ค.
  • ์ฆ‰, O(N^2 + N)์ด๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜ ๋น… ์˜ค ํ‘œ๊ธฐ๋ฒ•์€ ๊ฐ€์žฅ ๋†’์€ ์ฐจ์ˆ˜์˜ N๋งŒ ๊ณ ๋ คํ•œ๋‹ค.
  • O(N^2 + N) → O(N^2)
  • ๋ฒ„๋ธ” ์ •๋ ฌ์€ ์„ ํƒ ์ •๋ ฌ๋ณด๋‹ค ๋‘ ๋ฐฐ ๋А๋ฆฌ๊ณ , ์‚ฝ์ž… ์ •๋ ฌ์€ ๋ฒ„๋ธ” ์ •๋ ฌ๋ณด๋‹ค + N๋งŒํผ์˜ ๋‹จ๊ณ„๊ฐ€ ๋” ์กด์žฌํ•œ๋‹ค.
  • ๊ทธ๋ ‡๋‹ค๋ฉด ์ •๋ ฌ ์†๋„๋Š” ํ•ญ์ƒ ์‚ฝ์ž… ์ •๋ ฌ > ๋ฒ„๋ธ” ์ •๋ ฌ > ์„ ํƒ ์ •๋ ฌ ์ˆœ์ผ๊นŒ?

4. ํ‰๊ท ์ ์ธ ๊ฒฝ์šฐ

  • ์ตœ์•…์˜ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ๋Š” ์„ ํƒ ์ •๋ ฌ์ด ์‚ฝ์ž… ์ •๋ ฌ๋ณด๋‹ค ๋น ๋ฅด๋‹ค.
  • ๋ชจ๋“  ์‹œ๋‚˜๋ฆฌ์˜ค ๊ด€์ ์—์„œ ์‚ฝ์ž… ์ •๋ ฌ์˜ ํšจ์œจ์„ฑ์„ ๊ฒ€ํ† ํ•ด ๋ณด์ž.
  • ์ตœ์•…์˜ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๊ตํ•˜๊ณ  ์‹œํ”„ํŠธํ•˜๊ณ , ์ตœ์„ ์˜ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ๋Š” ์–ด๋–ค ๋ฐ์ดํ„ฐ๋„ ์‹œํ”„ํŠธํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ํ‰๊ท  ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ๋Š” ๋Œ€์ฒด์ ์œผ๋กœ ๋ฐ์ดํ„ฐ์˜ ๋ฐ˜์„ ๋น„๊ตํ•˜๊ณ  ์‹œํ”„ํŠธํ•  ๊ฒƒ์ด๋‹ค.
  • ์ฆ‰, N^2 / 2 ๋‹จ๊ณ„๊ฐ€ ๊ฑธ๋ฆฐ๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜ ๋น… ์˜ค ๊ด€์ ์—์„œ๋Š” ๋‘ ์‹œ๋‚˜๋ฆฌ์˜ค ๋ชจ๋‘ O(N^2)์ด๋‹ค.
  • ์‚ฝ์ž… ์ •๋ ฌ์€ ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋”ฐ๋ผ ์„ฑ๋Šฅ์ด ํฌ๊ฒŒ ์ขŒ์šฐ๋œ๋‹ค.
    • ์ตœ์•…: O(N^2)
    • ์ตœ์„ : O(N)
    • ํ‰๊ท : O(N^2 / 2)
  • ์„ ํƒ ์ •๋ ฌ์€ ์ตœ์•…๋ถ€ํ„ฐ ํ‰๊ท , ์ตœ์„ ์˜ ์‹œ๋‚˜๋ฆฌ์˜ค ๋ชจ๋‘ N^2 / 2๋‹จ๊ณ„๊ฐ€ ๊ฑธ๋ฆฐ๋‹ค.

6. ๋งˆ๋ฌด๋ฆฌ

  • ์ตœ์„ , ํ‰๊ท , ์ตœ์•…์˜ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ๋Šฅ๋ ฅ์€ ๊ธฐ์กด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ตœ์ ํ™”ํ•ด์„œ ํ›จ์”ฌ ๋น ๋ฅด๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ๋งŒํผ์ด๋‚˜ ์‚ฌ์šฉ์ž ์š”๊ตฌ์— ๋งž๋Š” ์ตœ์ ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ณ ๋ฅด๋Š” ํ•ต์‹ฌ ๊ธฐ์ˆ ์ด๋‹ค.
  • ์ตœ์•…์˜ ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์€ ํ‰๊ท ์ ์ธ ๊ฒฝ์šฐ๊ฐ€ ์ผ์–ด๋‚œ๋‹ค๋Š” ๊ฒƒ์„ ๋ช…์‹ฌํ•˜์ž.

 

- 7์žฅ์€ ์—ฌ๋Ÿฌ ์ฝ”๋“œ์˜ ์˜ˆ์‹œ๋กœ, ๋ธ”๋กœ๊ทธ ํฌ์ŠคํŒ…์€ ์Šคํ‚ตํ•œ๋‹ค.