deo2kim
๋งž์™œํ‹€
deo2kim
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ
    • CS
      • Algorithm
      • Data Structure
      • Network
      • DB
      • OS
    • Algorithm Problem
      • Python
      • JavaScript
    • Programming language
      • Python
      • JavaScript
    • Tool
      • Jquery
      • React
    • ๊ฐœ๋ฐœ
    • Infra

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

๋ฐ˜์‘ํ˜•
hELLO ยท Designed By ์ •์ƒ์šฐ.
deo2kim

๋งž์™œํ‹€

๋ณ‘ํ•ฉ ์ •๋ ฌ(merge sort)
CS/Algorithm

๋ณ‘ํ•ฉ ์ •๋ ฌ(merge sort)

2020. 9. 25. 20:48
๋ฐ˜์‘ํ˜•

๐Ÿ“” ๋ณ‘ํ•ฉ ์ •๋ ฌ(merge sort) ์ด๋ž€

  • ๋ถ„ํ• ์ •๋ณต์„ ํ™œ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(nlogn) ํ€ต์ •๋ ฌ๊ณผ ๋น„์Šท
  • ๋ถ„ํ• ์ •๋ณต: ๋ฌธ์ œ๋ฅผ ์ž‘์€ 2๊ฐœ์˜ ๋ฌธ์ œ๋กœ ๋ถ„๋ฆฌํ•˜๊ณ  ๊ฐ๊ฐ ํ•ด๊ฒฐํ•œ ํ›„, ๋‹ค์‹œ ๋ชจ์•„ ์›๋ž˜์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•.
    ๋ณดํ†ต ์žฌ๊ท€ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ์ด์šฉํ•˜์—ฌ ๊ตฌํ•œ๋‹ค.

  • ํ€ต์ •๋ ฌ๊ณผ ๋‹ค๋ฅธ ์ ์ด ์žˆ๋‹ค๋ฉด ํ€ต์ •๋ ฌ์˜ ๊ฒฝ์šฐ pivot๊ฐ’์— ๋”ฐ๋ผ ํŽธํ–ฅ๋˜๊ฒŒ ๋ถ„ํ•  ๋  ์ˆ˜ ์žˆ๋Š” ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์•…์˜ ๊ฒฝ์šฐ O(n^2)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ณ‘ํ•ฉ์ •๋ ฌ์˜ ๊ฒฝ์šฐ ์ •ํ™•ํžˆ ๋ฐ˜์”ฉ ๋‚˜๋ˆˆ๋‹ค๋Š” ์ ์—์„œ ์ตœ์•…์˜ ๊ฒฝ์šฐ์—๋„ O(nlogn)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๋ณด์žฅํ•œ๋‹ค.
  • ๋งŒ์•ฝ 8๊ฐœ์˜ ์ˆซ์ž๋ฅผ ์ •๋ ฌํ•œ๋‹ค๊ณ  ํ•˜์ž. 8์—์„œ 4๋กœ ๋‚˜๋ˆ„๊ณ , 4์—์„œ 2๋กœ ๋‚˜๋ˆ„๊ณ , 2์—์„œ 1๋กœ ๋‚˜๋ˆˆ๋‹ค. ์ฆ‰ 3๋ฒˆ ๋‚˜๋ˆด๋‹ค.
    ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์€ 3 = log8 ์ด๋ฏ€๋กœ logn์ด๋‹ค.
    ๋‚˜๋ˆˆ ์ˆซ์ž์˜ ๋Œ€์†Œ๋ฅผ ๋น„๊ตํ•˜๋Š” ๊ฒƒ: [1,3], [2,4] ๋ฅผ ์ •๋ ฌํ•ด๋ณด๋ฉด
    1: 1 ์ด 2๋ณด๋‹ค ์ž‘์œผ๋ฏ€๋กœ [1]
    2: 2๊ฐ€ 3๋ณด๋‹ค ์ž‘์œผ๋ฏ€๋กœ [1,2]
    3: 3์ด 4๋ณด๋‹ค ์ž‘์œผ๋ฏ€๋กœ [1,2,3]
    4: ๋งˆ์ง€๋ง‰ ๋‚จ์€ ๊ฒƒ [1,2,3,4]
    4๋ฒˆ ์—ฐ์‚ฐํ–ˆ๋‹ค. N๋งŒํผ ์—ฐ์‚ฐ
    ๊ทธ๋ž˜์„œ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” n*logn
  • ๋น„๊ต ์ •๋ ฌ ( ๋‹ค๋ฅธ ์›์†Œ์™€์˜ ๋น„๊ต )
  • ์ˆœ์ฐจ์ ์ธ ๋น„๊ต๋ฅผ ํ†ตํ•ด ์ •๋ ฌ์„ ์ง„ํ–‰ํ•˜๋ฏ€๋กœ LinkedList๋ฅผ ์ •๋ ฌํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋ฉด ํšจ์œจ์ ์ด๋‹ค.
    (LinkedList๋Š” ์‚ฝ์ž… ์‚ญ์ œ ์—ฐ์‚ฐ์—์„œ ์œ ์šฉํ•˜์ง€๋งŒ ์ ‘๊ทผ ์—ฐ์‚ฐ์—์„œ๋Š” ๋น„ํšจ์œจ์ ์ด๋ฏ€๋กœ)

 

