QuickSort ๋ ผ๋ฌธ brief
Part One: Theory
์ด sorting์ ๋ ๊ฐ์ ๊ฐ๋จํ ๋ณด์กฐ๋ฌธ์ ๋ก ๋๋์ด ํด๊ฒฐ๋ ์ ์๋๋ฐ, ๊ฐ ๋ฌธ์ ๋ ์ด๋ฏธ ์๋ ค์ง ๋ฐฉ์์ผ๋ก ํ ์ ์๋ค.
Partition
: key๊ฐ์ dividing line์ ๋ฐ๋ผ ์ ์๋๋ก ๋๋์ด ์ด๋ถํ๋ ๊ฒ
์ค์ ๋ก ์ด dividing line์ ํ์น ์๊ณ , ์๋ค ํ ์ง๋ผ๋ ์ฐพ๊ธฐ ํ๋ ๋ฐ dividing line์ด ์กด์ฌํ๊ณ ๊ทธ๊ฒ์ ์์น๋ง ์๋ค๋ฉด item๋ค์ ์ฌ์ ๋ ฌํ๊ธฐ๋ ์ฌ์์ง๋ค.
partition ๊ณผ์
-
์ ๋ ฌ๋์ด์ผํ๋ ์์ดํ ์ ํค ์ค ํน์ ํค๋ฅผ ๊ณ ๋ฅธ๋ค.
์ด ํค๋ bound ๋ผ ๋ถ๋ฆฐ๋ค.
-
dividing line ์๋์๋ bound๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ key๊ฐ์ด, ์์ชฝ์๋ ํฐ key ๊ฐ์ด ์ค๊ฒ ํ๋ค.
dividing line์ ์์น๋ ๋ฏธ๋ฆฌ ์ ํ์ ์์ด ์ ๋ ฌ ๋ง์ง๋ง์ ๋๋ฌ๋ ๊ฒ์
-
๋ ๊ฐ์ ํฌ์ธํฐ (lower pointer, upper pointer)๊ฐ ๊ฐ๊ฐ ์๋ก, ์๋๋ก ์์ง์ธ๋ค.
-
๋จผ์ lower pointer๊ฐ ์๋ก(์ฃผ์๊ฐ low => high) ์์ง์ด๋ฉด์ bound๋ณด๋ค ํฐ ๊ฐ์ ์ฐพ๋๋ค.
-
์ฐพ์ผ๋ฉด upper pointer๊ฐ ์๋๋ก(์ฃผ์๊ฐ high => low) ์์ง์ด๋ฉด์ bound๋ณด๋ค ์์ ๊ฐ์ ์ฐพ๋๋ค.
-
๋ ํฌ์ธํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ๊ฐ์ ๋ฐ๊ฟ์ค๋ค.
-
lower pointer๊ฐ ๊ฐ๋ฆฌํค๋ ์ฃผ์๊ฐ upper pointer๊ฐ ๊ฐ๋ฆฌํค๋ ์ฃผ์๋ณด๋ค ๋์ ๋๊น์ง ๋ฐ๋ณตํ๋ค.
์ด ๋ ๋ ํฌ์ธํฐ์ ์ฌ์ด๊ฐ dividing line์ด๋ค.
-
๋ฌธ์
-
๋ชจ๋ key value๊ฐ ๊ฐ์ ๋
-
bound๊ฐ ์ ์ผ ์๊ฑฐ๋ ์ ์ผ ํฐ ๊ฐ์ผ๋ก ๊ฒฐ์ ๋์์ ๋
dividing line์ด section ๋ฐ์ ์์นํจ
- bound ๊ฐ์ ์ฌ๋ฐ๋ฅธ ์๋ฆฌ์ ์๋ค๊ณ ์๊ฐํ ์ ์์ผ๋ฏ๋ก, ๋๋จธ์ง ๊ฐ์ ๋ํด ์งํํ๋ฉด ๋๋ค.
dividing์ segment๊ฐ ํ๋ ๋๋ 0๊ฐ์ ์์ดํ ์ ๊ฐ์ง๊ณ ์์ ๋๊น์ง ์งํ
Quicksort
partitioning ํ์ ๋ ๊ฐ์ segment๊ฐ ๋์จ๋ค.
sort ํ๊ธฐ ์ ์กฐ๊ฑด
ํฌ๊ธฐ๊ฐ ์ ๋นํ ์ปค์ผํ๋ค.
- segment ์ค ๊ธธ์ด๊ฐ 1์ดํ์ธ ๊ฒ์ด ์์ผ๋ฉด ๋ฌด์ํ๊ณ ๋ค๋ฅธ segment๋ง ์ ๊ฒฝ ์ด๋ค.
- ์ปดํจํฐ์ ํน์ฑ์ ๋ฐ๋ผ ๋ค๋ฅด์ง๋ง ์ผ๋ฐ์ ์ผ๋ก 3~4๊ฐ์ item์ด segment์ ์์ผ๋ฉด, ์ ์ ์์ item์ ์ ๋ ฌํ๋ ๋ค๋ฅธ ์๊ณ ๋ฆฌ์ฆ์ ์ฐ๋ ๊ฒ์ด ์ข๋ค.
sorting
ํ segment๋ฅผ ๋จผ์ ์ ๋ ฌํ๋ค.
๊ทธ ๋์ ๋ค๋ฅธ segment์ ์ฒซ๋ฒ์งธ, ๋ง์ง๋ง ์์๋ ์ ์ฅ๋์ด์์ด์ผํ๋ค.
์ ์ฒด item ๊ฐฏ์๊ฐ ์ ๋ ฌ๋๊ณ ์๋ item ๊ฐฏ์์ ๋น๋กํ๊ธฐ ๋๋ฌธ
data ์ ์ฅ์ pointer๊ฐ ๊ฐ๋ฆฌํค๋ ์ฐ์์ ์ธ ๋ธ๋ก์ ์ ์ฅํ๋ nest๋ผ๋ ๋ฐฉ๋ฒ์ ์ด์ฉํ๋ค.
๊ณ์ํด์ ์ ๋ ฌํ segment๋ฅผ ์ ํํ๋ ๋์ ๋์ค์ ํ ๋ธ๋ก์ ํฐ ๊ฒ์ผ๋ก ๋จ๊ฒจ๋๋ ๊ฒ์ด ์ข๋ค.
Estimate of Time Taken
N๊ฐ์ ์์ดํ ์ segment๋ก partitioningํ๊ธฐ ์ํด ํ์ํ ๋น๊ต์ ํ์๋ bound๋ฅผ ์ ํ๋ ๋ฉ์๋์ partition ๊ณผ์ ์ ์์ฑํ๋ ๋ฉ์๋์ ๋ฌ๋ ค์๋ค. ์ด๋ค ์ผ์ด์ค ๊ฑด ๋น๊ต์ ํ์๋ N+k ํํ๋ก ๋ํ๋์ง๋๋ฐ k๋ -1,0,1,2 ์ธ ๊ฒฝ์ฐ๊ฐ ๋๋ถ๋ถ์ด๋ค.
ํค ๊ฐ์ ๋ฐ๊พธ๋ ํ์๋ ์ํฉ๋ง๋ค ๋ค์ํ๋ฏ๋ก ์์๋๋ ์์น๊ฐ ์ฃผ์ด์ ธ์ผํ๋ค.
bound ๊ฐ์ section์์ ๋๋ค์ผ๋ก ์ทจํด์ ธ์ผํจ์ด ๊ฐ์ ๋์ด์ผ ํ๋ค. ์์ฐ์ ์ผ๋ก ์ ๋ ฌ์ด ๋์ด์๋ section๋ ๋๋ค์ผ๋ก bound๋ฅผ ๊ณจ๋ผ๋ด์ ๋ฌด์์์ฑ์ด ๋ณด์ฅ๋์ด์ผํ๋ค.
bound๊ฐ segment์์ r๋ฒ์งธ๋ก ํฐ ๊ฐ์ด๋ผ๊ณ ๊ฐ์ ํ ๋, ์ฐ๋ฆฌ๋ r์ ๋ํ ํจ์๋ก ์์๊ฐ์ ๋ํ๋ผ ์ ์๋ค. ์กฐ๊ฑด๋ถ ์์ธก์ด ๊ทธ ์กฐ๊ฑด์ ํ๋ฅ ๊ณผ ๊ณฑํด์ ธ์ ๋ํด์ง๋ฉด ์ด๊ฒ์ ํ์คํ ์์ธก๊ฐ์ด ๋๋ค. ๋ชจ๋ ๋๋ค ์์ธกํด์ ์กฐ๊ฑด์ ํ๋ฅ ์ ๋๊ฐ์ด 1/N์ด๋ค. ๋ฐ๋ผ์ r๊ฐ์ ๋ํด ์ฃผ์ด์ง ์์๊ฐ์ N์ผ๋ก ๋๋์ด์ฃผ๋ฉด ์ฐ๋ฆฌ๋ ํ์คํ ์์ธก๊ฐ์ ๊ตฌํ ์ ์๋ค.
partition ๊ณผ์ ์ ๋ง์ง๋ง์์ bound๊ฐ r๋ฒ์งธ๋ก ํฐ key๊ฐ์ผ ๋, ์ด ์์ดํ ์ r๋ฒ์งธ ์๋ฆฌ๋ฅผ ์ฐจ์งํ๊ณ ์์ ๊ฒ์ด๊ณ r-1๊ฐ์ ์์ดํ ์ด ๊ทธ ์๋๋ฅผ ์ฐจ์งํ๊ณ ์์ ๊ฒ์ด๋ค. bound๋ณด๋ค ํด ํ๋ฅ ์ (N-r-1)/N์ด๊ณ ๋ฐ๋ผ์ r-1๊ฐ์ ์์ดํ ์ด ๊ฐ์ง ์์๊ฐ์ (N-r-1)(r-1)/N ์ด๋ค. ๋ชจ๋ r์ ๋ํด์ ์ด ๊ฐ์ ๋ํ๊ณ N์ผ๋ก ๋๋๋ฉด N/6+5/(6N) ์ด๋ค.
์ด๋ฌํ ํํ๋ก ๋ํ๋ด๋ฉด ํญ์ partitioning์ ํ์ํ ์๊ฐ์ aN + b + c/N ์ ๊ผด๋ก ํญ์ ๋ํ๋ผ ์ ์๋ค. (a,b,c๋ ๋ฃจํ ํ์์ ๋ฐ๋ผ ๊ฒฐ์ ๋๋ค.)
์ต์ข ์
๊ฒฐ๊ตญ ์ฒ์์ ํ๋์ r๊ฐ์ bound๊ฐ์ผ๋ก ์ง์ ํ์๋ค๋ฉด, N๊ฐ์ ์์ดํ ์ ์ ๋ ฌํ๋ ์๊ฐ์ N๊ฐ์ ์์ดํ ์ partitioningํ๋ ์๊ฐ + r-1๊ฐ์ ๋ ์์ ์์ดํ ์ ์ ๋ ฌํ๋ ์๊ฐ + N-r-1๊ฐ์ ๋ ํฐ ์์ดํ ์ ์ ๋ ฌํ๋ ์๊ฐ์ด๋ค. ๋ฐ๋ผ์ ์์ผ๋ก ๋ํ๋ด๋ฉด
Tn = Tr + Tn-r + aN + b + c/N ์ด๋ค.
๋ฐ๋ผ์ ์ด ์์ ๋ชจ๋ ๊ฐ๋ฅํ r์ ๋ํ์ฌ N์ผ๋ก ๋๋ ํ ๋ํ๋ฉด
์ด๋ฌํ ์์ด ๋์จ๋ค. (M์ bound๊น์ง์ ๊ฐฏ์)(?)
ํ๋น์ฑ ์ฆ๋ช
์ด ํด๊ฒฐ์ฑ ์ ํ๋น์ฑ์ ํด๋น ์์ด ์๋ ์๊ณผ ์ผ์นํ๋์ง ํ๋จํจ์ผ๋ก์จ ์ป์ด์ง๋ค. ๊ฐ ๊ณ์๋ค์ ๋ฐ๋ก ์๊ฐํ ์ ์์ผ๋ฏ๋ก ๋จผ์ a์ ํ๋น์ฑ์ ๋ํด ์์๋ณด์.
*a์ ํ๋น์ฑ
Wn์
์ด๋ผ ํํํ๊ณ Vn์ Tn์์ a์ ๊ณ์๋ก ์๊ฐํ์ ๋,
Vn
๋ก ๋ํ๋ผ ์ ์๋ค.
M์ด 2์ด๊ณ a=1, b=c=T1 =0์ด๋ผ๊ณ ๊ฐ์ ํ์ ๋, N์ด ๊ต์ฅํ ํฌ๋ฉด ๊ฐ์ฅ ํฐ ํญ์ ์ ์ธํ๊ณ ๋ ๋ฌด์ํ ์ ์์ผ๋ฏ๋ก ๋น๊ต์ ํ์๋
๋ก ๋ํ๋ผ ์ ์๋ค.
์ ์ฒด entropy๊ฐ logN!์ผ ๋, binary ๋น๊ตํ๋ entropy๊ฐ log 2์ด๊ธฐ ๋๋ฌธ์ ๋น๊ตํ์์ ์ต์ ํ์๋
์ด๋ฌํ๋ค.
Quick sort์ ๋น๊ต ํ๊ท ํ์๋ 2ln2~1.4๋ผ๋ factor์ ์ํด ์ด๋ก ์ ์ธ ์ต์ ํ์๋ณด๋ค ํฌ๋ฉฐ ์ด factor๋ bound์ ์ ํ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ ์๋ค.
ํฉ๋ณ ์ ๋ ฌ๊ณผ์ ๋น๊ต
Part Two: ์คํ
Quick sort๋ ์ฌ๋ฌ๊ฐ์ง ๋ณ์์ ์ํด ์ ์ฐํ๊ฒ ๋ณต์ก๋๊ฐ ๋ณํ๋ค.
- ์ปดํจํฐ์ ํน์ฑ
- a,b,c,M(๊ณ์)์ ๊ฐ
partition without exchange
bound์ ๊ฐ์ ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ์ฅํด๋๊ณ , ๋ฎ์ ์ชฝ์ pointer๋ ์ฌ๋ผ์ค๋ฉด์ bound๋ณด๋ค ํฐ ๊ฐ์ ๋ฐ๊ฒฌํ๋ฉด ๋์ ์ชฝ์ pointer๊ฐ ๊ฐ๋ฆฌํค๊ณ ์๋ ์์น๋ก ๋ณต์ฌํ๊ณ ๋์ ์ชฝ์ pointer๋ ๋ด๋ ค์ค๋ฉด์ bound๋ณด๋ค ์์ ๊ฐ์ ๋ฐ๊ฒฌํ๋ฉด ๋ฎ์ ์ชฝ์ pointer๊ฐ ๊ฐ๋ฆฌํค๊ณ ์๋ ์์น๋ก ๋ณต์ฌํ๋ค.
์ด ๊ณผ์ ์ ๋ pointer๊ฐ ๊ฐ์ ์์ดํ ์ ๊ฐ๋ฆฌํฌ ๋๊น์ง ์งํ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ์ฅํด๋๋ bound ๊ฐ์ ๊ทธ ์์น์ ์ ์ฅํ๋ค.
์ด copy ๊ณผ์ ์ ํ์๋ exchange ํ์์ ์ ํํ 2๋ฐฐ์ด๋ค.
Cyclic Exchange
ํ๋ฒ์ ๊ตํ์ ๋ง์ ๊ณผ์ ์ ์ํํ๋ ๊ฒ์ด ๋ ๊ฒฝ์ ์ ์ด๋ค. ์ฝ๊ณ ๊ตํํ๊ณ ์ฐ๋ 3N์ ๊ณผ์ ์ด N๋ฒ์ exchange ๋์ ์ํ๋๋ค. ์ด ๊ณผ์ ์ด ํ๋ฒ์ ์ํ๋๋ค๋ฉด ํ๋ฒ ์ฝ๊ณ ํ๋ฒ ์ฐ๋ฉฐ 2N-1๋ฒ ๊ตํํ๋ฉด ๋ ๊ฒ์ด๋ค. ์ด๋ฌํ ๊ณผ์ ์ ๋ค์ํ ๋จ์ด๊ฐ ์ฃผ์ด์ก์ ๋, N-fold ๊ณผ์ ์ ์ํํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค.
key ๋น๊ต ๋ฃจํ์ ์ต์ ํ
๋๋ถ๋ถ์ ์ ๋ ฌ ๋ฐฉ๋ฒ์์ ํฌ์ธํฐ๊ฐ ๊ฐ๋ฅํ ๋ฒ์๋ด์ ์๋ ํ ์คํธํ๋ ๊ณผ์ ์ ๋งค์๊ฐ ํ์ํ๋ค. ํ์ง๋ง Quick sort๋ ์ด๋ฌํ ๊ณผ์ ์ด ํ์์๋ค. ํฌ์ธํฐ๋ ๊ฐ๊ฐ ๊ฒฝ๊ณ๋ฒ์์์ ์์๋๋ฉฐ cross ๋๋ ์๊ฐ ๋๋๊ธฐ ๋๋ฌธ์ ๋ฒ์๋ฅผ ๋ฒ์ด๋ ์ผ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค.
bound๊ฐ ๊ฐ์ฅ ์์ ๊ฐ์ด๊ฑฐ๋ ๊ฐ์ฅ ํฐ ๊ฐ์ผ๋๋ ๋ง์ฐฌ๊ฐ์ง์ด๋ค. ์๋ pointer๊ฐ ๋ฉ์ถฐ์ค ๊ฒ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
Multi-word ํค
ํ๋์ ํค ๊ฐ์ด ์ปดํจํฐ๊ฐ ํ๋ฒ์ ์ ์ฅํ ์ ์๋ ๋ฒ์๋ฅผ ๋์ผ๋ฉด ๋น๊ตํ๋๋ฐ์ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฐ๋ค. ๊ฑฐ์ ๋ค ์ ๋ ฌ๋์ด์๋ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์์ ๋ ์ด ๋ฌธ์ ๋ ์ฌ๊ฐํด์ง๋ค. (๋น๊ต์ ํ์๊ฐ ๋ง๊ธฐ ๋๋ฌธ์)
๋ฐ๋ผ์ ํค ๊ฐ ์ค ์ค์ง ํ๋๋ง ์ ํ์ฌ ๋น๊ตํ๋ ์์ผ๋ก ์งํํ๋ค. ๋ฎ์ ์ชฝ์ ํฌ์ธํฐ๊ฐ bound์ ํค ๊ฐ์ด ๊ฐ์ ์์๋ฅผ ๋ง๋๋ฉด ๋ฉ์ถ๊ฒ ๋์ํ์ฌ bound์ ํค ๊ฐ์ด ๊ฐ์ ๊ฒ๋ค์ ๋ชจ๋ bound ์์ชฝ์ ์์นํ๊ฒ ํ๋ค.
Multilevel Storage
ํต ์ํธ๋ ์ฌ๋ฌ ๋ ๋ฒจ์ ๋ฉ๋ชจ๋ฆฌ(๋ง๊ทธ๋คํฑ ๋์คํฌ, ๋๋ผ์ back store)๊ฐ ์๋ ๊ธฐ๊ธฐ์ ์ ํฉํ๋ค. backing store์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋์ด์์ผ๋ฉด ํผ์ ธ์๋ ๋ฐ์ดํฐ๋ฅผ random ์ ๊ทผํ๋ ๊ฒ๋ณด๋ค ๋ ๋น ๋ฅด๋ค. ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ backing store ์ฌ์ด์๋ง ์ ๋ณด๊ฐ ์ค๊ฐ ์ ์๋ค๋ฉด ์ ๋ณด๋ฅผ ์ฐพ๋ ๋ฐ ๋๋ ์๊ฐ์ ๋ ๋ฏธ๋ฏธํด์ง๊ฒ์ด๋ค.
๋ง๊ทธ๋คํฑ ํ ์ดํ ์ ์ฅ๋ฐฉ์์์๋ ์ด๋ฌํ ์ด์ ์ด ์ ์ฉ๋์ง ์๋๋ค.
๊ฒฐ๋ก
ํต์ํธ๋ ์ปดํจํฐ์ ๋ฌด์์์ ์ ๊ทผ ์ ์ฅ์ ์ ํฉํ ์ ๋ ฌ๋ฐฉ์์ด๋ค. ํฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ง๊ทธ๋คํฑ ๋๋ผ์ด๋ ๋์คํฌ์ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๋ ์์คํ ์์ ์ ํฉํ๋ค. ๋น๊ต ๋ฃจํ์ ํ์๋ ์ด๋ก ์ ๊ฐ์ฅ ์ ์ ํ์์ ๊ฐ๊น์ฐ๋ฉฐ, ๋น ๋ฅด๊ฒ ์ํ๋๋ค. ๋ฐ์ดํฐ์ ์ด๋์ ํฉ๋ฆฌ์ ์ ๋ฒ์ ๋ด์์ ์ด๋ฃจ์ด์ง๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋๋ค ์ ๊ทผ ๋ฐฉ์์ ๊ฐ์ง๊ณ ์๋ ์ปดํจํฐ์์ ์ถ์ฒ๋๋ค.ใด
Comment