Hello Ocean! ๐ŸŒผ

[CS/์•Œ๊ณ ๋ฆฌ์ฆ˜] ๊ฑฐ์˜ ์ •๋ ฌ๋œ List์—์„œ ์–ด๋–ค ์ •๋ ฌ์ด ๊ฐ€์žฅ ํšจ์œจ์ ์ผ๊นŒ? ๋ณธ๋ฌธ

Algorithm

[CS/์•Œ๊ณ ๋ฆฌ์ฆ˜] ๊ฑฐ์˜ ์ •๋ ฌ๋œ List์—์„œ ์–ด๋–ค ์ •๋ ฌ์ด ๊ฐ€์žฅ ํšจ์œจ์ ์ผ๊นŒ?

bba_dda 2021. 10. 9. 14:52
๋ฐ˜์‘ํ˜•

์š”์•ฝ

์‚ฝ์ž…์ •๋ ฌ์ด ๋ฏธ๋ฆฌ ์ •๋ ฌ๋˜์–ด์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ ๊ฐ€์žฅ ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ๊ฐ€์ง„๋‹ค.

 

์™œ?

๋ฒ„๋ธ”์ •๋ ฌ์€ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(N^2)์ด๊ณ ,

ํ€ต, ๋จธ์ง€์†ŒํŠธ๋Š” ๋ถ„ํ• -์ •๋ณต ๊ณผ์ •์„ ๊ฑฐ์น˜๊ธฐ ๋•Œ๋ฌธ์— ๋Š๋ฆฌ๋‹ค.

์‰˜ ์ •๋ ฌ์€ ๊ฐ„๊ฒฉ์ด k๋ผ๊ณ  ํ–ˆ์„ ๋•Œ, k๊ฐ€ 1์ด๋  ๋•Œ ๊นŒ์ง€ ์ค„์ด๋ฉด์„œ ๋ฐ˜๋ณตํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ด๋ฏธ ์ •๋ ฌ๋œ ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ๋Š” ์‚ฝ์ž…์ •๋ ฌ๋ณด๋‹ค ๋น ๋ฅด์ง€ ์•Š๋‹ค.

 

** ์ด์ง„ ์‚ฝ์ž… ์ •๋ ฌ์ด ์ผ๋ฐ˜์ ์ธ ์‚ฝ์ž…์ •๋ ฌ๋ณด๋‹ค ๋” ๋น ๋ฅด๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์žˆ๋‹ค.
list๋‚ด์—์„œ ์–ด๋–ค ์›์†Œ์˜ ์œ„์น˜๋ฅผ ์ฐพ์„ ๋•Œ, ์‚ฝ์ž…์ •๋ ฌ์€ 1~n๋ฒˆ์งธ ์›์†Œ๋ฅผ ๋ชจ๋‘ ๋Œ์•„๊ฐ€๋ฉด์„œ ๋ณด์ง€๋งŒ,
์ด์ง„ ์‚ฝ์ž…์ •๋ ฌ์€ ์ด ๊ณผ์ •์„ ์ด์ง„ํƒ์ƒ‰์œผ๋กœ ์ง„ํ–‰ํ•ด์„œ O(logN)์˜ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

** ์–ธ์–ด๋ณ„ ๊ธฐ๋ณธ ์ œ๊ณต sorting ์•Œ๊ณ ๋ฆฌ์ฆ˜
Java : Tim Sort, dual pivot quicksort
Python : Tim Sort
C++ : Quick Sort ๋ณ€ํ˜•

 

 

