๊ด€๋ฆฌ ๋ฉ”๋‰ด

JiYoung Dev ๐Ÿ–ฅ

[ํŒŒ์ด์ฌ] ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํŒจ๋Ÿฌ๋‹ค์ž„ : Divide and Conquer (ํ•ฉ๋ณ‘ ์ •๋ ฌ, ํ€ต ์ •๋ ฌ) ๋ณธ๋ฌธ

python

[ํŒŒ์ด์ฌ] ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํŒจ๋Ÿฌ๋‹ค์ž„ : Divide and Conquer (ํ•ฉ๋ณ‘ ์ •๋ ฌ, ํ€ต ์ •๋ ฌ)

Shinjio 2023. 2. 26. 18:49

2023.02.25 ~ 2023.02.26 ์ฝ”๋“œ์ž‡ ํ•™์Šต๋‚ด์šฉ

 

๐Ÿ”Ž Divide and Conquer ๋ถ„ํ•  ์ •๋ณต

๋ถ„ํ•  ์ •๋ณต ์•Œ๊ณ ๋ฆฌ์ฆ˜(Divide and Conquer algorithm)์€ ๊ทธ๋Œ€๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†๋Š” ๋ฌธ์ œ๋ฅผ ์ž‘์€ ๋ฌธ์ œ๋กœ ๋ถ„ํ• ํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜. ํ€ต ์ •๋ ฌ์ด๋‚˜ ํ•ฉ๋ณ‘ ์ •๋ ฌ๋กœ ๋Œ€ํ‘œ๋˜๋Š” ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ์™€ ์ด์ง„ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜, ํ–‰๋ ฌ ๊ณฑ์…ˆ ๋“ฑ์ด ๋ถ„ํ•  ์ •๋ณต ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉ

 

๋ถ„ํ•  ์ •๋ณต ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ณดํ†ต ์žฌ๊ท€ ํ•จ์ˆ˜(recursive function)๋ฅผ ํ†ตํ•ด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๊ตฌํ˜„๋จ. ๋”ฐ๋ผ์„œ ๋ถ„ํ•  ์ •๋ณต์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์žฌ๊ท€ ๊ฐœ๋…์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ์šฐ์„ ํ•จ. 

 

function F(x) : 
    # base case
    if F(x)์˜ ๋ฌธ์ œ๊ฐ€ ๊ฐ„๋‹จ:
        return F(x)์„ ์ง์ ‘ ๊ณ„์‚ฐํ•œ ๊ฐ’ 

    # ์žฌ๊ท€ํ•จ์ˆ˜
    x๋ฅผ y1๊ณผ y2๋กœ ๋ถ„ํ• 
    F(y1)๊ณผ F(y2)๋ฅผ ํ˜ธ์ถœ
    return F(y1), F(y2)๋กœ๋ถ€ํ„ฐ F(x)๋ฅผ ๊ตฌํ•œ ๊ฐ’

 

์œ„์™€ ๊ฐ™์ด ๊ธฐ์กด ๋ฌธ์ œ๋ฅผ ์ž‘์€ ๋ถ€๋ถ„ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆ„์–ด ๊ฐ ๋ถ€๋ถ„ ๋ฌธ์ œ๋ฅผ ํ’€๊ณ  ๋ถ€๋ถ„ ๋ฌธ์ œ์˜ ์†”๋ฃจ์…˜์„ ์ด์šฉํ•ด ๊ธฐ์กด์˜ ํฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ์‹

 

Divide and Conquer 3 steps
1. Divide
๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์‰ฝ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ๋” ์ž‘์€ ๋ถ€๋ถ„ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆ”.
์ด ๋‹จ๊ณ„๋Š” ๋ถ€๋ถ„ ๋ฌธ์ œ๊ฐ€ ์ง์ ‘ ํ•ด๊ฒฐ์ด ๊ฐ€๋Šฅํ•  ๋•Œ๊นŒ์ง€(base case) ์ถฉ๋ถ„ํžˆ ์ž‘๊ฒŒ ์žฌ๊ท€์ ์œผ๋กœ ํ–‰ํ•ด์ง 

