TIL ๐Ÿ“

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ๊ธฐ๋ณธ์ ์ธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ž์„ธํžˆ ์ •๋ฆฌ

1. O(nlogn)์ธ ๊ฒƒ

1. ๋ณ‘ํ•ฉ ์ •๋ ฌ

๋ฐฐ์—ด์„ ์ตœ์†Œ๋‹จ์œ„๊นŒ์ง€ ๋ถ„ํ•  ํ›„, ํ•ฉ์น˜๋ฉด์„œ ์ •๋ ฌํ•˜์—ฌ ํ•˜๋‚˜์˜ ๋ฐฐ์—ด์„ ๋งŒ๋“œ๋Š” ๋ฐฉ์‹์ด๋‹ค.

ํ•ฉ์น  ๋•Œ๋Š” ๋‘ ๋ฐฐ์—ด์˜ 0๋ฒˆ์งธ ์›์†Œ๋ฅผ ๋น„๊ตํ•˜๋ฉฐ ๋” ์ž‘์€ ์›์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ๋‹ค์‹œ ๋น„๊ตํ•˜๋Š” ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

 

๋ถ„ํ•  ๊ณผ์ •์€ logN๋งŒํผ ์ผ์–ด๋‚˜๋ฉฐ, 2N์˜ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋•Œ ๋ฐฐ์—ด์ด ์•„๋‹Œ linked list๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด N์˜ ์ €์žฅ๊ณต๊ฐ„์œผ๋กœ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ธฐ์กด ์ €์žฅ๊ณต๊ฐ„์—์„œ ํฌ์ธํ„ฐ๋งŒ ๋ฐ”๊พธ๋Š” ์‹์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฐฐ์—ด์„ ์ชผ๊ฐค ๊ฒฝ์šฐ head ํฌ์ธํ„ฐ๋ฅผ ์ถ”๊ฐ€๋กœ ๋งŒ๋“ค๊ณ , ํ•ฉ๋ณ‘ ๊ณผ์ •์—์„œ๋Š” next ์ฃผ์†Œ๊ฐ’์„ ์ ์ ˆํžˆ ์„ค์ •ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

ํ•ฉ๋ณ‘์ •๋ ฌ์€ ๊ฐ™์€ ์ˆซ์ž์˜ ๊ฒฝ์šฐ ์ˆœ์„œ๊ฐ€ ๋’ค๋ฐ”๋€Œ์ง€ ์•Š๋Š” stable sort์ด๋‹ค.

 

<์ฝ”๋“œ ์ถ”๊ฐ€>

2. ํž™ ์ •๋ ฌ

์›์†Œ๋“ค์„ ํž™์— ์‚ฝ์ž…ํ•˜๋Š”๋ฐ ๊ฐ ๋…ธ๋“œ์˜ ๊ฐ’์ด ์ž์‹๋…ธ๋“œ๋ณด๋‹ค ํฐ ์ด์ง„ํŠธ๋ฆฌ๊ฐ€ ๋˜๋„๋ก ์‚ฝ์ž…ํ•œ๋‹ค. ํŠธ๋ฆฌ๋ฅผ ์™„์„ฑํ•˜๋ฉด ํŠธ๋ฆฌ ๋‚ด์—์„œ ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ๊ฐ€์ง€๋Š” ๋ฃจํŠธ๋ถ€ํ„ฐ ์ œ๊ฑฐํ•˜๋ฉฐ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰๋ถ€ํ„ฐ ์ฑ„์›Œ๋‚˜๊ฐ„๋‹ค. ์ œ๊ฑฐํ•œ ๋’ค์—๋„ ์ด์ง„ํŠธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. ์„ ํƒ์ •๋ ฌ๊ณผ ๊ฑฐ์˜ ๊ฐ™์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

 

ํž™ ์ •๋ ฌ์€ ์ถ”๊ฐ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•„์š”๋กœํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๊ฒฝ์šฐ์— ์ƒ๊ด€์—†์ด O(nlogn)์œผ๋กœ ์•ˆ์ •์ ์ธ ์„ฑ๋Šฅ์„ ๋ณด์ธ๋‹ค.

 

