๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์ฝ”๋”ฉํ…Œ์ŠคํŠธ/๊ธฐ๋ณธ ์•Œ๊ณ ๋ฆฌ์ฆ˜

์ด์ง„ํƒ์ƒ‰(Binary_Search)

Binary_Search(์ด์ง„ ํƒ์ƒ‰)

1. Binary_Search๋ž€


๋ฐฐ์—ด์˜ ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ๊ฐ€ ์ •๋ ฌ๋˜์–ด ์žˆ์–ด์•ผ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์กฐ๊ฑด๋งŒ ๋งž๋‹ค๋ฉด ๋งค์šฐ ๋น ๋ฅด๋‹ค. (O(logn)์˜ ์‹œ๊ฐ„๋ณต์žก๋„)

๋ฐ์ดํ„ฐ๋ฅผ ์ ˆ๋ฐ˜์”ฉ ์ขํ˜€๊ฐ€๋ฏ€๋กœ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ณ€์ˆ˜ (์‹œ์ž‘์ , ์ค‘๊ฐ„์ , ๋์ ) 3๊ฐœ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

์ฐพ์œผ๋ ค๋Š” ๋ฐ์ดํ„ฐ์™€ ์ค‘๊ฐ„์  ์œ„์น˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ๋น„๊ตํ•˜๋Š”๊ฒƒ์ด ์ง„ํ–‰๋ฐฉ์‹์ด๋‹ค.


2. ์˜ˆ์‹œ์ฝ”๋“œ


2.1 ์žฌ๊ท€ํ•จ์ˆ˜ ๋ฐฉ์‹

def binary_search(array, target, start, end):
  if start > end:     # array์— target๊ฐ’์ด ์กด์žฌํ•˜์ง€ ์•Š์•„ ๊ณ„์†๋œ ์žฌ๊ท€ํ•จ์ˆ˜ ํ˜ธ์ถœ๋กœ start > end๊ฐ€ ๋œ๊ฒฝ์šฐ None return
    return None
  mid = (start + end) // 2   # ์ค‘๊ฐ„์ 
  if array[mid] == target:    # mid๊ฐ’์ด target์ธ๊ฒฝ์šฐ - ์ฐพ์€๊ฒฝ์šฐ ์ข…๋ฃŒ
    return mid
  elif array[mid] > target:                               # mid๊ฐ’๋ณด๋‹ค target์ด ์ž‘์€๊ฒฝ์šฐ
    return binary_search(array, target, start, mid - 1)   # end๊ฐ’์„ min - 1 ๋กœ ๋ฐ”๊พธ์–ด ํƒ์ƒ‰ ๋ฒ”์œ„๋ฅผ ๋ฐ˜์œผ๋กœ ์ค„์ธ ์žฌ๊ท€ํ•จ์ˆ˜ ํ˜ธ์ถœ
  else:
    return binary_search(array, target, mid + 1, end)     # target๊ฐ’์ด mid๊ฐ’๋ณด๋‹ค ํฐ๊ฒฝ์šฐ, start ๊ฐ’์„ mid + 1๋กœ ๋ฐ”๊พธ์–ด ์žฌ๊ท€ํ•จ์ˆ˜ ํ˜ธ์ถœ

2.2 ๋‹จ์ˆœ ๋ฐ˜๋ณต๋ฌธ์„ ํ™œ์šฉํ•œ ๋ฐฉ์‹

def binary_search(array, target, start, end):
  while start <= end:     # ๋ฐ˜๋ณตํ•˜์—ฌ array == target์ผ๋•Œ๊นŒ์ง€ ๊ฐ’์„ ์ฐพ์Œ
    mid = (start + end) // 2

    if array[mid] == target:
      return mid
    elif array[mid] > target:
      end = mid - 1
    else:
      start = mid + 1
    return None         # start > end ์ผ๋•Œ None๊ฐ’ ๋ฐ˜ํ™˜