2. Conquer
๋ถ€๋ถ„ ๋ฌธ์ œ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ํ‘ธ๋Š” ๋‹จ๊ณ„.
์ด ๋‹จ๊ณ„์—์„œ๋Š” ๋ฌธ์ œ์— ๋”ฐ๋ผ ๋ณ‘๋ ฌ ํ˜น์€ ์ˆœ์ฐจ์ ์œผ๋กœ ์ˆ˜ํ–‰

3. Combine
์›๋ž˜์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ถ€๋ถ„ ๋ฌธ์ œ์˜ ํ•ด๊ฒฐ์ฑ…์„ ๊ฒฐํ•ฉํ•˜๋Š” ๋‹จ๊ณ„

 

๋ถ„ํ•  ์ •๋ณต ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ข…์ข… ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„ ๋ณต์žก์„ฑ์„ ์ง€์ˆ˜์—์„œ ๋‹คํ•ญ์‹, ๋กœ๊ทธ ๋˜๋Š” ์„ ํ˜• ์‹œ๊ฐ„ ๋ณต์žก์„ฑ์œผ๋กœ ์ค„์ด๊ธฐ ๋•Œ๋ฌธ์— ํšจ์œจ์„ฑ์„ ์ƒ๋‹นํžˆ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Œ. ๊ทธ๋Ÿฌ๋‚˜ ํ•˜์œ„ ๋ฌธ์ œ์™€ ํ•ด๊ฒฐ์ฑ…์„ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Œ.

 

๐Ÿ“– Divide and Conquer ๋ฌธ์ œ

โš™ start ๋ถ€ํ„ฐ end๊นŒ์ง€์˜ ํ•ฉ ๊ตฌํ•˜๊ธฐ

โ‘  ๋ฌธ์ œ๋ฅผ ์ตœ๋Œ€ํ•œ ์ž‘๊ฒŒ ์ชผ๊ฐœ์–ด base case๋ฅผ ๊ตฌํ•œ๋‹ค. 

โ‘ก ๋ฌธ์ œ๋ฅผ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค : start๋ถ€ํ„ฐ end๊นŒ์ง€์˜ ํ•ฉ = start๋ถ€ํ„ฐ mid๊นŒ์ง€์˜ ํ•ฉ + (mid+1)๋ถ€ํ„ฐ end๊นŒ์ง€์˜ ํ•ฉ

โ‘ข ๋ถ€๋ถ„ ๋ฌธ์ œ๋ฅผ ํ’€๊ณ  ๋ถ€๋ถ„ ๋ฌธ์ œ์˜ ํ•ฉ์„ ์„œ๋กœ ๋”ํ•œ๋‹ค. (์žฌ๊ท€ํ•จ์ˆ˜ : ์ž๊ธฐ ์ž์‹ ์„ ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜)

 

๐Ÿ“– ํ•ฉ๋ณ‘ ์ •๋ ฌ (Merge Sort)

1945๋…„ ์กด ํฐ ๋…ธ์ด๋งŒ์— ์˜ํ•ด ๊ฐœ๋ฐœ๋œ ํ•ฉ๋ณ‘ ์ •๋ ฌ์€ O(n log n) ๋น„๊ต ๊ธฐ๋ฐ˜ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋ถ„ํ•  ์ •๋ณต ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํ•˜๋‚˜.

ํ•ฉ๋ณ‘ ์ •๋ ฌ์—์„œ ๊ถ๊ทน์ ์ธ ๋ชฉํ‘œ๋Š” ์ „์ฒด ๋ฆฌ์ŠคํŠธ๋ฅผ ์ •๋ ฌํ•˜๋Š” ๊ฒƒ. ํ•˜์œ„ ๋ฌธ์ œ๋Š” ํ•˜์œ„ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ •๋ ฌํ•˜๋Š” ๊ฒƒ. 

 

