๐Ÿ“ algorithm

[Algorithm] ๋ณ‘ํ•ฉ์ •๋ ฌ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž !! ๐Ÿ˜Ž

c0zi 2024. 3. 21. 14:26

โ—พ ๋ณ‘ํ•ฉ์ •๋ ฌ

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

 

๋ถ„ํ•  ์ •๋ณต ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ™œ์šฉํ•ด ๋ฌธ์ œ ํ•ด๊ฒฐ
  • ์ž๋ฃŒ๋ฅผ ์ตœ์†Œ ๋‹จ์œ„ ๋ฌธ์ œ๊นŒ์ง€ ๋‚˜๋ˆˆ ํ›„ ์ฐจ๋ก€๋Œ€๋กœ ์ •๋ ฌํ•ด ๊ฒฐ๊ณผ๋ฅผ ์–ป์Œ
  • top-down
  • ์•ˆ์ • ์ •๋ ฌ
๋”๋ณด๊ธฐ

๋ถ„ํ•  ์ •๋ณต ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด๋ž€ ???
 > ๋ฌธ์ œ๋ฅผ ๋” ์ž‘์€ 2๊ฐœ์˜ ๋ฌธ์ œ๋กœ ๋ถ„๋ฆฌํ•˜๊ณ  ๊ฐ๊ฐ์„ ํ•ด๊ฒฐํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ์•„์„œ ์›๋ž˜์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์ „๋žต

 

์‹œ๊ฐ„ ๋ณต์žก๋„
  • O(n log n)

 

๋ณ‘ํ•ฉ ์ •๋ ฌ ๊ณผ์ •

 

์ดํ•ด๋ฅผ ๋•๊ธฐ ์œ„ํ•ด ์‚ฌ์ง„์œผ๋กœ ๋จผ์ € ์ •๋ฆฌํ•˜์ž๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

 

์ด๋ฏธ์ง€ ์ถœ์ฒ˜ : https://st-lab.tistory.com/233

 

๋ณ‘ํ•ฉํ•˜๋Š” ๊ณผ์ •์ด ํ—ท๊ฐˆ๋ ธ๋Š”๋ฐ, ์œ„์˜ ์ด๋ฏธ์ง€๋ฅผ ๋ณด๊ณ  ์ดํ•ดํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

 

  • ํ•˜๋‚˜์˜ ํฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋‘ ๊ฐœ์˜ ๊ท ๋“ฑํ•œ ํฌ๊ธฐ๋กœ ๋ถ„ํ• ํ•˜๊ณ  ๋ถ„ํ• ๋œ ๋ถ€๋ถ„ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ •๋ ฌํ•œ ๋‹ค์Œ, ๋‘ ๊ฐœ์˜ ์ •๋ ฌ๋œ ๋ถ€๋ถ„ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ•ฉํ•˜์—ฌ ์ „์ฒด๊ฐ€ ์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋˜๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
  • ์ด๋Ÿฌํ•œ ๋ณ‘ํ•ฉ ์ •๋ ฌ์€ ํฌ๊ฒŒ ๋‘๊ฐ€์ง€ ๋‹จ๊ณ„๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค.
    1. ๋ถ„ํ•  : ์ „์ฒด ์ž๋ฃŒ ์ง‘ํ•ฉ์— ๋Œ€ํ•ด ์ตœ์†Œ ํฌ๊ธฐ์˜ ๋ถ€๋ถ„ ์ง‘ํ•ฉ์ด ๋  ๋•Œ๊นŒ์ง€ ๊ฐ™์€ ํฌ๊ธฐ์˜ 2๊ฐœ์˜ ๋ถ€๋ถ„ ๋ฐฐ์—ด๋กœ ๋ถ„ํ• 
    2. ๋ณ‘ํ•ฉ : 2๊ฐœ์˜ ๋ถ€๋ถ„ ์ง‘ํ•ฉ์„ ์ •๋ ฌํ•˜๋ฉด์„œ ํ•˜๋‚˜์˜ ์ง‘ํ•ฉ์œผ๋กœ ๋ณ‘ํ•ฉ

 

โ—พ ๋ณ‘ํ•ฉ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜

์ˆ˜๋„ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ดํ•ดํ•œ ํ›„์— JAVA๋กœ ๊ตฌํ˜„ํ•ด ๋ณด๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค !

 

// 1. ๋ถ„ํ• 
mergeSort(arr[], left, right) {
	IF left < right :
    	mid = (left + right) / 2
        mergeSort(arr, left, mid)
        mergeSort(arr, mid + 1, right)
        merge(arr, left, mid, right)
}

// 2. ๋ณ‘ํ•ฉ
merge(arr[], left, mid, right) {
	L = left, R = mid + 1, idx = left
    
    WHILE L <= mid && R <= right {
    	IF arr[L] <= arr[R] :
        	sortedArr[idx++] = arr[L++]
        ELSE
        	sortedArr[idx++] = arr[R++]
    }
    
    IF L <= mid {
    	FOR i IN L TO mid :
        	sortedArr[idx++] = arr[i]
    } ELSE {
    	FOR j IN R TO right :
        	sortedArr[idx++] = arr[j]
    }
    
    FOR i IN left TO right
    	arr[i] = sortedArr[i]
}