** ๊ฐ ์ •๋ ฌ ๋ฐฉ์‹์€ ์–ด๋–ค ์ƒํ™ฉ์— ์ ํ•ฉํ• ๊นŒ? (๋‡Œํ”ผ์…œ)
๋ฒ„๋ธ” : ๊ฑฐ์˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ
์‚ฝ์ž… : ๊ฑฐ์˜ ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” list์— ๋Œ€ํ•ด ์‚ฌ์šฉ
ํ•ฉ๋ณ‘ : ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ์— O(NlogN)์˜ ๊ท ์ผํ•œ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ, ์ •๋ ฌ์— ํ•„์š”ํ•œ ์ถ”๊ฐ€ ๊ณต๊ฐ„์„ ๊ฐ๋‹นํ•  ์ˆ˜ ์žˆ์„ ๋•Œ
ํ€ต : ํ‰๊ท ์ ์ธ ์ƒํ™ฉ์—์„œ ์ตœ๊ณ ์˜ ์ •๋ ฌ
์‰˜ : ์ •๋ ฌ ์ค‘๊ฐ„ ๊ณผ์ •์—์„œ๋„ ๊ฐ ์›์†Œ๋“ค์ด ๋Œ€๋žต์ ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” ์ƒํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์—, ๋Œ€๋žต์ ์ธ ์œ„์น˜๋งŒ์„ ๋น ๋ฅด๊ฒŒ ์•Œ๊ณ ์‹ถ์„ ๋•Œ ์‚ฌ์šฉ
ํž™ : ํž™์„ ๋งŒ๋“œ๋Š” ์ถ”๊ฐ€ ๊ณต๊ฐ„์ด ์žˆ์œผ๋ฉฐ, ์ตœ์†Ÿ๊ฐ’, ์ตœ๋Œ“๊ฐ’์—์„œ ๊ฐ€๊นŒ์šด ๊ฐ’์„ ์ฐพ๊ณ ์‹ถ์„ ๋•Œ ๋‹ค๋ฅธ ์ •๋ ฌ์—๋น„ํ•ด ๋น ๋ฅผ ๊ฒƒ ๊ฐ™๋‹ค.
๊ธฐ์ˆ˜ : ๊ธฐ์ˆ˜ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์ถ”๊ฐ€ ๊ณต๊ฐ„์ด ์žˆ์œผ๋ฉฐ, ์‹ค์ˆ˜๋ณด๋‹ค๋Š” ์ •์ˆ˜๋“ค์„ ๋น ๋ฅด๊ฒŒ ์ •๋ ฌํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์œ ์šฉ

 

  1. Bubble Sort ๋ฒ„๋ธ”์ •๋ ฌ

์„œ๋กœ ์ธ์ ‘ํ•œ ์›์†Œ๋ฅผ ์ฐจ๋ก€๋กœ ๊ฒ€์‚ฌํ•ด ๋‚˜๊ฐ€๋ฉด์„œ ์ˆœ์„œ๋ฅผ ๋ฐ”๊พธ๋ฉด์„œ ์ •๋ ฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

1,2 / 2,3 / 3,4 ... n-1,n ์ˆœ์œผ๋กœ ๋น„๊ตํ•˜๊ณ  ๋‹ค์‹œ 2,3/3,4/... ์ˆœ์œผ๋กœ ๋น„๊ตํ•ด๋‚˜๊ฐ€๋Š” ๋ฐฉ์‹์ด๋‹ค.

ํ•œ ๋ฒˆ ๋ฐ˜๋ณตํ•  ๋•Œ ๋งˆ๋‹ค ๋งˆ์ง€๋ง‰ ํ•œ๊ฐœ๊ฐ€ ์ •๋ ฌ๋œ๋‹ค.

์†์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋น„ํšจ์œจ์ ์ธ ๋ฐฉ์‹์ด๋‹ค

SWAP์ด MOVE๋ณด๋‹ค ๋” ๋ณต์žกํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฑฐ์˜ ์“ฐ์ด์ง€ ์•Š๋Š”๋‹ค.

์‹œ๊ฐ„๋ณต์žก๋„ : O(N^2)

 

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

k๋ฒˆ์งธ ์›์†Œ๋ฅผ 1~k-1๋ฒˆ์งธ์˜ ์ˆซ์ž๋“ค๊ณผ ๋น„๊ตํ•ด ์ ์ ˆํ•œ ์œ„์น˜์— ๋ผ์›Œ ๋„ฃ๊ณ , ๊ทธ ๋’ค์˜ ์ž๋ฃŒ๋ฅผ ํ•œ ์นธ์”ฉ ๋’ค๋กœ ๋ฐ€์–ด๋‚ด๋Š” ๋ฐฉ์‹์ด๋‹ค.

์ž๋ฃŒ๊ตฌ์กฐ์— ๋”ฐ๋ผ ๋’ค๋กœ ๋ฐ€์–ด๋‚ด๋Š” ๊ณผ์ •์— ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ๋‹ค.

์—ญ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ์„ ๊ฒฝ์šฐ์— ์‹œ๊ฐ„์ด ๋งค์šฐ ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค.

๋ฐ˜๋ฉด์— ์ด๋ฏธ ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์— ํ•˜๋‚˜์”ฉ ์‚ฝ์ž…/์‚ญ์ œํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ตœ๊ณ ์˜ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋œ๋‹ค.

์‹œ๊ฐ„๋ณต์žก๋„ : ์ตœ์„ O(N) / ํ‰๊ท ,์ตœ์•…O(N^2)

  • ๋ฒˆ์™ธ ) ์ด์ง„ ์‚ฝ์ž… ์ •๋ ฌ
    • ์ƒˆ๋กœ์šด ์›์†Œ๊ฐ€ ์œ„์น˜ํ•  ๊ณณ์„ ์ด์ง„ ํƒ์ƒ‰์œผ๋กœ ์ฐพ๋Š” ๋ฐฉ์‹
    • ์‚ฝ์ž…๋ฐฉ์‹์—์„œ๋Š” ์›์†Œ๊ฐ€ ์œ„์น˜ํ•  ๊ณณ์„ ์ฐพ๋Š”๋ฐ O(N)์ด ๊ฑธ๋ฆฐ๋‹ค๋ฉด, ์ด์ง„ ์‚ฝ์ž… ์ •๋ ฌ์„ ํ†ตํ•ด O(logN) ์ˆ˜์ค€์œผ๋กœ ์ค„์—ฌ์„œ ์กฐ๊ธˆ ๋” ๋น ๋ฅด๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

  1. Merge Sort ํ•ฉ๋ณ‘์ •๋ ฌ (๋ณ‘ํ•ฉ ๋ฐฉ์‹)

์—ฌ๋Ÿฌ๊ฐœ์˜ ์ •๋ ฌ๋œ ์ง‘ํ•ฉ์„ ๋ณ‘ํ•ฉํ•˜์—ฌ ํ•˜๋‚˜์˜ ์ •๋ ฌ๋œ ์ง‘ํ•ฉ์œผ๋กœ ๋งŒ๋“œ๋Š” ๋ฐฉ์‹์ด๋‹ค.

๊ณต๊ฐ„๋ณต์žก๋„ : ์ •๋ ฌํ•  ์›์†Œ๋ฅผ ์ €์žฅํ•  2n๊ฐœ์˜ ์ถ”๊ฐ€ ๊ณต๊ฐ„ ํ•„์š”

์‹œ๊ฐ„๋ณต์žก๋„ : O(nlogn)

 

  1. Quick Sort ํ€ต์ •๋ ฌ (๊ตํ™˜ ๋ฐฉ์‹)

ํ‰๊ท ์ ์ธ ์ƒํ™ฉ์—์„œ ์ตœ๊ณ ์˜ ์ •๋ ฌ์ด๋‹ค.

๊ฑฐ์˜ ๋ชจ๋“  ์–ธ์–ด์—์„œ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ์ •๋ ฌ ํ•จ์ˆ˜๋Š” ํ€ต์ •๋ ฌ ํ˜น์€ ์ด๋ฅผ ๋ณ€ํ˜•ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•œ๋‹ค.

์ ์ ˆํ•œ ์›์†Œ๋ฅผ ํ”ผ๋ด‡์œผ๋กœ ์ •ํ•ด์„œ, ํ”ผ๋ด‡๋ณด๋‹ค ์ž‘์€ ๊ฒƒ์„ ์•ž์œผ๋กœ, ํฐ ๊ฒƒ์„ ๋’ค๋กœ ๋ณด๋‚ธ ํ›„ ๋‹ค์‹œ ๊ฐ๊ฐ์—์„œ ํ”ผ๋ฒ—์„ ์ •ํ•ด์„œ ๊ณต๊ฐ„์˜ ํฌ๊ธฐ๊ฐ€ 0์ด๋‚˜ 1์ด ๋  ๋•Œ ๊นŒ์ง€ ์ˆ˜ํ–‰ํ•œ๋‹ค.

์‹œ๊ฐ„๋ณต์žก๋„ : O(nlogn) / ์ตœ์•… O(n^2)

๋จธ์ง€ ํ€ต ๋ชจ๋‘ ๋ถ„ํ• ์ •๋ณต ๋ฐฉ์‹์ด๋‹ค.

 

  1. Shell Sort ์‰˜์ •๋ ฌ

์—ญ์ˆœ์— ๊ฐ€๊นŒ์šธ์ˆ˜๋ก ์ตœ์•…์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๋ณด์ด๋Š” ์‚ฝ์ž…์ •๋ ฌ์˜ ํŠน์ง•์„ ๋ณด์™„ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