โ–ผโ–ผ ํ•ฉ๋ณ‘ ์ •๋ ฌ ์ „๊ฐœ ๊ณผ์ • โ–ผโ–ผ

 

์ถœ์ฒ˜ : ์นธ ์•„์นด๋ฐ๋ฏธ

 

ํ•ฉ๋ณ‘ ์ •๋ ฌ ์ž‘๋™ ๋ฐฉ์‹
1. base case (ํƒˆ์ถœ ์กฐ๊ฑด)
๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๊ฐ€ 1 ์ดํ•˜์ด๋ฉด ์ด๋ฏธ ์ •๋ ฌ๋œ ๊ฒƒ์œผ๋กœ ๋ด„

2. Divide
์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ ˆ๋ฐ˜์œผ๋กœ ์ž˜๋ผ ๋น„์Šทํ•œ ํฌ๊ธฐ์˜ ๋‘ ๋ถ€๋ถ„ ๋ฆฌ์ŠคํŠธ๋กœ ๋‚˜๋ˆ”
3. Conquer
๊ฐ ๋ถ€๋ถ„ ๋ฆฌ์ŠคํŠธ๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ํ•ฉ๋ณ‘ ์ •๋ ฌ์„ ์ด์šฉํ•ด ์ •๋ ฌ
4. Combine
๋‘ ๋ถ€๋ถ„ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋‹ค์‹œ ํ•˜๋‚˜์˜ ์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ๋กœ ํ•ฉ๋ณ‘ 

 

โš™ Combine์„ ์œ„ํ•œ merge ํ•จ์ˆ˜ ์ž‘์„ฑํ•˜๊ธฐ

๋‘ ๊ฐœ์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ •๋ ฌ๋œ ํ•˜๋‚˜์˜ ๋ฆฌ์ŠคํŠธ๋กœ ํ•ฉ์น˜๋Š” ํ•จ์ˆ˜

ํ•ฉ๋ณ‘ ์ •๋ ฌ์—์„œ combine์— ํ•ด๋‹น

โ‘  ๋‘ ๊ฐœ์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌํ•  ๋นˆ ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ (merged_list)

โ‘ก ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ list1๊ณผ list2์˜ ๊ฐ’์„ ํ•˜๋‚˜์”ฉ ๋น„๊ตํ•˜๋ฉด์„œ ํ™•์ธ

     → list1[i] ์™€ list2[j]์˜ ๊ฐ’์„ ๋น„๊ตํ•˜์—ฌ ๋” ์ž‘์€ ๊ฐ’์„ merged-list์— ์ถ”๊ฐ€ํ•˜๊ณ , ์ถ”๊ฐ€๋œ list๋Š” ๋‹ค์Œ ์ธ๋ฑ์Šค๋กœ ๋„˜์–ด๊ฐ

โ‘ข ๋งŒ์•ฝ, list1์ด๋‚˜ list2์—์„œ ์ •๋ ฌ์„ ๋‹คํ•˜์—ฌ i(j) == len(list1(2))๊ฐ€ ๋˜๋ฉด ์•„์ง ์ •๋ ฌ์ด ๋˜์ง€ ์•Š์€ list๋ฅผ merged_list์— ์ถ”๊ฐ€

โ‘ฃ merged_list ๋ฆฌํ„ด

 

ํ•ฉ๋ณ‘ ์ •๋ ฌ์—์„œ๋Š” ์œ„์™€ ๊ฐ™์ด combine์—์„œ ๋งŽ์€ ์ผ์„ ์ˆ˜ํ–‰


โ–ผโ–ผโ–ผ merge ํ•จ์ˆ˜ ์‹คํ–‰ ๊ณผ์ • โ–ผโ–ผโ–ผ

 

โš™ ํ•ฉ๋ณ‘ ์ •๋ ฌ ํ•จ์ˆ˜ merge_sort ์ž‘์„ฑํ•˜๊ธฐ