<์ฝ”๋“œ ์ถ”๊ฐ€>

3. ํ€ต ์ •๋ ฌ

๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ partition step, ๋กœ๋ฌดํ†  ํŒŒํ‹ฐ์…˜

์ ์ ˆํ•œ ์›์†Œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์‚ผ๊ณ (pivot) ์ด๋ณด๋‹ค ์ž‘์€ ์›์†Œ๋Š” ์™ผ์ชฝ์—, ํฐ ์›์†Œ๋Š” ์˜ค๋ฅธ์ชฝ์— ์œ„์น˜ํ•˜๋„๋ก ์ •๋ ฌํ•œ๋‹ค. ์ด ๊ณผ์ •์„ partition step์ด๋ผ๊ณ  ํ•œ๋‹ค. partition step์„ ์–ด๋–ป๊ฒŒ ํ•˜๋Š๋ƒ์— ๋”ฐ๋ผ ์„ธ๋ถ€์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋‹ค์–‘ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ดํ›„ pivot์„ ๊ธฐ์ค€์œผ๋กœ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ถ„ํ• ํ•˜๊ณ , ๋ถ„ํ• ๋œ ๋‘๊ฐœ ๋ฆฌ์ŠคํŠธ์— ๊ฐ๊ฐ ์žฌ๊ท€์ ์œผ๋กœ ์œ„ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋ฉฐ left<right๋ฅผ ๋งŒ์กฑํ•˜์ง€ ์•Š์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.

์ข‹์€ ์˜ˆ์™€ ๋‚˜์œ ์˜ˆ

ํ€ต ์ •๋ ฌ์€ ๊ฐ™์€ O(nlogn)์ธ ์ƒํ™ฉ์—์„œ ๊ฐ€์žฅ ๋น ๋ฅด๊ณ , ์ตœ์•…์˜ ๊ฒฝ์šฐ O(n²)์ด๋‹ค. ์ด๋ฏธ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์„ ์ •๋ ฌํ•  ๋•Œ๋‚˜, pivot์„ ํ•ญ์ƒ ์ฒซ๋ฒˆ์งธ ์›์†Œ๋กœ ํ•˜๋„๋ก ๊ตฌํ˜„ํ–ˆ์„ ๋•Œ๊ฐ€ ๊ทธ๋Ÿฐ ๊ฒฝ์šฐ์ด๋‹ค.

๋”ฐ๋ผ์„œ ํ€ต ์ •๋ ฌ์„ ์กฐ๊ธˆ ์ˆ˜์ •ํ•˜์—ฌ ์ตœ์•…์˜ ๊ฒฝ์šฐ๊ฐ€ ๊ฑฐ์˜ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋กํ•˜๊ณ  ๋‚˜์œ ๊ฒฝ์šฐ๋‹ค ์‹ถ์œผ๋ฉด ํž™ ์ •๋ ฌ๋กœ ์ „ํ™˜ํ•˜๋„๋ก ์ฝ”๋”ฉํ•œ๋‹ค. ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•œ ๊ฐ€์ง€๋Š” pivot์„ ๋žœ๋ค์œผ๋กœ ์žก๋Š” ๊ฒƒ์ด๋‹ค.์ด๋ ‡๊ฒŒ ํ€ต ์ •๋ ฌ์˜ ์žฌ๊ท€๊ฐ€ ์ผ์ • ๊นŠ์ด ์ด์ƒ์ด ๋˜๋ฉด ํž™ ์ •๋ ฌ์„ ์‚ฌ์šฉํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ '์ธํŠธ๋กœ ์ •๋ ฌ'์ด๋ผ๊ณ  ํ•œ๋‹ค.

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

 

<์ฝ”๋“œ ์ถ”๊ฐ€>

2. O(n²)์ธ ๊ฒƒ

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

