๐Ÿ“’ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜

Kimdongkiยท2024๋…„ 3์›” 25์ผ

์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ชฉ๋ก ๋ณด๊ธฐ
1/8

๐Ÿ“Œ ์„ ํ˜• ํƒ์ƒ‰(Linear Search) : O(n)

  • ์ฒซ๋ฒˆ์งธ Index๋ถ€ํ„ฐ ์ˆœ์ฐจ์ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด์— ๋น„๋ก€ํ•˜๋Š” ์‹œ๊ฐ„์„ ์†Œ์š”ํ•œ๋‹ค.
  • ์ตœ์•…์˜ ๊ฒฝ์šฐ ๋ชจ๋“  ์›์†Œ๋ฅผ ๋น„๊ตํ•ด์•ผํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์žฅ์ 
    a. ๊ตฌํ˜„์ด ์‰ฝ๋‹ค.
    b. Target Value๊ฐ€ ๋ฆฌ์ŠคํŠธ์˜ ์•ž๋ถ€๋ถ„์— ์žˆ์„ ๊ฒฝ์šฐ ํšจ์œจ์ ์ด๋‹ค.
  • ๋‹จ์ 
    a. ์†Œ์š” ์‹œ๊ฐ„์ด ๋ฆฌ์ŠคํŠธ์˜ ํฌ๊ธฐ์— ๋”ฐ๋ผ ์„ ํ˜•์ ์œผ๋กœ ์ฆ๊ฐ€ํ•œ๋‹ค.
    b. ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๊ฐ€ ๊ธธ๊ฑฐ๋‚˜ Target Value๊ฐ€ ๋’ท๋ถ€๋ถ„์— ์žˆ์„ ๊ฒฝ์šฐ ๋น„ํšจ์œจ์ ์ด๋‹ค.

๐Ÿ“™ ๊ตฌํ˜„

def Linear_Search(List, Val):
	i = 0
    while i<len(List):
    	if List[i] == Val:
        	return i
        i += 1
    return -1

๐Ÿ“Œ ์ด์ง„ ํƒ์ƒ‰(Binary Search) : O(log n)

  • ํƒ์ƒ‰ํ•˜๋ ค๋Š” ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ด๋ฏธ ์ •๋ ฌ๋œ ์ƒํƒœ์ผ๋•Œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ํฌ๊ธฐ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ๋‹ค๋Š” ์„ฑ์งˆ์„ ์ด์šฉํ•˜๋Š” ๊ฒƒ
  • ํ•œ ๋ฒˆ ๋น„๊ต๊ฐ€ ์ด๋ฃจ์–ด์งˆ ๋•Œ๋งˆ๋‹ค ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ˜์”ฉ ์ค„์ธ๋‹ค.
  • ์žฅ์ 
    a. ๋ฆฌ์ŠคํŠธ์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก Target Value๋ฅผ ํƒ์ƒ‰ํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ด ๋” ๋А๋ฆฌ๊ฒŒ ์ฆ๊ฐ€ํ•œ๋‹ค.
    b. ์ •๋ ฌ๋œ ๋ฆฌํŠธ์Šค์˜ ๊ธธ์ด๊ฐ€ ๊ธธ๊ฑฐ๋‚˜ Target Value๊ฐ€ ๋ฆฌ์ŠคํŠธ์˜ ์ค‘์•™์— ์œ„์น˜ํ•  ๋•Œ ์ ์šฉํ•˜๊ธฐ ์ข‹๋‹ค.
    c. ์žฌ๊ท€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋‹จ์ 
    a. ๋ฆฌ์ŠคํŠธ๋ฅผ ์ •๋ ฌํ•ด์•ผ ํ•˜๋Š” ์ถ”๊ฐ€ ๋‹จ๊ณ„๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
    b. ์„ ํ˜• ํƒ์ƒ‰๊ณผ ๋น„๊ตํ•˜์˜€์„๋•Œ ์ƒ๋Œ€์ ์œผ๋กœ ๊ตฌํ˜„์ด ๋ณต์žกํ•˜๋‹ค.

๐Ÿ“™ ๊ตฌํ˜„

def Binary_Search(List, Val):
	lower = 0
    upper = len(List) - 1
    idx = -1
    while lower <= upper:
    	middle = (lower + upper) // 2
        if List[middle] == Val:
        	idx = middle
            break
        elif List[middle] < Val:
        	lower = middle + 1
        else:
        	upper = middle - 1
    return idx

0๊ฐœ์˜ ๋Œ“๊ธ€