โ‘  base case ํƒˆ์ถœ ์กฐ๊ฑด ์ž‘์„ฑ : my_list์˜ ๊ธธ์ด๊ฐ€ 1 ์ดํ•˜์ด๋ฉด ์ด๋ฏธ ์ •๋ ฌ๋œ ๊ฒƒ์œผ๋กœ ๋ณด์•„ my_list ๋ฆฌํ„ด

โ‘ก my_list๋Š” 2๊ฐœ์˜ ๋ฆฌ์ŠคํŠธ๋กœ divide 

โ‘ข ์žฌ๊ท€ ํ•จ์ˆ˜์™€ merge ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ๋ถ€๋ถ„ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ•˜๋‚˜์˜ ์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ๋กœ ํ•ฉ๋ณ‘

 

๐Ÿ“– ํ€ต์ •๋ ฌ (Quicksort)

combine ๋‹จ๊ณ„์—์„œ ๋งŽ์€ ์ผ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•ฉ๋ณ‘ ์ •๋ ฌ๊ณผ ๋‹ฌ๋ฆฌ ํ€ต ์ •๋ ฌ์—์„œ๋Š” pivot๊ณผ partition์„ ์‚ฌ์šฉํ•˜๋ฉฐ divide์—์„œ ๋งŽ์€ ์ผ์„ ์ˆ˜ํ–‰

ํ€ต ์ •๋ ฌ์—์„œ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋‚˜๋ˆ„๋Š” ๊ณผ์ •(divide)์„ partition์ด๋ผ๊ณ  ํ•จ

 

โš™ ํ€ต ์ •๋ ฌ์„ ์œ„ํ•œ partition(divide) ํ•จ์ˆ˜ ์ž‘์„ฑํ•˜๊ธฐ

partition์˜ 2๋‹จ๊ณ„

โ‘  ๋ฆฌ์ŠคํŠธ์—์„œ pivot ์ฆ‰, ๊ธฐ์ค€์  ์ •ํ•˜๊ธฐ (๋ณดํ†ต ์ฒซ ๋ฒˆ์งธ ํ˜น์€ ๋งˆ์ง€๋ง‰ ๊ฐ’์„ pivot์œผ๋กœ ์„ค์ •)

โ‘ก pivot์„ ๊ธฐ์ค€์œผ๋กœ ๊ฐ’๋“ค์„ ์ƒˆ๋กญ๊ฒŒ ๋ฐฐ์น˜ : pivot ๋ณด๋‹ค ์ž‘์€ ๊ฐ’์€ ์™ผ์ชฝ์œผ๋กœ, ํฐ ๊ฐ’์€ ์˜ค๋ฅธ์ชฝ์— ๋ฐฐ์น˜

 

partition ์ž‘๋™ ๋ฐฉ์‹
def partition(my_list, start, end) :

    # pivot ๊ธฐ์ค€์  : ๊ธฐ์ค€์  pivot์„ ๋งˆ์ง€๋ง‰ ๊ฐ’์œผ๋กœ ์„ค์ •
    p = end
    # big ๊ทธ๋ฃน์ด ์‹œ์ž‘๋˜๋Š” ๋ถ€๋ถ„ (pivot ๋ณด๋‹ค ํฐ ๊ฐ’)
    b = start    # ๋งจ ์ฒ˜์Œ ์ธ๋ฑ์Šค์—์„œ ์‹œ์ž‘
    # unknown(์•„์ง pivot๊ณผ ๋น„๊ตํ•˜์ง€ ์•Š์€ ๋ถ€๋ถ„)์˜ ์‹œ์ž‘์ 
    i = start    # ๋งจ ์ฒ˜์Œ ์ธ๋ฑ์Šค์—์„œ ์‹œ์ž‘
        if list[i] > p:
            big ๊ทธ๋ฃน์— ์†ํ•จ
            i += 1
        else: 
            small ๊ทธ๋ฃน์— ์†ํ•จ → b์˜ ์‹œ์ž‘์ ๊ณผ i์˜ ์œ„์น˜๋ฅผ ๋ฐ”๊ฟˆ 
            i += 1, b += 1
    # i๊ฐ€ pivot ์œ„์น˜๊นŒ์ง€ ์˜ค๋ฉด
       i์˜ ์œ„์น˜์™€ b์˜ ์œ„์น˜๋ฅผ ๋ฐ”๊ฟˆ

 