์ด์ „์˜ ์›์†Œ๋ฅผ ๋ชจ๋‘ ๋น„๊ตํ•˜๊ณ  ๊ตํ™˜ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ผ์ • ๊ฐ„๊ฒฉ ์ฃผ๊ธฐ๋กœ ๋„์—„๋„์—„ ๊ฒ€์‚ฌํ•˜๋ฉฐ์„œ ๊ตํ™˜ํ•˜๋ฉด์„œ ํƒ€๊ฒŸ ์›์†Œ์˜ ์œ„์น˜๋ฅผ ๋Œ€๋žต์ ์œผ๋กœ ์žก์•„์ฃผ๋Š” ๋ฐฉ์‹์ด๋‹ค.

์ด '๊ฐ„๊ฒฉ'์„ ์ค„์ด๋ฉด์„œ ์ •๋ ฌํ•ด๋‚˜๊ฐ€๋‹ค๋ณด๋ฉด ์ •๋ ฌ๊ธฐ์ค€์— ๊ฐ€๊นŒ์›Œ์ง€๊ฒŒ ๋˜๋ฉฐ, ์ตœ์ข…์ ์œผ๋กœ ๊ฐ„๊ฒฉ์ด 1์ผ ๋•Œ ๊นŒ์ง€ ์ง„ํ–‰ํ•œ๋‹ค๋ฉด ์ •๋ ฌ์ด ์™„๋ฃŒ๋œ๋‹ค.

์‹œ๊ฐ„ ๋ณต์žก๋„ : O(N^(1.5))

์‚ฝ์ž…์ •๋ ฌ์„ ์ด์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์‚ฝ์ž…์ •๋ ฌ๊ณผ ๋™์ผํ•œ ๋ณต์žก๋„O(N^2)๋ฅผ ๊ฐ€์ง€์ง€๋งŒ, ์‹คํ—˜๊ฒฐ๊ณผ ์‰˜ ์ •๋ ฌ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(N^(1.5))๋ฅผ ๋”ฐ๋ฅธ๋‹ค๊ณ  ํ•œ๋‹ค.

 

img

์‚ฌ์ง„ ์ถœ์ฒ˜

 

  1. Heap Sort ํž™์ •๋ ฌ

Heap ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•ด ์ •๋ ฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

Heap : ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ์˜ ์ผ์ข…์ด๋ฉฐ, ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์œ„ํ•ด์„œ ๋งŒ๋“ค์–ด์ง„ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ์ตœ๋Œ“๊ฐ’/์ตœ์†Ÿ๊ฐ’์„ ์‰ฝ๊ฒŒ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๋‹ค

img

์‚ฌ์ง„ ์ถœ์ฒ˜

๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ : ์ตœ๋Œ€ํž™, ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ : ์ตœ์†Œํž™ ์„ ๋งŒ๋“ค์–ด ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค.

์ •๋ ฌํ•ด์•ผํ•  ์š”์†Œ๋“ค๋กœ ํž™์„ ๋งŒ๋“  ๋’ค, ํž™์—์„œ ์š”์†Œ๋ฅผ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด์„œ ๋ฐฐ์—ด์— ์ˆœ์„œ๋Œ€๋กœ ์ €์žฅํ•˜๋ฉด ๋œ๋‹ค.

 

  1. Radix Sort ๊ธฐ์ˆ˜์ •๋ ฌ

์ˆซ์ž๋“ค์„ ๋‚ฎ์€ ์ž๋ฆฌ์ˆ˜(์ผ์˜ ์ž๋ฆฌ)๋ถ€ํ„ฐ ๋น„๊ตํ•ด์„œ ์ •๋ ฌํ•ด๋‚˜๊ฐ€๋Š” ๋ฐฉ์‹์ด๋‹ค.

์‹œ๊ฐ„๋ณต์žก๋„๋Š” ๋‚ฎ์ง€๋งŒ, ๊ธฐ์ˆ˜ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๊ณต๊ฐ„์ด ์ถ”๊ฐ€๋กœ ํ•„์š”ํ•˜๋‹ค.

์‹œ๊ฐ„๋ณต์žก๋„ : O(dn) d: ์ˆซ์ž์˜ ์ž๋ฆฌ ์ˆ˜

์ž์„ธํ•œ ๋‚ด์šฉ : https://lktprogrammer.tistory.com/48

๋ฐ˜์‘ํ˜•