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

JiYoung Dev ๐Ÿ–ฅ

[ํŒŒ์ด์ฌ] ์•Œ๊ณ ๋ฆฌ์ฆ˜(algorithm) / ์„ ํ˜• ํƒ์ƒ‰ / ์ด์ง„ ํƒ์ƒ‰ / ์„ ํƒ ์ •๋ ฌ / ์‚ฝ์ž… ์ •๋ ฌ / ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํ‰๊ฐ€ - ์‹œ๊ฐ„ ๋ณต์žก๋„ & Big-O ์ ๊ทผํ‘œ๊ธฐ๋ฒ• ๋ณธ๋ฌธ

python

[ํŒŒ์ด์ฌ] ์•Œ๊ณ ๋ฆฌ์ฆ˜(algorithm) / ์„ ํ˜• ํƒ์ƒ‰ / ์ด์ง„ ํƒ์ƒ‰ / ์„ ํƒ ์ •๋ ฌ / ์‚ฝ์ž… ์ •๋ ฌ / ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํ‰๊ฐ€ - ์‹œ๊ฐ„ ๋ณต์žก๋„ & Big-O ์ ๊ทผํ‘œ๊ธฐ๋ฒ•

Shinjio 2023. 2. 23. 18:14

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

 

๐Ÿ”Ž ์•Œ๊ณ ๋ฆฌ์ฆ˜(algorithm)

์ˆ˜ํ•™๊ณผ ์ปดํ“จํ„ฐ๊ณผํ•™, ์–ธ์–ดํ•™ ๋˜๋Š” ์—ฎ์ธ ๋ถ„์•ผ์—์„œ ์–ด๋– ํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ •ํ•ด์ง„ ์ผ๋ จ์˜ ์ ˆ์ฐจ

๊ณ„์‚ฐ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋‹จ๊ณ„์  ์ ˆ์ฐจ๋ฅผ ์˜๋ฏธํ•˜๊ธฐ๋„ ํ•จ

์ฆ‰, ๋ฌธ์ œ ํ’€์ด์— ํ•„์š”ํ•œ ๊ณ„์‚ฐ์ ˆ์ฐจ ๋˜๋Š” ์ฒ˜๋ฆฌ ๊ณผ์ •์˜ ์ˆœ์„œ๋ฅผ ๋œปํ•จ

์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์—ฐ์‚ฐ, ๋ฐ์ดํ„ฐ ๋งˆ์ด๋‹(๊ธฐ๊ณ„ ํ•™์Šต) ๋˜๋Š” ์ž๋™ํ™”๋œ ์ถ”๋ก ์„ ์ˆ˜ํ–‰

 

์ข‹์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์•„๋ž˜ ๋‘ ๊ฐ€์ง€ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•ด์•ผ ํ•จ

1. ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ

2. ๋ฌธ์ œ๋ฅผ ๋” ์ž˜ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ

 

๐Ÿ”Ž ์ปดํ“จํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜

์ปดํ“จํ„ฐ๊ฐ€ ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ปดํ“จํ„ฐ๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ •๋ฆฌ๋˜์–ด ์žˆ๋Š” ์ผ๋ จ์˜ ๊ณผ์ • ํ˜น์€ ๋ฐฉ๋ฒ•

์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ค๊ณ„ํ•  ๋•Œ ์‹œ๊ฐ„๊ณผ ๊ณต๊ฐ„ ๋ณต์žก์„ฑ์„ ๊ณ ๋ คํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•จ

 

๐Ÿ“– ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆ˜์—… ๋“ฃ๊ธฐ ์ „ ๋ณต์Šต

โš™ ํŒฐ๋ฆฐ๋“œ๋กฌ ๋ฌธ์ œ(for ๋ฐ˜๋ณต๋ฌธ ์‚ฌ์šฉ)