โ–ผโ–ผโ–ผ partition ํ•จ์ˆ˜ ์ •์˜ โ–ผโ–ผโ–ผ

 

โ–ผโ–ผโ–ผ ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ โ–ผโ–ผโ–ผ

์ฐจ์ด์  : while๋ฌธ ์•ˆ๊ณผ ๋ฐ–์—์„œ if ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์„ฑ →  while๋ฌธ ๋ฐ– ์กฐ๊ฑด๋ฌธ, while๋ฌธ ์•ˆ else๋Š” ๊ตณ์ด ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋จ

์™œ? i += 1์€ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•  ๋•Œ๋‚˜ ๋งŒ์กฑํ•˜์ง€ ์•Š์„ ๋•Œ ๋ชจ๋‘ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ if๋ฌธ์„ my_list[i] <= my_list[p]ํ•˜๋‚˜๋กœ ์ž‘์„ฑํ•˜๊ณ  if ์กฐ๊ฑด๋ฌธ์ด ๋๋‚˜๋ฉด i += 1์„ ์‹คํ–‰ํ•˜๋„๋ก ์ž‘์„ฑํ•˜๋ฉด ์ฝ”๋“œ ํ•œ ์ค„์„ ์ค„์ผ ์ˆ˜ ์žˆ์Œ

๋˜ํ•œ, i == end๋Š” while๋ฌธ์ด ๋๋‚ฌ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋ฏ€๋กœ if๋ฌธ์ด ์—†๋”๋ผ๋„ ์‹คํ–‰์ด ๋˜๊ฒŒ ๋˜์–ด ์žˆ์Œ

 

โš™ ํ€ต ์ •๋ ฌ ํ•จ์ˆ˜(quick sort) ์ž‘์„ฑํ•˜๊ธฐ

Quicksort ์ž‘๋™ ๋ฐฉ์‹
1. Divide : partition
2. Conquer : pivot ์™ผ์ชฝ์— ์žˆ๋Š” ๊ฐ’๊ณผ pivot ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ๊ฐ’์„ ๊ฐ๊ฐ ์ •๋ ฌ 
3. Combine : ํ• ์ผ์ด ์—†์Œ
4. base case : ๋ฆฌ์ŠคํŠธ์— ๊ฐ’์ด ํ•˜๋‚˜๋ฐ–์— ์—†์„ ๋•Œ

ํ€ต ์ •๋ ฌ ํ•จ์ˆ˜๋Š” ํ•ฉ๋ณ‘ ์ •๋ ฌ๊ณผ ๋‹ฌ๋ฆฌ ์ •๋ ฌ๋œ ์ƒˆ๋กœ์šด ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›๋Š” ๋ฆฌ์ŠคํŠธ ์ž์ฒด๋ฅผ ์ •๋ ฌํ•จ

โ‘  base case ์ž‘์„ฑ : quicksortํ•จ์ˆ˜๋Š” ์žฌ๊ท€์ ์œผ๋กœ ํ˜ธ์ถœ๋˜๋ฉด์„œ ํŒŒ๋ผ๋ฏธํ„ฐ start์™€ end๋งŒ ๋ฐ”๋€œ

    ๋”ฐ๋ผ์„œ end - start < 0 (๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๊ฐ€ 0 ๋˜๋Š” 1์ธ ๊ฒฝ์šฐ) ์ด๋ฉด return

    ํ€ต ์ •๋ ฌ์€ ์ƒˆ๋กœ์šด ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— return๋งŒ ์ž‘์„ฑํ•˜์—ฌ ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ๋๋ƒ„

โ‘ก Divide : partition ๊ณผ์ •์„ ํ†ตํ•ด, pivot์„ ๊ธฐ์ค€์œผ๋กœ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋‚˜๋ˆ”

