ABOUT ME

Today
Yesterday
Total
  • Chap1 1.2 The Importance of Developing Efficient Algorithms
    ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๊ณ„ ๋ฐ ์‹ค์Šต 2025. 4. 4. 22:50

    ์™œ ํšจ์œจ์„ฑ์ด ์ค‘์š”ํ•œ๊ฐ€?

    โ“ "์ปดํ“จํ„ฐ ์„ฑ๋Šฅ์ด ๊ณ„์† ์ข‹์•„์ง€๋Š”๋ฐ ๊ตณ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํšจ์œจ์„ฑ์„ ๋”ฐ์ ธ์•ผ ํ•ด?"
    โ†’ Yes. ๋ฌด์กฐ๊ฑด ์ค‘์š”ํ•จ.

    • ์ปดํ“จํ„ฐ๊ฐ€ ๋นจ๋ผ์ ธ๋„, ๋ฌธ์ œ ํฌ๊ธฐ(input size) ๋Š” ๋” ๋น ๋ฅด๊ฒŒ ์ปค์ง
    • ์ข‹์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ˆ˜์‹ญ ๋ฐฐ, ์ˆ˜๋ฐฑ ๋ฐฐ ๋น ๋ฅธ ์„ฑ๋Šฅ ์ฐจ์ด๋ฅผ ๋งŒ๋“ฆ

    ๐Ÿ” ๋‘ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋น„๊ต ์‚ฌ๋ก€


    ๐Ÿ”น 1.2.1 Sequential Search vs Binary Search

    ๐Ÿงช ๋ฌธ์ œ: ์ •๋ ฌ๋œ ๋ฐฐ์—ด์—์„œ x๊ฐ€ ์žˆ๋Š”์ง€ ์ฐพ๊ธฐ

    ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฐฉ์‹ ๋น„๊ต ํšŸ์ˆ˜(์ตœ์•…์˜ ๊ฒฝ์šฐ)
    Sequential Search ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ์ˆœ์„œ๋Œ€๋กœ ๋น„๊ต nํšŒ
    Binary Search ์ค‘๊ฐ„๊ฐ’ ๊ธฐ์ค€์œผ๋กœ ์ ˆ๋ฐ˜์”ฉ ์ค„์—ฌ๊ฐ logโ‚‚n + 1ํšŒ

    ๐Ÿ“Œ ํ•ต์‹ฌ ๋น„๊ต

    • n = 4,294,967,296์ผ ๊ฒฝ์šฐ:
      • Sequential: ์•ฝ 43์–ต ๋ฒˆ ๋น„๊ต
      • Binary: ๋‹จ 33๋ฒˆ๋งŒ ๋น„๊ต

    ์•„๋ฌด๋ฆฌ ์ปดํ“จํ„ฐ๊ฐ€ ๋นจ๋ผ๋„ Sequential์€ ์ˆ˜ ์ดˆ, Binary๋Š” ๊ฑฐ์˜ ์ฆ‰์‹œ ๊ฒฐ๊ณผ!

    ๋ฌธ์ œ ์ƒํ™ฉ

    ๋ชฉํ‘œ: ์ •๋ ฌ๋œ ๋ฐฐ์—ด S[1..n] ์•ˆ์—์„œ ์›์†Œ x๋ฅผ ์ฐพ๊ธฐ
    โ†’ x์˜ ์œ„์น˜(index)๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฑฐ๋‚˜, ์—†์œผ๋ฉด 0

    ๐Ÿ”ด Sequential Search (์„ ํ˜• ํƒ์ƒ‰)

    procedure SequentialSearch(S[1..n], x)
      for i = 1 to n
        if S[i] == x then return i
      return 0

    ํŠน์ง•:

    • ์•ž์—์„œ๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ์ˆœ์ฐจ์ ์œผ๋กœ ๋น„๊ต
    • ๋ฐฐ์—ด์ด ์ •๋ ฌ๋˜์–ด ์žˆ์ง€ ์•Š์•„๋„ ๊ฐ€๋Šฅ
    • ์ตœ์•…์˜ ๊ฒฝ์šฐ: ๋๊นŒ์ง€ ๋น„๊ต โ†’ n๋ฒˆ

    ์‹œ๊ฐ„๋ณต์žก๋„:

    • ์ตœ์„ : O(1)
    • ํ‰๊ท : O(n/2)
    • ์ตœ์•…: O(n)

    โœ… Binary Search (์ด์ง„ ํƒ์ƒ‰)

    ๐Ÿ” ๊ธฐ๋ณธ ๊ฐœ๋…

    1. ์ค‘๊ฐ„ ๊ฐ’(mid)์„ ์„ ํƒํ•ด์„œ x์™€ ๋น„๊ต
    2. ๊ฐ™์œผ๋ฉด ์ฐพ์€ ๊ฒƒ โ†’ ๋ฐ˜ํ™˜
    3. x๊ฐ€ ๋” ์ž‘์œผ๋ฉด โ†’ ์™ผ์ชฝ ์ ˆ๋ฐ˜๋งŒ ํƒ์ƒ‰
    4. x๊ฐ€ ๋” ํฌ๋ฉด โ†’ ์˜ค๋ฅธ์ชฝ ์ ˆ๋ฐ˜๋งŒ ํƒ์ƒ‰
    5. ๋ฐ˜๋ณต

    ๐Ÿ“ฆ ์‚ฌ์šฉ ๋ณ€์ˆ˜

     

    ๋ณ€์ˆ˜ ์˜๋ฏธ
    low ํ˜„์žฌ ํƒ์ƒ‰ ๋ฒ”์œ„์˜ ์‹œ์ž‘ ์ธ๋ฑ์Šค
    high ํ˜„์žฌ ํƒ์ƒ‰ ๋ฒ”์œ„์˜ ๋ ์ธ๋ฑ์Šค
    mid ์ค‘๊ฐ„ ์œ„์น˜ ์ธ๋ฑ์Šค ((low + high) // 2)
    procedure BinarySearch(S[1..n], x)
      low โ† 1
      high โ† n
      while low โ‰ค high
        mid โ† โŒŠ(low + high)/2โŒ‹
        if S[mid] == x then return mid
        else if x < S[mid] then high โ† mid - 1
        else low โ† mid + 1
      return 0

    ํŠน์ง•:

    • ์ •๋ ฌ๋œ ๋ฐฐ์—ด์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    • ๋งค ๋‹จ๊ณ„๋งˆ๋‹ค ํƒ์ƒ‰ ๋ฒ”์œ„๋ฅผ ์ ˆ๋ฐ˜์œผ๋กœ ์ค„์ž„
    • ๋งค์šฐ ๋น ๋ฆ„! (๋กœ๊ทธ ์‹œ๊ฐ„)

    ์‹œ๊ฐ„๋ณต์žก๋„:

    • ํ•ญ์ƒ O(logโ‚‚n) (์•ฝ๊ฐ„์˜ ์ƒ์ˆ˜ ์ฐจ์ด๋กœ +1 ํฌํ•จ)

    โ— ์‹œํ—˜ ๋Œ€๋น„ ์ฒดํฌ ํฌ์ธํŠธ

    ์งˆ๋ฌธ ๋‹ต๋ณ€ ์š”์•ฝ
    Binary Search์˜ ์ „์ œ ์กฐ๊ฑด์€? ๋ฐฐ์—ด์ด ์ •๋ ฌ๋˜์–ด ์žˆ์–ด์•ผ ํ•จ
    ์™œ logโ‚‚n๋งŒํผ ๋น ๋ฅธ๊ฐ€? ๋งค๋ฒˆ ๋ฒ”์œ„๋ฅผ ์ ˆ๋ฐ˜์”ฉ ์ค„์ด๊ธฐ ๋•Œ๋ฌธ
    Binary Search ์‹œ๊ฐ„๋ณต์žก๋„๋Š”? O(log n)
    Sequential Search์™€์˜ ์ฐจ์ด๋Š”? Binary๋Š” ํ›จ์”ฌ ๋” ์ ์€ ๋น„๊ต ํšŸ์ˆ˜๋กœ ํƒ์ƒ‰ ๊ฐ€๋Šฅ

    ๐Ÿ”น 1.2.2 ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋น„๊ต

    ๐Ÿ“ ๋ฌธ์ œ: n๋ฒˆ์งธ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋ผ


    ๐Ÿšจ ๋น„ํšจ์œจ์ : Algorithm 1.6 (์žฌ๊ท€ recursive)

    function fib(n)
      if n == 0 or n == 1 then
        return n
      return fib(n-1) + fib(n-2)
    • ๊ฐ™์€ ๊ฐ’์„ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐ˜๋ณต ๊ณ„์‚ฐ
    • ๊ณ„์‚ฐ๋Ÿ‰์ด 2^(n/2) ์ด์ƒ โ†’ ์ง€์ˆ˜์  ์ฆ๊ฐ€
    • ์˜ˆ: n=120์ด๋ฉด ์ˆ˜์‹ญ ๋…„ ์ด์ƒ ๊ฑธ๋ฆด ์ˆ˜๋„ ์žˆ์Œ (!)


    ํšจ์œจ์ : Algorithm 1.7 (๋ฐ˜๋ณต Iterative)

    function fib2(n)
      f[0] โ† 0
      f[1] โ† 1
      for i = 2 to n
        f[i] โ† f[i-1] + f[i-2]
      return f[n]
    • ๋ชจ๋“  ํ•ญ์„ ํ•œ ๋ฒˆ๋งŒ ๊ณ„์‚ฐ โ†’ O(n) ์‹œ๊ฐ„
    • n=120๋„ ์ˆœ์‹๊ฐ„์— ๊ณ„์‚ฐ


    ๐Ÿ’ก ๊ฒฐ๋ก : ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ ํƒ์ด ์ƒ๋ช…์ด๋‹ค!

    ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‹œ๊ฐ„๋ณต์žก๋„ ์‹คํ–‰ ์‹œ๊ฐ„
    ์žฌ๊ท€ ํ”ผ๋ณด๋‚˜์น˜ O(2^n) ์ˆ˜์‹ญ ๋…„
    ๋ฐ˜๋ณต ํ”ผ๋ณด๋‚˜์น˜ O(n) 0.0000001์ดˆ ์ˆ˜์ค€

    ๐ŸŽฏ ํ•ต์‹ฌ ํ‚ค์›Œ๋“œ ์š”์•ฝ

    • ํšจ์œจ์„ฑ์€ ๋ฌธ์ œ ํฌ๊ธฐ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ํ•„์ˆ˜
    • ๋น„ํšจ์œจ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์•„๋ฌด๋ฆฌ ์ข‹์€ ์ปดํ“จํ„ฐ๋„ ์†Œ์šฉ ์—†์Œ
    • ์ด๋ก ์  ๋ถ„์„์€ ์‹ค์ œ ์„ฑ๋Šฅ์— ํฐ ์˜ํ–ฅ์„ ์คŒ
    • ์ข‹์€ ์„ค๊ณ„ = ์ˆ˜์ฒœ ๋ฐฐ ์ด์ƒ์˜ ์‹คํ–‰ ์‹œ๊ฐ„ ์ ˆ์•ฝ

    ๐Ÿ“Œ ์‹œํ—˜ ๋Œ€๋น„ ์ฒดํฌ ํฌ์ธํŠธ

    ์งˆ๋ฌธ ๋‹ต๋ณ€ ์š”์•ฝ
    ์™œ ํšจ์œจ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ค‘์š”ํ•œ๊ฐ€? ๋ฌธ์ œ ํฌ๊ธฐ๊ฐ€ ์ปค์ง€๋ฉด, ๋น„ํšจ์œจ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ํ˜„์‹ค์ ์œผ๋กœ ์‚ฌ์šฉ ๋ถˆ๊ฐ€
    Binary Search๊ฐ€ ๋น ๋ฅธ ์ด์œ ๋Š”? ๋งค๋ฒˆ ๊ฒ€์ƒ‰ ๋ฒ”์œ„๋ฅผ ์ ˆ๋ฐ˜์œผ๋กœ ์ค„์ด๊ธฐ ๋•Œ๋ฌธ
    ์žฌ๊ท€ ํ”ผ๋ณด๋‚˜์น˜๊ฐ€ ๋А๋ฆฐ ์ด์œ ๋Š”? ์ค‘๋ณต ๊ณ„์‚ฐ์ด ๋„ˆ๋ฌด ๋งŽ์•„์„œ ๊ณ„์‚ฐ๋Ÿ‰์ด ์ง€์ˆ˜์ ์œผ๋กœ ์ฆ๊ฐ€
    ํšจ์œจ์ ์ธ ํ”ผ๋ณด๋‚˜์น˜ ๊ณ„์‚ฐ๋ฒ•์€? ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๊ณ„์‚ฐ + ์ด์ „ ๋‘ ํ•ญ๋งŒ ๊ธฐ์–ต โ†’ O(n)

    [์ฐธ๊ณ ์‚ฌํ•ญ]

    ๐Ÿงฎ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด (Fibonacci Sequence)


    ์ •์˜

    ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ ํ™”์‹(์žฌ๊ท€์‹)์œผ๋กœ ์ •์˜๋œ๋‹ค:

    F(0)=0,F(1)=1F(n)=F(nโˆ’1)+F(nโˆ’2),nโ‰ฅ2

    ์ฆ‰, ์ด์ „ ๋‘ ํ•ญ์„ ๋”ํ•ด์„œ ๋‹ค์Œ ํ•ญ์„ ๋งŒ๋“œ๋Š” ์ˆ˜์—ด์ด๋‹ค.

    โ–ถ๏ธ ์ฒ˜์Œ ๋ช‡ ๊ฐœ ํ•ญ์€?

    0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55,...

    ๋Œ“๊ธ€

Designed by Tistory.