(์œ„์˜ ๋ฌธ์ œ๋Š” Manacher's Algorithm๊ณผ ๊ด€๋ จ์ด ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค)

 

โ–ผโ–ผโ–ผ ๋ชจ๋ฒ”๋‹ต์•ˆ โ–ผโ–ผโ–ผ

for ๋ฌธ์„ ์‚ฌ์šฉํ•˜์˜€๊ณ  ๋ณ€์ˆ˜๋ฅผ ์ธ๋ฑ์Šค๋กœ ์„ค์ •ํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ์Œ

 

โ–ผโ–ผโ–ผ ๋‚ด๊ฐ€ ํ‘ผ ๋‹ต์•ˆ โ–ผโ–ผโ–ผ

โ‘ ๋ฒˆ ๋ฐฉ๋ฒ• : left, right ๋ณ€์ˆ˜์— n๋ฒˆ๊นŒ์ง€์˜ ๋ฌธ์ž์—ด ์ง€์ •(์Šฌ๋ผ์ด์‹ฑ ํ™œ์šฉ), n์€ word์˜ ์ค‘๊ฐ„ ์ธ๋ฑ์Šค

โ‘ก ๋‘ ๋ฒˆ์งธ๋Š” left, right ๋ณ€์ˆ˜์— i๋ฒˆ ๋ฌธ์ž์—ด ์ง€์ •

 

๐Ÿ”Ž ๋Œ€ํ‘œ์ ์ธ ์ปดํ“จํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜

๐Ÿ“– ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜(search algorithm)

โš™ ์„ ํ˜• ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜(linear search algorithm)

๋ฆฌ์ŠคํŠธ์—์„œ ํŠน์ •ํ•œ ์š”์†Œ๋ฅผ ์ฐพ๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ„๋‹จํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜

์›ํ•˜๋Š” ์š”์†Œ๋ฅผ ์ฐพ์„ ๋•Œ๊นŒ์ง€ ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ๊ฐ์˜ ์š”์†Œ๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ํ•˜๋‚˜์”ฉ ํƒ์ƒ‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜

์„ ํ˜• ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ steps
โ‘  0๋ฒˆ ์ธ๋ฑ์Šค์—์„œ ์‹œ์ž‘
โ‘ก ํ˜„์žฌ์˜ ์ธ๋ฑ์Šค์™€ ์›ํ•˜๋Š” ์š”์†Œ๋ฅผ ๋น„๊ต
โ‘ข ๋งŒ์•ฝ ์›ํ•˜๋Š” ์š”์†Œ๊ฐ€ ํ˜„์žฌ์˜ ์ธ๋ฑ์Šค์— ์žˆ์œผ๋ฉด ํ˜„์žฌ์˜ ์ธ๋ฑ์Šค๋ฅผ return
โ‘ฃ ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํ˜„์žฌ ์ธ๋ฑ์Šค๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๊ณ  2๋‹จ๊ณ„๋ถ€ํ„ฐ ํ”„๋กœ๋ ˆ์Šค๋ฅผ ๋ฐ˜๋ณต

 

โ–ผโ–ผโ–ผ ์„ ํ˜• ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•ด ๋ณด๊ธฐ โ–ผโ–ผโ–ผ

 

โš™ ์ด์ง„ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜(binary search algorithm)

์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ์—์„œ ํŠน์ •ํ•œ ์š”์†Œ๋ฅผ ์ฐพ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ (์„ ํ˜• ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๋‹ฌ๋ฆฌ ์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ „์ œ๋กœ ํ•จ. ์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ๊ฐ€ ์•„๋‹ˆ๋ฉด ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ ์šฉ ๋ถˆ๊ฐ€๋Šฅ). ์ค‘๊ฐ„ ๊ฐ’์„ ํ†ตํ•ด ํƒ์ƒ‰ํ•  ๋ฒ”์œ„๋ฅผ ๋ฐ˜์”ฉ ์ œ์™ธ์‹œ์ผœ ๊ฐ€๋ฉฐ ๋ฒ”์œ„๋ฅผ ์ขํ˜€ ์›ํ•˜๋Š” ๊ฐ’์„ ์ฐพ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜

โ€ป ์ด์ง„ ํƒ์ƒ‰์ด๋ž€ ์ด๋ฆ„์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ด์œ  : 1ํšŒ ๋น„๊ต๋ฅผ ๊ฑฐ์น  ๋•Œ๋งˆ๋‹ค ํƒ์ƒ‰ ๋ฒ”์œ„๊ฐ€ ๋Œ€๋žต ์ ˆ๋ฐ˜์œผ๋กœ ์ค„์–ด๋“ค๊ธฐ ๋•Œ๋ฌธ

 

์ด์ง„ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ steps
โ‘  ํƒ์ƒ‰ ๊ฐ„๊ฒฉ์˜ ๊ฐ€์žฅ ์™ผ์ชฝ ํฌ์ธํŠธ(๋ฆฌ์ŠคํŠธ์˜ ์ฒซ๋ฒˆ์งธ ์ธ๋ฑ์Šค)์™€ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ํฌ์ธํŠธ(๋ฆฌ์ŠคํŠธ์˜ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค)๋กœ
    'left'์™€ 'right' ๊ฐ’ ์„ค์ •.
์ฆ‰, left = 0, right = len(list) - 1
โ‘ก 'left'๊ฐ€ 'right'์™€ ๊ฐ™๊ฑฐ๋‚˜ ๋” ์ž‘์„ ๋•Œ ์•„๋ž˜์˜ ๋‹จ๊ณ„๋ฅผ ๋ฐ˜๋ณต
    → ํƒ์ƒ‰ ๊ฐ„๊ฒฉ์˜ ์ค‘๊ฐ„ ์ธ๋ฑ์Šค ๊ณ„์‚ฐ mid = (left - right) // 2
    → ๋งŒ์•ฝ ์ค‘๊ฐ„ ์ธ๋ฑ์Šค์˜ ๊ฐ’์ด ๋ชฉํ‘œ๋กœํ•˜๋Š” ๊ฐ’๊ณผ ๊ฐ™๋‹ค๋ฉด ์ค‘๊ฐ„ ์ธ๋ฑ์Šค return
           if list[mid] == elements:
              return mid
    → ๋งŒ์•ฝ ์ค‘๊ฐ„ ์ธ๋ฑ์Šค์˜ ๊ฐ’์ด ๋ชฉํ‘œ๋กœ ํ•˜๋Š” ๊ฐ’๋ณด๋‹ค ํฌ๋‹ค๋ฉด, right๋Š” ์ค‘๊ฐ„ ์ธ๋ฑ์Šค๋ณด๋‹ค 1 ์ž‘์•„์ง
           if list[mid] > elements:
               right = mid - 1
        ๊ทธ๋ฆฌ๊ณ  ๋‚˜์„œ ์ค‘๊ฐ„ ์ธ๋ฑ์Šค์˜ ์™ผ์ชฝ ์ ˆ๋ฐ˜ ๋ถ€๋ถ„๋งŒ ๋‹ค์‹œ ํƒ์ƒ‰
     → ๋งŒ์•ฝ ์ค‘๊ฐ„ ์ธ๋ฑ์Šค์˜ ๊ฐ’์ด ๋ชฉํ‘œ๋กœ ํ•˜๋Š” ๊ฐ’๋ณด๋‹ค ์ž‘๋‹ค๋ฉด, left๋Š” ์ค‘๊ฐ„ ์ธ๋ฑ์Šค๋ณด๋‹ค 1 ์ปค์ง
            if list[mid] < elemnets:
                left = mid + 1
         ๊ทธ๋ฆฌ๊ณ  ๋‚˜์„œ ์ค‘๊ฐ„ ์ธ๋ฑ์Šค์˜ ์˜ค๋ฅธ์ชฝ ์ ˆ๋ฐ˜ ๋ถ€๋ถ„๋งŒ ๋‹ค์‹œ ํƒ์ƒ‰
      → ์œ„์˜ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋ฉฐ ์›ํ•˜๋Š” ๊ฐ’์„ ์ฐพ์Œ (๋ฐ˜๋ณต๋ฌธ) 

 

โ–ผโ–ผโ–ผ ์ด์ง„ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•ด ๋ณด๊ธฐ โ–ผโ–ผโ–ผ

 

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

- ์ฒ˜์Œ์—๋Š” while๋ฌธ ์•„๋ž˜์—์„œ ๋ณ€ํ•˜๋Š” ๋ณ€์ˆ˜๋ฅผ mid_index ์ž์ฒด๋กœ ๋‘๊ณ , if ๋ฌธ ์•ˆ์— mid_index = len(some_list) // 2๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก ํ•˜์˜€์Œ. ์ด๋ ‡๊ฒŒ ํ•˜๊ฒŒ ๋˜๋ฉด mid_index ์ž์ฒด์˜ ๊ฐ’์ด ๋ณ€ํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ ์ฒ˜์Œ์˜ ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๊ฒŒ ๋จ. 

- ๊ทธ๋ž˜์„œ ๊ทธ ๋‹ค์Œ์—๋Š” i๋ฅผ ๋ณ€ํ•˜๋Š” ๋ณ€์ˆ˜๋กœ ๋‘๊ณ  ์ž‘์„ฑ. ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•˜๊ฒŒ ๋˜๋ฉด ๋ฆฌ์ŠคํŠธ ์š”์†Œ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚˜๊ฒŒ ๋˜๋ฉด ๋ฌดํ•œ ๋ฐ˜๋ณต ๋ฐœ์ƒ. ์™œ๋ƒํ•˜๋ฉด element๊ฐ€ some_list[i]๋ณด๋‹ค ์ž‘์•„์„œ i๋ฅผ 2๋กœ ๋‚˜๋ˆด๋Š”๋ฐ, ๊ทธ๋‹ค์Œ ์ง„ํ–‰ ์‹œ element๊ฐ€ some_list[i]๋ณด๋‹ค ํด ๊ฒฝ์šฐ i๋Š” ๋‹ค์‹œ 2๋ฐฐ๊ฐ€ ๋˜์–ด ์•ž์˜ ๋ช…๋ น์„ ๋ฐ˜๋ณตํ•˜๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ

 

โš™ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋น„๊ต

์„ ํ˜• ํƒ์ƒ‰์€ ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๊ฐ€ ๊ธธ์–ด์งˆ์ˆ˜๋ก ๊ฐ’์„ ์ฐพ๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ด ๊ธ‰๊ฒฉํ•˜๊ฒŒ ๊ธธ์–ด์ง€์ง€๋งŒ, ์ด์ง„ ํƒ์ƒ‰์€ ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๊ฐ€ ๊ธธ์–ด์ ธ๋„ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ด ์•„์ฃผ ์ฒœ์ฒœํžˆ ๋Š˜์–ด๋‚จ. ๋”ฐ๋ผ์„œ ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ฒฝ์šฐ ์ด์ง„ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉ

๊ทธ๋Ÿฌ๋‚˜ ์ด์ง„ ํƒ์ƒ‰์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ •๋ ฌ์ด ๋˜์–ด ์žˆ์–ด์•ผ ํ•จ. ์ •๋ ฌ์ด ์•ˆ๋œ ๋ฆฌ์ŠคํŠธ์—์„œ๋Š” ์„ ํ˜• ํƒ์ƒ‰์„ ์‚ฌ์šฉํ•ด์•ผ ํ•จ

 

โ–ผโ–ผโ–ผ ๋ฆฌ์ŠคํŠธ ๊ธธ์ด์— ๋”ฐ๋ฅธ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ฒ˜๋ฆฌ ํšŸ์ˆ˜ ๋น„๊ต โ–ผโ–ผโ–ผ

๋ฆฌ์ŠคํŠธ ์„ ํ˜• ํƒ์ƒ‰ ์ด์ง„ ํƒ์ƒ‰
16 16๊ฐœ 4๊ฐœ
32 32๊ฐœ 5๊ฐœ
64 64๊ฐœ 6๊ฐœ
128 128๊ฐœ 7๊ฐœ

 

๐Ÿ“– ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (sorting algorithm)

ํŠน์ • ์ˆœ์„œ๋กœ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ •๋ ฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜

๊ฐ€์žฅ ํ”ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ์ •๋ ฌ์€ ์˜ค๋ฆ„์ฐจ์ˆœ ํ˜น์€ ๋‚ด๋ฆผ์ฐจ์ˆœ์ด๋‚˜ ์•ŒํŒŒ๋ฒณ ์ˆœ์„œ ํ˜น์€ ๋ฐœ์ƒ ๋นˆ๋„ ์ˆ˜์™€ ๊ฐ™์€ ํŠน์ • ์กฐ๊ฑด์„ ๊ธฐ์ดˆ๋กœ ์ •๋ ฌํ•  ์ˆ˜๋„ ์žˆ์Œ

 

ํŒŒ์ด์ฌ์— sorted ๋‚ด์žฅ ํ•จ์ˆ˜ ํ˜น์€ sort() ๋ฉ”์†Œ๋“œ ์‚ฌ์šฉํ•ด๋„ ๋˜๋Š”๋ฐ ์™œ ์ •๋ ฌ์„ ๋ฐฐ์›Œ์•ผ ํ•˜๋Š”๊ฐ€?

์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ๊ด€๋ฆฌ, ๋ฐ์ดํ„ฐ ๋ถ„์„, ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๊ฐ™์ด ๋งŽ์€ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ, ์ปดํ“จํ„ฐ ๊ณผํ•™์— ํ•„์ˆ˜ ๋‚ด์šฉ

๋‹ค์–‘ํ•œ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๊ฐœ๋ฐœ๋˜์—ˆ๊ณ , ๊ฐ๊ฐ์˜ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ฐ์ž์˜ ์žฅ์ ๊ณผ ๋‹จ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ์…‹์˜ ํฌ๊ธฐ๋‚˜, ์ด์šฉ๊ฐ€๋Šฅํ•œ ๋ฆฌ์†Œ์Šค์™€ ๊ฐ™์€ ์š”์†Œ์— ๋”ฐ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ ํƒํ•˜์—ฌ ์‚ฌ์šฉ

 

โš™ ์„ ํƒ ์ •๋ ฌ(selection sort)

๊ฐ„๋‹จํ•œ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋ฆฌ์ŠคํŠธ์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ์ฐพ์•„ ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋ถ€๋ถ„์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์— ์žˆ๋Š” ๊ฐ’๊ณผ ๋ฐ”๊ฟˆ์œผ๋กœ์จ ์ž‘๋™ํ•จ. ๊ทธ๋‹ค์Œ์œผ๋กœ ์ž‘์€ ๊ฐ’์„ ์ฐพ์„ ๋•Œ๋งˆ๋‹ค ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋ถ€๋ถ„์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์— ์žˆ๋Š” ์ ์ •ํ•œ ์œ„์น˜๋กœ ์˜ฎ๊ฒจ ์ „์ฒด ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ •๋ ฌ๋  ๋•Œ๊นŒ์ง€ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฐ˜๋ณตํ•จ

 

์„ ํƒ ์ •๋ ฌ steps
โ‘  ๋ฆฌ์ŠคํŠธ์˜ 0๋ฒˆ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ๋ ์ธ๋ฑ์Šค๊นŒ์ง€ ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ์ฐพ์•„ 0๋ฒˆ ์ธ๋ฑ์Šค์˜ ๊ฐ’๊ณผ ์ž๋ฆฌ๋ฅผ ๋ฐ”๊ฟˆ
    → 0๋ฒˆ ์ธ๋ฑ์Šค๊นŒ์ง€ ์ •๋ ฌ ์™„๋ฃŒ

โ‘ก 0๋ฒˆ ์ธ๋ฑ์Šค๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋‚˜๋จธ์ง€ ๋ฆฌ์ŠคํŠธ์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ์ฐพ์•„ 1๋ฒˆ ์ธ๋ฑ์Šค์˜ ๊ฐ’๊ณผ ์ž๋ฆฌ๋ฅผ ๋ฐ”๊ฟˆ
    → 1๋ฒˆ ์ธ๋ฑ์Šค๊นŒ์ง€ ์ •๋ ฌ ์™„๋ฃŒ

...
โ‘ข ์ „์ฒด ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ •๋ ฌ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต

 

์„ ํƒ ์ •๋ ฌ์€ ๋ฐ์ดํ„ฐ์˜ ์–‘์ด ๋งŽ์•„์งˆ์ˆ˜๋ก ๋น„ํšจ์œจ์ ์ด์ง€๋งŒ ๊ฐ„๋‹จํ•˜๊ณ  ์‰ฝ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Œ

 

โš™ ์‚ฝ์ž… ์ •๋ ฌ(insert sort)

๋ฆฌ์ŠคํŠธ๋ฅผ ์ •๋ ฌ๋œ ๋ถ€๋ถ„๊ณผ ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋ถ€๋ถ„, ๋‘ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ„์–ด ์ž‘๋™ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜

์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋ถ€๋ถ„์—์„œ ๊ฐ ๊ฐ’๋“ค์„ ์Šค์บ”ํ•˜๊ณ  ์ •๋ ฌ๋œ ๋ถ€๋ถ„์˜ ์ ๋‹นํ•œ ์œ„์น˜์— ๊ฐ’์„ ์‚ฝ์ž…ํ•จ. ํ•„์š”์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์š”์†Œ๋“ค์„ ์ด์šฉํ•˜์—ฌ ๊ณต๊ฐ„์„ ํ™•๋ณด

 

์‚ฝ์ž… ์ •๋ ฌ steps
โ‘  ๋ฆฌ์ŠคํŠธ์˜ ์ฒซ๋ฒˆ์งธ ๊ฐ’์„ ํฌํ•จํ•ด ์ •๋ ฌ๋œ ๋ถ€๋ถ„์œผ๋กœ ์„ธํŒ…
โ‘ก ์ฒซ ๋ฒˆ์งธ ๊ฐ’์„ ์ œ์™ธํ•˜๊ณ  ๋ฆฌ์ŠคํŠธ์˜ ์™ผ์ชฝ๋ถ€ํ„ฐ ์˜ค๋ฅธ์ชฝ๊นŒ์ง€ ๊ฐ’์„ ์Šค์บ”
โ‘ข ์ ์ • ์œ„์น˜๋ฅผ ์ฐพ์„ ๋•Œ๊นŒ์ง€ ์ •๋ ฌ๋œ ๋ถ€๋ถ„์˜ ์˜ค๋ฅธ์ชฝ์—์„œ ์™ผ์ชฝ์œผ๋กœ ๊ฐ ๊ฐ’๋“ค์„ ๋น„๊ต
โ‘ฃ ์ ์ • ์œ„์น˜๋ฅผ ์ฐพ์œผ๋ฉด ๊ทธ ์œ„์น˜์— ๊ฐ’์„ ์‚ฝ์ž…ํ•˜๊ณ  ๋‚˜๋จธ์ง€ ๊ฐ’๋“ค์€ ์ด๋™์‹œํ‚ด
โ‘ค ์ „์ฒด ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ •๋ ฌ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต

 

โ–ผโ–ผโ–ผ ์‚ฝ์ž… ์ •๋ ฌ ๊ฐœ๋… ์ƒ์„ธ ์„ค๋ช… ๋งํฌ โ–ผโ–ผโ–ผ

 

์‚ฝ์ž… ์ •๋ ฌ (๊ฐœ๋… ์ดํ•ดํ•˜๊ธฐ) | ์•Œ๊ณ ๋ฆฌ์ฆ˜ | Khan Academy

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

ko.khanacademy.org

 

โ–ผโ–ผโ–ผ ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์—์„œ์˜ ์—ฌ๋Ÿฌ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํผํฌ๋จผ์Šค๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์ดํŠธ โ–ผโ–ผโ–ผ

 

Sorting Algorithms Animations

Animation, code, analysis, and discussion of 8 sorting algorithms on 4 initial conditions.

www.toptal.com

 

์œ„์˜ ์‚ฌ์ดํŠธ๋ฅผ ๋ณด๋ฉด ์ด๋ฏธ ๊ฑฐ์˜ ์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ •๋ ฌํ•  ๋•Œ๋Š” ์‚ฝ์ž… ์ •๋ ฌ์ด ๊ฐ€์žฅ ๋น ๋ฅธ ๋ฐ˜๋ฉด, ๋ฌด์ž‘์œ„ ์ˆœ์„œ์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ •๋ ฌํ•  ๋•Œ๋Š” ํž™ ์ •๋ ฌ์ด ๊ฐ€์žฅ ๋จผ์ € ๋๋‚จ. ์•„์˜ˆ ์ •๋ฐ˜๋Œ€๋กœ ์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ์˜ ๊ฒฝ์šฐ์—๋Š” ์‚ฝ์ž… ์ •๋ ฌ์ด ๋งค์šฐ ์˜ค๋ž˜ ๊ฑธ๋ฆผ. ์„ ํƒ ์ •๋ ฌ๊ณผ ํ•ฉ๋ณ‘ ์ •๋ ฌ์€ ์ƒํ™ฉ์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๊ณ  ์ผ์ •ํ•œ ์‹œ๊ฐ„์ด ์†Œ์š”๋จ

 

์ด๋ ‡๊ฒŒ ์ •๋ ฌ ๋ฌธ์ œ์˜ ๊ฒฝ์šฐ "์ ˆ๋Œ€์ ์ธ ์ข‹์€ ๋‹ต"์ด๋ž€ ์—†์Œ. ์ƒํ™ฉ์— ๋”ฐ๋ฅธ ๊ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์žฅ๋‹จ์ ์„ ํŒŒ์•…ํ•ด์•ผ ์˜ฌ๋ฐ”๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Œ. ๋”ฐ๋ผ์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ‰๊ฐ€ํ•˜๋Š” ๋Šฅ๋ ฅ์„ ๊ธธ๋Ÿฌ์•ผ ํ•จ

 

๐Ÿ”Ž ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ‰๊ฐ€๋ฒ•

์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ค๊ณ„ํ•  ๋•Œ ์‹ ๊ฒฝ ์จ์•ผ ํ•  ๊ฒƒ 2๊ฐ€์ง€๋Š” ์‹œ๊ฐ„๊ณผ ์ €์žฅ ๊ณต๊ฐ„์ž„. ์ข‹์€ ์ฝ”๋“œ์˜ ์ฒซ ๋ฒˆ์งธ ๊ธฐ์ค€์€ ๋ฐ”๋กœ ๋นจ๋ฆฌ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•˜๋Š” ๊ฒƒ(์‹œ๊ฐ„)์ด๋ฉฐ ๋‘ ๋ฒˆ์งธ ๊ธฐ์ค€์€ ์ €์žฅ ๊ณต๊ฐ„์„ ๋˜๋„๋ก ์ ๊ฒŒ ์ฐจ์ง€ํ•˜๋Š” ๊ฒƒ์ž„. ๊ทธ๋Ÿฌ๋‚˜ ๋” ์ค‘์š”ํ•œ ๊ฒƒ์€ ์‹œ๊ฐ„ ์š”์†Œ(์šฉ๋Ÿ‰์€ ๋ˆ ์ฃผ๊ณ  ๋Š˜๋ฆด ์ˆ˜ ์žˆ์Œ) ⇒ ์‹œ๊ฐ„ ๋ณต์žก๋„, ๊ณต๊ฐ„ ๋ณต์žก๋„

 

์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹คํ–‰ ์‹œ๊ฐ„์€ ์ปดํ“จํ„ฐ๊ฐ€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์†๋„์— ์˜์กดํ•จ. ์ด ์†๋„๋Š” ์ปดํ“จํ„ฐ์˜ ์ฒ˜๋ฆฌ์†๋„, ์‚ฌ์šฉ๋œ ์–ธ์–ด์˜ ์ข…๋ฅ˜, ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์ปดํ“จํ„ฐ๊ฐ€ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋กœ ๋ฐ”๊พธ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ์˜ ์†๋„ ๋“ฑ์— ๋‹ฌ๋ ค์žˆ์Œ. ์ฆ‰, ์ˆ˜์‹ ํ•˜๋‚˜๋กœ ์–ด๋–ค ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์†Œ์š”์‹œ๊ฐ„์„ ์™„๋ฒฝํ•˜๊ฒŒ ํ‘œํ˜„ํ•˜๊ธฐ ์–ด๋ ค์›€. ์ปดํ“จํ„ฐ์˜ ์‚ฌ์–‘ ๋“ฑ ์—ฌ๋Ÿฌ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ. ๊ทธ๋Ÿฌ๋‚˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹คํ–‰ ์‹œ๊ฐ„์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋Š” ๋˜ ๋‹ค๋ฅธ ์š”์†Œ๋กœ ์ž…๋ ฅ๊ฐ’์˜ ํฌ๊ธฐ(์ธํ’‹ ์‚ฌ์ด์ฆˆ)๋„ ์žˆ์Œ. ์šฐ๋ฆฌ๋Š” ์ด ์ž…๋ ฅ๊ฐ’์˜ ํฌ๊ธฐ(์ธํ’‹ ์‚ฌ์ด์ฆˆ)์— ๋”ฐ๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ‰๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์˜ˆ์ • ⇒ Big-O ์ ๊ทผํ‘œ๊ธฐ๋ฒ•

- ์ธํ’‹ ํฌ๊ธฐ ⇒ ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด n 

 

๐Ÿ“– ์‹œ๊ฐ„ ๋ณต์žก๋„(Time Complexity)

์ธํ’‹ ํฌ๊ธฐ์˜ ํ•จ์ˆ˜์— ๋”ฐ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ˆ˜ํ–‰ํ•˜๋Š”๋ฐ ํ•„์š”๋กœ ํ•˜๋Š” ์ปดํ“จํ„ฐ ๋ฆฌ์†Œ์Šค(์‹œ๊ฐ„)๋ฅผ ์ธก์ •

๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์‹œ๊ฐ„์ด ์–ผ๋งˆ๋‚˜ ๊ธ‰๊ฒฉํžˆ ์ฆ๊ฐ€ํ•˜๋Š”๊ฐ€ 

์ธํ’‹ ํฌ๊ธฐ์— ๋น„๋ก€ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹คํ–‰ ์‹œ๊ฐ„

์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ํด์ˆ˜๋ก, ์ธํ’‹ ํฌ๊ธฐ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‹คํ–‰ํ•˜๋Š”๋ฐ ์˜ค๋ž˜ ๊ฑธ๋ฆผ

 

์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๋ถ„์„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•ฝ๊ฐ„์˜ ์ˆ˜ํ•™์ด ํ•„์š”

โ‘ ๊ฑฐ๋“ญ์ œ๊ณฑ(exponentiation)

โ‘ก๋กœ๊ทธ(logarithms)

๋กœ๊ทธ๋Š” ๊ฑฐ๋“ญ์ œ๊ณฑ์˜ ๋ฐ˜๋Œ€ ๊ฐœ๋…์œผ๋กœ 

b๋ฅผ a๋กœ ๋ช‡ ๋ฒˆ ๋‚˜๋ˆ„์–ด์•ผ 1์ด ๋˜๋Š”๊ฐ€

a๊ฐ€ 2์ผ ๊ฒฝ์šฐ lg๋ผ๊ณ  ์“ฐ๊ธฐ๋„ ํ•จ

โ‘ข 1๋ถ€ํ„ฐ n๊นŒ์ง€์˜ ํ•ฉ

T = 1 + 2+ 3 + ... + (n-2) + (n-1) + n

T = n + (n-1) + (n-2) + ... + 3 + 2 + 1

2T = (1+n) * n

T = (1 + n) * n / 2

 

๐Ÿ“– Big-O ์ ๊ทผํ‘œ๊ธฐ๋ฒ•

Big-O ์ ๊ทผํ‘œ๊ธฐ๋ฒ•์€

์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํ‘œ๊ธฐ๋ฒ•(๊ณต๊ฐ„๋ณต์žก๋„์—์„œ๋„ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Œ)

Big-O ์ ๊ทผํ‘œ๊ธฐ๋ฒ•์˜ ํ•ต์‹ฌ์€ n์ด ์—„์ฒญ ํฌ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋Š” ๊ฒƒ. n์ด ๋ณ„๋กœ ํฌ์ง€ ์•Š๋‹ค๋ฉด ์•ˆ ์ข‹์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์จ๋„ ํฌ๊ฒŒ ๋ฌธ์ œ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ. ์ ˆ๋Œ€์ ์ธ ์‹œ๊ฐ„์ด ์•„๋‹ˆ๋ผ ์„ฑ์žฅ์„ฑ์„ ๋ณด๊ณ  ์‹ถ๊ธฐ ๋•Œ๋ฌธ์— n์˜ ์˜ํ–ฅ์„ ๊ฐ€์žฅ ๋งŽ์ด ๋ฐ›๋Š” ๊ฒƒ๋งŒ ์‚ฌ์šฉ. ๋”ฐ๋ผ์„œ ์ ๊ทผ ํ‘œ๊ธฐ๋ฒ•์€ ์ˆ˜์‹์—์„œ n์˜ ์˜ํ–ฅ๋ ฅ์ด ๊ฐ€์žฅ ํฐ ๊ฒƒ๋งŒ ํ‘œ๊ธฐ

 

Big-O ์ ๊ทผํ‘œ๊ธฐ๋ฒ• ๊ทœ์น™ : ์ˆ˜์‹์—์„œ n์˜ ์˜ํ–ฅ๋ ฅ์ด ๊ฐ€์žฅ ํฐ ๊ฒƒ๋งŒ ํ‘œ๊ธฐํ•œ๋‹ค

์†Œ์š” ์‹œ๊ฐ„ Big-O ์ ๊ทผํ‘œ๊ธฐ๋ฒ•
20n + 40 O(n)
2n^2 + 8n O(n^2)
5n^3 + 100n^2 +75 O(n^3)
20lgn + 50 O(lgn)
n์ด ๋ฌดํ•œํ•˜๊ฒŒ ์ปค์งˆ์ˆ˜๋ก ๋‚˜๋จธ์ง€ ์ˆ˜์‹์€ ํฌ๊ฒŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ

Big-O ์ ๊ทผ ํ‘œ๊ธฐ๋ฒ•์˜ ์˜๋ฏธ
O(1) : ์ธํ’‹ ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๊ฐ€ ์ฆ๊ฐ€ํ•ด๋„ ์†Œ์š” ์‹œ๊ฐ„์€ ๋˜‘๊ฐ™์Œ
O(n) : ์ธํ’‹ ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๊ฐ€ x๋ฐฐ ์ฆ๊ฐ€ํ•˜๋ฉด x๋ฐฐ๋งŒํผ ์†Œ์š” ์‹œ๊ฐ„์ด ์ฆ๊ฐ€
O(n^2) : ์ธํ’‹ ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๊ฐ€ x๋ฐฐ ์ฆ๊ฐ€ํ•˜๋ฉด x^2๋ฐฐ๋งŒํผ ์†Œ์š” ์‹œ๊ฐ„์ด ์ฆ๊ฐ€
O(n^3) : ์ธํ’‹ ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๊ฐ€ x๋ฐฐ ์ฆ๊ฐ€ํ•˜๋ฉด x^3๋ฐฐ๋งŒํผ ์†Œ์š” ์‹œ๊ฐ„์ด ์ฆ๊ฐ€

 

โš™ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ‰๊ฐ€ํ•˜๊ธฐ

์„ ํ˜• ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ‰๊ฐ€ํ•˜๊ธฐ

๋ฆฌ์ŠคํŠธ์˜ ๊ฐœ์ˆ˜ : N๊ฐœ

โ‘  ๋งŒ์•ฝ, ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’์ด 0๋ฒˆ ์ธ๋ฑ์Šค์— ์žˆ์„ ๊ฒฝ์šฐ 

     → ์ธ๋ฑ์Šค 0๋ฒˆ์ธ 1๊ฐœ๋งŒ ํ™•์ธํ•˜๋ฉด ๋จ 

     → ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(1) 

โ‘ก ๋งŒ์•ฝ, ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’์ด ๋ฆฌ์ŠคํŠธ์— ์—†์„ ๊ฒฝ์šฐ

    → ์ตœ๋Œ€ N๋ฒˆ ํ™•์ธํ•ด์•ผ ํ•จ

    → ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(N)

 

์ด์ง„ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ‰๊ฐ€ํ•˜๊ธฐ

๋ฆฌ์ŠคํŠธ์˜ ๊ฐœ์ˆ˜ : N๊ฐœ

โ‘  ๋งŒ์•ฝ, ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’์ด ์ค‘๊ฐ„ ์ธ๋ฑ์Šค์— ์žˆ์„ ๊ฒฝ์šฐ

   - start_index → O(1)

   - last_index → O(1)

   - while๋ฌธ → O(1) : ์ค‘๊ฐ„ ์ธ๋ฑ์Šค๋งŒ ํ™•์ธํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ

   - return None → O(1)

   ⇒ ์ด ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(4)์ด์ง€๋งŒ ์ ๊ทผํ‘œ๊ธฐ๋ฒ• ๊ทœ์น™์— ์˜ํ•ด O(1)์ด ๋จ 

โ‘ก ๋งŒ์•ฝ, ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’์ด ๋ฆฌ์ŠคํŠธ์— ์—†์„ ๊ฒฝ์šฐ

   - start_index → O(1)

   - last_index → O(1)

   - while๋ฌธ → O(lg n) : ์ค‘๊ฐ„ ์ธ๋ฑ์Šค๋งŒ ํ™•์ธํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ

while ๋ฌธ ์ฒซ ์‹œํ–‰ ํ›„ N์˜ ๊ฐœ์ˆ˜ → N/2
๋‘ ๋ฒˆ์งธ ์‹œํ–‰ ํ›„ N์˜ ๊ฐœ์ˆ˜ → 1/2 * N/2
์„ธ ๋ฒˆ์งธ ์‹œํ–‰ ํ›„ N์˜ ๊ฐœ์ˆ˜ → 1/2 * 1/2 * N/2
...
K ๋ฒˆ์งธ ์‹œํ–‰ ํ›„ N์˜ ๊ฐœ์ˆ˜ → (1/2)^K * N 
...
์ฐพ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ๋‚จ๋Š” ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๋Š” ์ตœ์ข…์ ์œผ๋กœ 1์ด ๋จ
๋”ฐ๋ผ์„œ (1/2)^K * N๋Š” 1์— ์ˆ˜๋ ดํ•˜๊ฒŒ ๋จ

   - return None → O(1)

   ⇒ ์ด ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(lg n + 3)์ด์ง€๋งŒ ์ ๊ทผํ‘œ๊ธฐ๋ฒ• ๊ทœ์น™์— ์˜ํ•ด O(lg n)์ด ๋จ 

 

โš™ ์ ๊ทผ ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ‰๊ฐ€ํ•  ๋•Œ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ 

์ฝ”๋“œ๊ฐ€ ๋ชจ๋“  ์ค„์€ O(1) ์ธ๊ฐ€์š”?

NO. ์ธํ’‹ ํฌ๊ธฐ์™€ ์ƒ๊ด€์—†์ด ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ๋งŒ O(1)

๊ทธ๋ ‡์ง€ ์•Š์€ ์ฝ”๋“œ๋Š” ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๋”ฐ์ ธ๋ด์•ผ ํ•จ

๋งŒ์•ฝ ๋ฆฌ์ŠคํŠธ์—์„œ in ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ๊ฐ’์˜ ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋ฉด ๋‚ด๋ถ€์ ์œผ๋กœ O(n)์˜ ์„ ํ˜• ํƒ์ƒ‰์ด ์ด๋ฃจ์–ด์ง

 

โ–ผ ๋‹ค์–‘ํ•œ ํ•จ์ˆ˜, ๋ฉ”์†Œ๋“œ ๋“ฑ์—์„œ์˜ ์‹œ๊ฐ„๋ณต์žก๋„ ํ‰๊ฐ€

Operation Code Average Case
์ธ๋ฑ์‹ฑ my_list[index] O(1)
์ •๋ ฌ my_list.sort()
sorted(my_list)
O(nlg n)
๋’ค์ง‘๊ธฐ my_list.reverse() O(n)
ํƒ์ƒ‰ element in my_list O(n)
๋์— ์š”์†Œ ์ถ”๊ฐ€ my_list.append(element) O(1)
์ค‘๊ฐ„์— ์š”์†Œ ์ถ”๊ฐ€ my_list.insert(index, element) O(n)
์‚ญ์ œ del my_list[index] O(n)
์ตœ์†Ÿ๊ฐ’, ์ตœ๋Œ“๊ฐ’ ์ฐพ๊ธฐ min(my_list)
max(my_list)
O(n)
๊ธธ์ด ๊ตฌํ•˜๊ธฐ len(my_list) O(1)
์Šฌ๋ผ์ด์‹ฑ my_list[a:b] O(b-a)
ํƒ€์ž… ํ•จ์ˆ˜ type(my_list) O(1)
๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ str(N) (N์€ d์ž๋ฆฟ์ˆ˜) O(log n) ํ˜น์€ O(d)

โ€ป sort ๋ฉ”์†Œ๋“œ๋‚˜ ํ•จ์ˆ˜ sorted๋Š” ์ž…๋ ฅ์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์งˆ ๊ฒฝ์šฐ ํšจ์œจ์ ์œผ๋กœ ์ •๋ ฌํ•˜๊ธฐ ์œ„ํ•ด ํ€ต ์ •๋ ฌ๊ณผ ๊ฐ™์€ ์ง„ํ™”๋œ ์ •๋ ฌ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— O(n lg n)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ

 

โ–ผ ๋”•์…”๋„ˆ๋ฆฌ์—์„œ์˜ ์‹œ๊ฐ„๋ณต์žก๋„ ํ‰๊ฐ€

Operation Code Average Case
๊ฐ’ ์ฐพ๊ธฐ my_dict[key] O(1)
๊ฐ’ ๋„ฃ์–ด์ฃผ๊ธฐ/๋ฎ์–ด์“ฐ๊ธฐ my_dict[key] = value O(1)
๊ฐ’ ์‚ญ์ œ del my_dict[key] O(1)

 

โš™ ์ฃผ์š” ์‹œ๊ฐ„ ๋ณต์žก๋„ ์ด ์ •๋ฆฌ

O(1) * : ์ธํ’‹์˜ ํฌ๊ธฐ๊ฐ€ ์†Œ์š” ์‹œ๊ฐ„์— ์˜ํ–ฅ์ด ์—†๋‹ค๋Š” ๋œป 

O(lg n) * : ๋ฐ˜๋ณต๋ฌธ์ด์ง€๋งŒ n์ด 2๋ฐฐ์”ฉ ์ฆ๊ฐ€ํ•  ๋•Œ ํ˜น์€ 1/2๋ฐฐ์”ฉ ๊ฐ์†Œํ•  ๋•Œ (์˜ˆ. ์ด์ง„ ํƒ์ƒ‰)

O(n) * : ๋ฐ˜๋ณต๋ฌธ์ด ์žˆ๊ณ , ๋ฐ˜๋ณต๋˜๋Š” ํšŸ์ˆ˜๊ฐ€ ์ธํ’‹์˜ ํฌ๊ธฐ์™€ ๋น„๋ก€ํ•˜๋ฉด ์ผ๋ฐ˜์ ์œผ๋กœ O(n) (์˜ˆ. ์„ ํ˜• ํƒ์ƒ‰)

O(n lg n) * : O(n)๊ณผ O(lg n)์ด ๊ฒน์ณ์กŒ์„ ๋•Œ

O(n^2) * : 2๋ฒˆ ์ค‘์ฒฉ ๋ฐ˜๋ณต๋ฌธ

O(n^3) * : 3ํšŒ ์ค‘์ฒฉ ๋ฐ˜๋ณต๋ฌธ

O(n^4) : 4ํšŒ ์ค‘์ฒฉ ๋ฐ˜๋ณต๋ฌธ

 

๐Ÿ“– ๊ณต๊ฐ„ ๋ณต์žก๋„

์ธํ’‹ ํฌ๊ธฐ์— ๋น„๋ก€ํ•ด์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„

๊ณต๊ฐ„ ๋ณต์žก๋„ ๋˜ํ•œ ์ ๊ทผ ํ‘œ๊ธฐ๋ฒ• (Big-O)๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

 

โš™ O(1)

ํŒŒ๋ผ๋ฏธํ„ฐ a, b, c๊ฐ€ ์ฐจ์ง€ํ•˜๋Š” ๊ณต๊ฐ„์„ ์ œ์™ธํ•˜๋ฉด ์ถ”๊ฐ€์ ์œผ๋กœ ๋ณ€์ˆ˜ result๊ฐ€ ๊ณต๊ฐ„์„ ์ฐจ์ง€

๋ฆฌํ„ด๋˜๋Š” result๊ฐ€ ์ฐจ์ง€ํ•˜๋Š” ๊ณต๊ฐ„์€ ์ธํ’‹๊ณผ๋Š” ๋ฌด๊ด€ํ•˜๋ฏ€๋กœ ํ•จ์ˆ˜ product์˜ ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” O(1)

 

โš™ O(n)

์ธํ’‹ my_list์˜ ๊ธธ์ด๋ฅผ n์œผ๋กœ ๊ฐ€์ •. ํŒŒ๋ผ๋ฏธํ„ฐ my_list๊ฐ€ ์ฐจ์ง€ํ•˜๋Š” ๊ณต๊ฐ„์„ ์ œ์™ธํ•˜๋ฉด ์ถ”๊ฐ€์ ์œผ๋กœ ๋ณ€์ˆ˜ every_other๊ฐ€ ๊ณต๊ฐ„์„ ์ฐจ์ง€. every_other์—๋Š” my_list์˜ ์ง์ˆ˜ ์ธ๋ฑ์Šค์˜ ๊ฐ’๋“ค์ด ๋ณต์‚ฌ๋˜์–ด ๋“ค์–ด๊ฐ. ์•ฝ n/2๊ฐœ์˜ ๊ฐ’์ด ๋“ค์–ด๊ฐ„๋‹ค๋Š” ๋œป. O(n/2)๋Š” ๊ทœ์น™์— ์˜ํ•ด O(n)์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋ฏ€๋กœ get_every_other ํ•จ์ˆ˜์˜ ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” O(n)

 

โš™ O(n^2)

์ธํ’‹ my_list์˜ ๊ธธ์ด๋ฅผ n์œผ๋กœ ๊ฐ€์ •. ํŒŒ๋ผ๋ฏธํ„ฐ my_list๊ฐ€ ์ฐจ์ง€ํ•˜๋Š” ๊ณต๊ฐ„์„ ์ œ์™ธํ•˜๋ฉด ์ถ”๊ฐ€์ ์œผ๋กœ ๋ณ€์ˆ˜ products, a, b๊ฐ€ ๊ณต๊ฐ„์„ ์ฐจ์ง€. a์™€ b๋Š” ์ •์ˆ˜ ๊ฐ’์„ ๋‹ด์œผ๋ฏ€๋กœ O(1). products๋Š” my_list์—์„œ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์กฐํ•ฉ์˜ ๊ณฑ์ด ๋“ค์–ด๊ฐ. ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์กฐํ•ฉ์€ n^2๊ฐœ๋กœ O(n^2) โ€ป ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” ์ฝ”๋“œ๊ฐ€ ์ˆ˜ํ–‰๋˜๋Š” ๋™์•ˆ ์ฐจ์ง€ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ. ์ฆ‰, a * b์˜ ๊ฒฐ๊ณผ๊ฐ€ 6๊ฐœ๊ฐ€ ๋‚˜์˜จ๋‹ค๊ณ  ํ•ด์„œ n^2๋ฒˆ์„ ์ˆ˜ํ–‰ํ–ˆ์œผ๋ฏ€๋กœ ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” O(n^2)