โ‘ข Conquer : pivot ์™ผ์ชฝ ๋ถ€๋ถ„๊ณผ pivot ์˜ค๋ฅธ์ชฝ ๋ถ€๋ถ„์„ ๊ฐ๊ฐ quicksort ํ•จ์ˆ˜๋กœ ์ •๋ ฌ

     → ์ด๋ถ€๋ถ„์—์„œ ๋ง‰ํ˜”์Œ. ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ ์™œ ์•ˆ ๋์ง€...??

โ‘ฃ Combine : ์—†์Œ

โ‘ค ์ถ”๊ฐ€ : quicksort์—์„œ start์™€ end ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์—†์„ ๋•Œ์—๋„ ์ž‘๋™ํ•˜๋„๋ก ๋งŒ๋“ค๊ธฐ (์˜ต์…”๋„ ํŒŒ๋ผ๋ฏธํ„ฐ ์‚ฌ์šฉํ•˜๊ธฐ)

์˜ต์…”๋„ ํŒŒ๋ผ๋ฏธํ„ฐ
ํŒŒ๋ผ๋ฏธํ„ฐ ์—†์ด ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Œ → ๋” ๊น”๋”ํ•œ ์ฝ”๋“œ ์ž‘์„ฑ ๊ฐ€๋Šฅ

์‚ฌ์šฉ ๋ฐฉ๋ฒ• 
ํŒŒ๋ผ๋ฏธํ„ฐ = "๊ฐ’" 
ํ•จ์ˆ˜ ๋‚ด ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ณ€์ˆ˜๋กœ ํ•˜๋Š” ๊ฐ’์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์œผ๋ฉด ํŒŒ๋ผ๋ฏธํ„ฐ = None ์‚ฌ์šฉ ํ›„
ํ•จ์ˆ˜ ์•ˆ์— if ํŒŒ๋ผ๋ฏธํ„ฐ == None: ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋ณธ๊ฐ’ ์ง€์ •

 

 

references

 

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ํ•ฉ๋ณ‘ ์ •๋ ฌ(merge sort)์ด๋ž€ - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

 

 

ํ•ฉ๋ณ‘ ์ •๋ ฌ - ์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „

์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „. ํ•ฉ๋ณ‘ ์ •๋ ฌ ๋˜๋Š” ๋ณ‘ํ•ฉ ์ •๋ ฌ(์˜์–ด: merge sort ๋จธ์ง€ ์†ŒํŠธ[*])์€ O(n log n) ๋น„๊ต ๊ธฐ๋ฐ˜ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ตฌํ˜„ํ–ˆ์„ ๋•Œ ์ด ์ •๋ ฌ์€ ์•ˆ์ • ์ •๋ ฌ์— ์†ํ•˜๋ฉฐ,

ko.wikipedia.org

 

 

๋ณ‘ํ•ฉ ์ •๋ ฌ์ด๋ž€? (๊ฐœ๋… ์ดํ•ดํ•˜๊ธฐ) | ์•Œ๊ณ ๋ฆฌ์ฆ˜ | Khan Academy

์ˆ˜ํ•™, ์˜ˆ์ˆ , ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ, ๊ฒฝ์ œ, ๋ฌผ๋ฆฌํ•™, ํ™”ํ•™, ์ƒ๋ฌผํ•™, ์˜ํ•™, ๊ธˆ์œต, ์—ญ์‚ฌ ๋“ฑ์„ ๋ฌด๋ฃŒ๋กœ ํ•™์Šตํ•ด ๋ณด์„ธ์š”. ์นธ์•„์นด๋ฐ๋ฏธ๋Š” ์–ด๋””์—์„œ๋‚˜ ๋ˆ„๊ตฌ์—๊ฒŒ๋‚˜ ์„ธ๊ณ„ ์ตœ๊ณ ์˜ ๋ฌด๋ฃŒ ๊ต์œก์„ ์ œ๊ณตํ•˜๋Š” ๋ฏธ์…˜์„ ๊ฐ€์ง„

ko.khanacademy.org