๐Ÿ’ฟ Data/๋ถ€ํŠธ์บ ํ”„

[TIL] 95. python ์ž๋ฃŒ๊ตฌ์กฐ ๋ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ธฐ๋ณธ

Jayden1116 2022. 3. 31. 17:42

ํ‚ค์›Œ๋“œ

  • ์ž๋ฃŒ๊ตฌ์กฐ
  • ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • ๋ณต์žก๋„, Big O

์ž๋ฃŒ๊ตฌ์กฐ

  • ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ๊ตฌ์กฐ
  • ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ์ •๋ฆฝํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ณ„๋กœ ๋‹ค์–‘ํ•œ ์ž๋ฃŒํ˜•์ด ๋ฐœ์ƒ
  • ๊ทธ ์ค‘ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ํ˜•ํƒœ๋กœ ๋ฐฐ์—ด์ด ๋“ฑ์žฅํ•˜์˜€๊ณ , ํŒŒ์ด์ฌ์—์„œ๋Š” ๋ฆฌ์ŠคํŠธ์™€ ํŠœํ”Œ์„ ํ†ตํ•ด ๋ฐฐ์—ด์„ ๊ตฌํ˜„

 

image

[์ž๋ฃŒ๊ตฌ์กฐ] ๋ฆฌ์ŠคํŠธ(in python)

  • ํŒŒ์ด์ฌ์—์„œ์˜ ๋ฆฌ์ŠคํŠธ๋Š” ๋ฐฐ์—ด๊ณผ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ํŠน์ง•์„ ๋ชจ๋‘ ๊ฐ–๊ณ  ์žˆ์Œ
  • ์ผ๋ฐ˜์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ์˜ ๋ฐฐ์—ด : ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ๋…ธ๋“œ์— ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ : ์ธ๋ฑ์Šค์˜ ํฌ๊ธฐ๋ฅผ ์ž์œ ๋กญ๊ฒŒ ํ™•์žฅ ๊ฐ€๋Šฅ, ์„œ๋กœ ๋‹ค๋ฅธ ์ž๋ฃŒํ˜•์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ

์•Œ๊ณ ๋ฆฌ์ฆ˜

  • ์ปดํ“จํ„ฐ์— ๋‚ด๋ฆฌ๋Š” ๋ช…๋ น์˜ ์ ˆ์ฐจ
  • ์ฒ˜๋ฆฌ์˜ ๋Œ€์ƒ์ด ๋˜๋Š” ๊ฒƒ์€ ์ž…๋ ฅ๊ฐ’ ๋ฐ์ดํ„ฐ
  • ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ ํ›„ ์‚ฌ์šฉ(๋ณ€์ˆ˜, ํ•จ์ˆ˜, ํด๋ž˜์Šค ๋“ฑ์— ๊ฐ์ฒด๋กœ ์ €์žฅ)

๋ณต์žก๋„

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

[๋ณต์žก๋„] ์‹œ๊ฐ„ ๋ณต์žก๋„(Big O)

Big O

  • ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ํ‘œ๊ธฐ๋ฒ•
  • Big O ํ‘œ๊ธฐ๋ฒ•๋งŒ์œผ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ฑ๋Šฅ์„ ์˜ˆ์ธกํ•  ์ˆ˜๋Š” ์—†์œผ๋‚˜ ์„ฑ๋Šฅ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ง๊ด€์ ์œผ๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Œ

 

image

๊ฐ„๋‹จํ•œ ์‹œ๊ฐ„๋ณต์žก๋„ ์˜ˆ์‹œ

arr = [1, 2, 3, 4, 5]

# O(1)
def O1(arr):
    print(arr[0])

# O(logN) -> ์ด์ค‘ํƒ์ƒ‰
def Ologn(arr):
    low = 0
    high = len(arr) - 1
    target = int(input())
    if target < arr[low] or target > arr[high]:
        return '๊ฐ’์ด ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚ฌ์Šต๋‹ˆ๋‹ค.'
    else:
        while True:
            mid = (low + high) // 2
            if target < arr[mid]:
                high = mid - 1
            elif target > arr[mid]:
                low = mid + 1
            else:
                return mid

# O(N)
def ON(arr):
    for value in arr:
        print(value)

# O(N^2) -> ์ด์ค‘ ๋ฐ˜๋ณต๋ฌธ
def ON2(arr):
    for value1 in arr:
        for value2 in arr:
            print(value1 * value2)

image


์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๋„ˆ๋ฌด ๋ณต์žกํ•˜๊ฒŒ ์ƒ๊ฐํ•˜์ง€๋ง๊ณ  ์ง๊ด€์ ์œผ๋กœ ์ž…๋ ฅ๊ฐ’์ด ๋“ค์–ด๊ฐ”์„ ๋•Œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋‚ด์—์„œ ์ž๋ฃŒ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋‹ค๋ค„์ง€๋Š”์ง€ ์ƒ๊ฐํ•ด๋ณด๋ฉด ํŽธํ•˜๋‹ค!
๋˜ํ•œ, ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ๋Š” ๋ณดํ†ต ์ตœ์•…์˜ ๊ฒฝ์šฐ๋ฅผ ๊ฐ€์ •ํ•œ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.(๊ทธ๋ ‡๊ฒŒ ํ•ด์•ผ ๋Œ€๋ถ€๋ถ„์˜ ์ƒํ™ฉ์— ๋Œ€์ฒ˜๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ˆ)