Skip to content

Latest commit

ย 

History

History
73 lines (57 loc) ยท 2.46 KB

Binary_Search.md

File metadata and controls

73 lines (57 loc) ยท 2.46 KB

์ด๋ถ„ํƒ์ƒ‰ (Binary Search)

์ •๋ ฌ๋˜์–ด ์žˆ๋Š”(์ด๋ถ„ ํƒ์ƒ‰์˜ ์ฃผ์š” ์กฐ๊ฑด) ๋ฐฐ์—ด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์œผ๋ ค ์‹œ๋„ํ•  ๋•Œ,
์ˆœ์ฐจํƒ์ƒ‰์ฒ˜๋Ÿผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ํ•˜๋‚˜์”ฉ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ฒดํฌํ•˜์—ฌ ๊ฐ’์„ ์ฐพ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ
ํƒ์ƒ‰ ๋ฒ”์œ„๋ฅผ ์ ˆ๋ฐ˜์”ฉ ์ค„์—ฌ๊ฐ€๋ฉฐ ์ฐพ์•„๊ฐ€๋Š” Search ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

ํƒ์ƒ‰ ๊ณผ์ •

  • ์šฐ์„  ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” ๋ฐฐ์—ด์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • low์™€ high๋กœ mid๊ฐ’์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  • mid์™€ ๋‚ด๊ฐ€ ๊ตฌํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฐ’๊ณผ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.
  • ๊ตฌํ•  ๊ฐ’์ด mid๋ณด๋‹ค ๋†’์œผ๋ฉด : low = mid + 1
    ๊ตฌํ•  ๊ฐ’์ด mid๋ณด๋‹ค ๋‚ฎ์œผ๋ฉด : high = mid - 1
  • low > high๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ ๊ณ„์† ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.

Gif๋กœ ์ดํ•ดํ•˜๊ธฐ

binary-and-linear-search-animations

ํŠน์ง•

  • ์‹œ๊ฐ„๋ณต์žก๋„
    ์œ ํ•œ ์ •๋ ฌ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ N์ด๋ผ ํ•˜๋ฉด,
    ๋ฐฐ์—ด ๋‚ด์— ํƒ์ƒ‰ ๊ฐ’์ด ์—†๋Š” ์ตœ์•…์˜ ๊ฒฝ์šฐ,
    N 1/2 1/2 * 1/2... ์œผ๋กœ ๋ฒ”์œ„ ๋‚ด ์›์†Œ๊ฐ€ ํ•˜๋‚˜๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ ์ง„ํ–‰ํ•˜๋ฏ€๋กœ
    N*(1/2)K = 1 -> K = log2N์œผ๋กœ ์ˆ˜์‹ํ™” ํ•  ์ˆ˜ ์žˆ๊ณ ,
    ์–‘ ๋ณ€์— 2K๋ฅผ ๊ณฑํ•˜๊ณ  log2๋ฅผ ์ทจํ•˜์—ฌ ์ •๋ฆฌํ•˜๋ฉด
    O(log2N)์œผ๋กœ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“Œ ์˜ˆ์ œ (Baekjoon)

๋ฐฑ์ค€ - ์ˆ˜ ์ฐพ๊ธฐ

๋ฌธ์ œ image

ํ’€์ด

n๊ฐœ์˜ ์ •์ˆ˜๊ฐ€ ๋“ค์–ด์žˆ๋Š” ์ง‘ํ•ฉ A์•ˆ์—
๋‹ค๋ฅธ m๊ฐœ์˜ ์ •์ˆ˜๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

์ง‘ํ•ฉ ์ž๋ฃŒํ˜•์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ„๋‹จํ•˜๊ฒŒ ํ’€ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ด๋ถ„ํƒ์ƒ‰์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ฝ”๋“œ(Python)

def binary(l, nList, low, high):
    if low > high:
        return 0
    mid = (low + high) // 2
    if l == nList[mid]:
        return 1
    elif l < nList[mid]:
        return binary(l, nList, low, mid - 1)
    else:
        return binary(l, nList, mid + 1, high)

n = int(input())
A = sorted(map(int, input().split()))
m = input()
M = map(int, input().split())

for l in M:
    low = 0
    high = len(A) - 1
    print(binary(l, A, low, high))

index๋ฅผ ๊ธฐ์ค€์œผ๋กœ low high๋ฅผ ๋‚˜๋ˆ„๊ณ 

์ด๋ถ„ํƒ์ƒ‰์˜ ํƒ์ƒ‰ ์ข…๋ฃŒ ์กฐ๊ฑด์€

mid ๊ฐ’์ด ์ฐพ์œผ๋ ค๋Š” ์ˆ˜๋ž‘ ๊ฐ™์œผ๋ฉด return ์„ ํ•ด์ฃผ๊ณ 

์ฐพ๋Š” ๊ฐ’์ด ์—†์„๋•Œ low๊ฐ€ high๋ณด๋‹ค ์ปค์งˆ๊ฒฝ์šฐ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

Reference

https://www.penjee.com
https://kangworld.tistory.com/65