๐Ÿ“” ๋ณ‘ํ•ฉ ์ •๋ ฌ(merge sort) ์˜ˆ์ œ

  • ๋ถ„ํ• ์ •๋ณต(divide and conquer)๋ฅผ ์ด์šฉ - ์žฌ๊ท€ํ•จ์ˆ˜๋กœ ๊ตฌํ˜„
  • ๋จผ์ € ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ˜์”ฉ ์ชผ๊ฐ ๋‹ค . ๋” ์ด์ƒ ์ชผ๊ฐค ์ˆ˜ ์—†์„ ๋•Œ ๊นŒ์ง€ ๋ถ„ํ• 
  • ๋‹ค์‹œ ๋ณ‘ํ•ฉํ•˜๋ฉด์„œ ์ •๋ ฌํ•ด ๋‚˜์•„๊ฐ„๋‹ค.

๋ถ„ํ•  ๊ณผ์ •

  • ํ•ฉ์น˜๋Š” ๋ฐฉ๋ฒ•์€ ๊ฐ€์žฅ ์™ผ์ชฝ ๋งจ์•„๋ž˜๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค.

๐Ÿ“” ๋ณ‘ํ•ฉ ์ •๋ ฌ(merge sort) ๊ตฌํ˜„

def merge_sort(div_numbers):
    if len(div_numbers) > 1:
        print(f'์ชผ๊ฐœ๊ธฐ: {div_numbers}')
        mid = len(div_numbers) // 2
        left_numbers = merge_sort(div_numbers[:mid])
        right_numbers = merge_sort(div_numbers[mid:])

        i, j, k = 0, 0, 0  # ์™ผ์ชฝ๋ฆฌ์ŠคํŠธ ์ธ๋ฑ์Šค, ์˜ค๋ฅธ์ชฝ ๋ฆฌ์ŠคํŠธ ์ธ๋ฑ์Šค, ํ†ตํ•ฉ๋ฆฌ์ŠคํŠธ์ธ๋ฑ์Šค
        while i < len(left_numbers) and j < len(right_numbers):
            if left_numbers[i] < right_numbers[j]:
                div_numbers[k] = left_numbers[i]
                i += 1
            else:
                div_numbers[k] = right_numbers[j]
                j += 1
            k += 1

        # ๋‘˜์ค‘ ํ•œ์ชฝ์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋‹ค ์ผ์Œ
        while i < len(left_numbers):
            div_numbers[k] = left_numbers[i]
            i += 1
            k += 1
        while j < len(right_numbers):
            div_numbers[k] = right_numbers[j]
            j += 1
            k += 1
    print(f'ํ•ฉ์น˜๊ธฐ: {div_numbers}')
    return div_numbers


numbers = [4, 2, 8, 6, 0, 5, 1, 7, 3, 9]
print(f'์ •๋ ฌ ์ „: {numbers}')
print()
merge_sort(numbers)
print()
print(f'์ •๋ ฌ ํ›„: {numbers}')

 

๐Ÿ“” ๋ณ‘ํ•ฉ ์ •๋ ฌ(merge sort) ํŠน์ง•

  • ์žฅ์ 
    • ์ตœ์•…์˜ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(nlogn)์ด๋‹ค.
    • ํฐ ๋ฐ์ดํ„ฐ์…‹์—์„œ ๋งค์šฐ ํšจ์œจ์ ์ด๋‹ค.
    • ์•ˆ์ • ์ •๋ ฌ
  • ๋‹จ์ 
    • ์ถ”๊ฐ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. (์ •๋ ฌํ•  ๋ฐฐ์—ด์„ ์ž„์‹œ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•˜๋ฏ€๋กœ)

๐Ÿ“” ๋ณ‘ํ•ฉ ์ •๋ ฌ(merge sort) ์ฐธ๊ต์ž๋ฃŒ

 

๋ฐ˜์‘ํ˜•
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'CS > Algorithm' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(Breath First Search, BFS)  (0) 2020.09.27
๊ณ„์ˆ˜ ์ •๋ ฌ(counting sort)  (0) 2020.09.26
ํ€ต ์ •๋ ฌ(quick sort)  (1) 2020.09.24
์‚ฝ์ž… ์ •๋ ฌ(insertion sort)  (0) 2020.09.23
์„ ํƒ ์ •๋ ฌ(selection sort)  (0) 2020.09.22
    'CS/Algorithm' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(Breath First Search, BFS)
    • ๊ณ„์ˆ˜ ์ •๋ ฌ(counting sort)
    • ํ€ต ์ •๋ ฌ(quick sort)
    • ์‚ฝ์ž… ์ •๋ ฌ(insertion sort)
    deo2kim
    deo2kim
    ์ฝ”๋”ฉ ๊ธฐ๋กํ•˜๊ธฐ

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”