2. ์„ ํƒ ์ •๋ ฌ

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

3. ๊ธฐํƒ€

1. ํŒ€ ์ •๋ ฌ

python์˜ sort() ํ•จ์ˆ˜, java์˜ Array.sort()

 

'์‹ค์ œ ๋ฐ์ดํ„ฐ๋Š” ๋Œ€๋ถ€๋ถ„ ์ด๋ฏธ ์ •๋ ฌ์ด ๋˜์–ด์žˆ์„ ๊ฒƒ์ด๋‹ค'๋ผ๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ์‹ค์ œ ๋ฐ์ดํ„ฐ์—์„œ ๊ณ ์„ฑ๋Šฅ์„ ๋‚ผ ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜. ๋ณ‘ํ•ฉ๊ณผ ์‚ฝ์ž… ์ •๋ ฌ์„ ์กฐํ•ฉํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ๋ณ‘ํ•ฉ ์ •๋ ฌ์€ ์›์†Œ์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ ์„ ๋•Œ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŒŒํ‹ฐ์…˜ ํฌ๊ธฐ๊ฐ€ ํŠน์ • ๊ฐ’ ์ดํ•˜(16/32)๊ฐ€ ๋˜๋ฉด ์‚ฝ์ž… ์ •๋ ฌ์„ ์‚ฌ์šฉํ•œ๋‹ค.

๋ณ‘ํ•ฉ ์ •๋ ฌ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ ์–ด๋„ O((1/2)n)์˜ ์ถ”๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜๋‹ค.

 


<์ฐธ๊ณ ์ž๋ฃŒ ๋ฐ ์ถœ์ฒ˜>

 

https://hsp1116.tistory.com/33

 

๊ธฐ๋ณธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜(Sorting Algoritm) ์š”์•ฝ ์ •๋ฆฌ (์„ ํƒ, ์‚ฝ์ž…, ๋ฒ„๋ธ”, ํ•ฉ๋ณ‘, ํ€ต) v1.1

์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ n๊ฐœ์˜ ์ˆซ์ž๊ฐ€ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ด๋ฅผ ์‚ฌ์šฉ์ž๊ฐ€ ์ง€์ •ํ•œ ๊ธฐ์ค€์— ๋งž๊ฒŒ ์ •๋ ฌํ•˜์—ฌ ์ถœ๋ ฅํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด n๊ฐœ์˜ ์ˆซ์ž๊ฐ€ ์ €์žฅ๋˜์–ด์žˆ๋Š” ๋ฐฐ์—ด์„, ์˜ค๋ฆ„์ฐจ์ˆœ์˜ ์กฐ๊ฑด์œผ๋กœ

hsp1116.tistory.com

 

https://namu.wiki/w/%EC%A0%95%EB%A0%AC%20%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98#fn-14

 

์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ - ๋‚˜๋ฌด์œ„ํ‚ค

๋Œ€๊ฐœ ๊ณ„์‚ฐ ์‹œ๊ฐ„์ด ์ •๋ ฌํ•  ์ž๋ฃŒ์˜ ์ˆ˜์˜ ์ œ๊ณฑ์— ๋น„๋ก€ํ•ด์„œ ๋Š˜์–ด๋‚œ๋‹ค. ์ฆ‰, 1๋งŒ ๊ฐœ๋ฅผ 1์ดˆ์— ์ •๋ ฌํ•˜๋ฉด 10๋งŒ ๊ฐœ๋ฅผ ์ •๋ ฌํ•˜๋Š” ๋ฐ์—๋Š” 100์ดˆ ์ •๋„๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ์นตํ…Œ์ผ ์ •๋ ฌ(cocktail sort) ์นตํ…Œ์ผ ์ •๋ ฌ์˜ ๊ณผ์ •์„

namu.wiki

 

'TIL ๐Ÿ“' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[์šด์˜์ฒด์ œ] Memory Management  (0) 2021.02.01
์ž๋ฃŒ๊ตฌ์กฐ  (0) 2021.01.14