κ²μ?
μ΄λ€ 쑰건μ λ§μ‘±νλ λ°μ΄ν°λ₯Ό μ°Ύμλ΄λ κ².
ν€?
μ£Όλͺ©νλ νλͺ©. μ£Όλ‘ λ°μ΄ν°μ μΌλΆ.
κ²μμ μ’
λ₯?
λ°°μ΄ κ²μ/ μ°κ²° 리μ€νΈ κ²μ/ μ΄μ§ κ²μ νΈλ¦¬ κ²μ
1) μ ν κ²μ: 무μμλ‘ λμ΄λμ λ°μ΄ν° μ§ν©μμ κ²μμ μν
2) μ΄μ§ κ²μ: μΌμ ν κ·μΉμΌλ‘ λμ΄λμ λ°μ΄ν° μ§ν©μμ μμ£Ό λΉ λ₯Έ κ²μμ μν
3) ν΄μλ²: μΆκ°, μμ κ° μμ£Ό μΌμ΄λλ λ°μ΄ν° μ§ν©μμ μμ£Ό λΉ λ₯Έ κ²μμ μν
- 체μΈλ²: κ°μ ν΄μκ° λ°μ΄ν°λ₯Ό μ°κ²° 리μ€νΈλ‘ μ°κ²°νλ λ°©λ²
- μ€ν μ£Όμλ²: λ°μ΄ν°λ₯Ό μν ν΄μκ°μ΄ μΆ©λν λ μ¬ν΄μνλ λ°©λ²
μνλ ν€κ°μ κ°μ§ μμλ₯Ό μ°Ύμ λκΉμ§ 맨 μλΆν° μ€μΊνμ¬ μμλλ‘ κ²μνλ μκ³ λ¦¬μ¦
μ’
λ£μ‘°κ±΄ 1. i==len(a) 2.a[i]=key
μλλ μμμ μλ£νμΈ μνμ€μμ κ²μν μ μμ.
from typing import Any, Sequence
def seq_search(a: Sequence, key: Any) -> int:
i=0
while True:
if i==len(a):
return -1 #κ²μμ μ€ν¨νμ¬ -1 λ°ν
if a[i]==key:
return i #κ²μμ μ±κ³΅νμ¬ νμ¬ κ²μ¬ν λ°°μ΄μ μΈλ±μ€ λ°ν
i+=1
###############or#################
for i in range(len(a)):
if a[i]==key:
return i
return -1
if __name__='__main__':
num=int(input('μμ μ μ
λ ₯: '))
x=[None]*num
for i in range(num):
x[i]=int(input*f'x[{i}]: '))
ky=int(input('κ²μν κ° μ
λ ₯: ')) #κ²μν ν€ kyλ₯Ό μ
λ ₯λ°μ
idx=seq_search(x, ky) #kyμ κ°μ΄ κ°μ μμλ₯Ό xμμ κ²μ
if idx==-1:
print('κ²μκ°μ κ°λ μμκ° μ‘΄μ¬νμ§ μμ΅λλ€.')
else:
print(f'κ²μκ°μ x[{idx}]μ μμ΅λλ€.')
맨λμ κ²μν ν€κ°μ 보μ΄λ‘ μΆκ°
-> μ’
λ£μ‘°κ±΄ 1λ²μ νλ¨ν νμκ° μμ
-> λ°λ³΅μ μ’
λ£νλ νλ¨νμλ₯Ό μ λ°μΌλ‘ μ€μ
from typing import Any, Sequence
import copy
def seq_search(seq: Sequence, key: Any) -> int:
a=copy.deecopy(seq) #seq λ°°μ΄ λ³΅μ¬
a.append(key) #λ³΄μ΄ key μΆκ°
i=0
while True:
if a[i]==key:
break
i+=1
return -1 if i==len(seq) else i
(μλ΅)
μμκ° μ€λ¦μ°¨μμ΄λ λ΄λ¦Όμ°¨μμΌλ‘ μ λ ¬λ λ°°μ΄μμ μ’ λ ν¨μ¨μ μΌλ‘ κ²μν μ μλ μκ³ λ¦¬μ¦
μ’
λ£μ‘°κ±΄ 1.a[pc]μ keyκ° μΌμΉνλ κ²½μ° 2.κ²μ λ²μκ° λ μ΄μ μλ κ²½μ°(=plμ΄ prλ³΄λ€ μ»€μ§)
from typing import Any, Sequence
def bin_search(a: Sequence, key: Any) -> int:
pl=0 #κ²μ λ²μ 맨 μ μμμ μΈλ±μ€
pr=len(a)-1 #κ²μ λ²μ 맨 λ μμμ μΈλ±μ€
while True:
pc=(pl+pr)//2 #μ€μ μμμ μΈλ±μ€
if a[pc]==key:
return pc #κ²μ μ±κ³΅
elif a[pc]<key:
pl=pc+1 #κ²μ λ²μλ₯Ό λ€μͺ½ μ λ°μΌλ‘ μ’ν
else:
pr=pc-1 #κ²μ λ²μλ₯Ό μμͺ½ μ λ°μΌλ‘ μ’ν
if pl>pr:
break
return -1 #κ²μ μ€ν¨
if __name__='__main__':
num=int(input('μμ μλ₯Ό μ
λ ₯νμΈμ: '))
x=[None]*num #μμ μκ° numμΈ λ°°μ΄ μμ±
print('λ°°μ΄ λ°μ΄ν°λ₯Ό μ€λ¦μ°¨μμΌλ‘ μ
λ ₯νμΈμ.')
x[0]=int(input('x[0]: '))
for i in range(1, num):
while True:
x[i]=int(input(f'x[{i}]: '))
if x[i] >= x[i-1]: #λ°λ‘ μ§μ μ μ
λ ₯ν μμκ°λ³΄λ€ ν° κ° μ
λ ₯
break
ky=int(input('κ²μν κ°μ μ
λ ₯νμΈμ.: ')) #κ²μν ν€κ° ky μ
λ ₯
idx=bin_search(x, ky)
if idx==-1:
print('κ²μκ°μ κ°λ μμκ° μ‘΄μ¬νμ§ μμ')
else:
print(f'κ²μκ°μ x[{idx}]μ μμ')
O(f(n))+O(g(n))==O(max(f(n),g(n)))
->2κ° νΉμ κ·Έ μ΄μμ κ³μ°μΌλ‘ ꡬμ±λ μκ³ λ¦¬μ¦μ μ 체 볡μ‘λλ μ°¨μμ΄ κ°μ₯ λμ 볡μ‘λλ₯Ό μ νν¨.
μ νκ²μ μκ³ λ¦¬μ¦μ 볡μ‘λ: O(1)+O(n)+O(1)+O(n)+O(1)=O(max(1,n,n,1,n,1))=O(n)
μ΄μ§κ²μ μκ³ λ¦¬μ¦μ 볡μ‘λ: O(1)+O(1)+O(log n)+O(1)+O(log n)+...+O(1)=O(log n)
'λ°μ΄ν°λ₯Ό μ μ₯ν μμΉ=μΈλ±μ€'λ₯Ό κ°λ¨ν μ°μ°μΌλ‘ ꡬνλ κ².
ν΄μκ°: λ°°μ΄μ ν€(=μμμ κ°)λ₯Ό μμ κ°μλ‘ λλ λλ¨Έμ§. λ°μ΄ν°μ μ κ·Όν λ κΈ°μ€
ν΄μ ν
μ΄λΈ: ν΄μκ°μ μΈλ±μ€λ‘ ν λ°°μ΄μ ν€λ₯Ό μ μ₯
λ²ν·: ν΄μ ν
μ΄λΈμμ λ§λ€μ΄μ§ μμ
ν΄μ μΆ©λ: ν€μ ν΄μκ°μ λμκ΄κ³λ μΌλ°μ μΌλ‘ n:1. μ μ₯ν λ²ν·μ΄ μ€λ³΅λλ νμ.
ν΄μκ°μ΄ κ°μ λ°μ΄ν°λ₯Ό μ²΄μΈ λͺ¨μμ μ°κ²° 리μ€νΈλ‘ μ°κ²°νλ λ°©λ².
Node ν΄λμ€:
νλ-key, value, next
κ°λ³ λ²ν·μ λνλ, ν€μ κ°μ΄ μ§μ μ΄λ£¨λ ꡬ쑰, ν€μ ν΄μν¨μλ₯Ό μ μ©νμ¬ ν΄μκ°μ ꡬν¨.
from __future__ import annotations
from typing import Any, Type
import hashlib
class Node:
def __init__(self, key: Any, value: Any, next: Node)->None:
self.key=key
self.value=value
self.next=next
ChainnedHash ν΄λμ€:
νλ-capacity(ν΄μν
μ΄λΈμ ν¬κΈ°), table(ν΄μν
μ΄λΈμ μ μ₯νλ listν λ°°μ΄)
keyκ° intνμΈ κ²½μ° / intνμ΄ μλ κ²½μ°
1) search()
1. ν΄μ ν¨μλ₯Ό μ΄μ©νμ¬ ν€λ₯Ό ν΄μκ°μΌλ‘ λ³ν
2. ν΄μκ°μ μΈλ±μ€λ‘ νλ λ²ν·μ μ£Όλͺ©
3. λ²ν·μ΄ μ°Έμ‘°νλ μ°κ²°λ¦¬μ€νΈλ₯Ό 맨 μλΆν° μ°¨λ‘λ‘ μ€μΊ. ν€μ κ°μ κ°μ΄ λ°κ²¬λλ©΄ κ²μμ μ±κ³΅, μμμ 맨 λκΉμ§ μ€μΊν΄μ λ°κ²¬λμ§ μμΌλ©΄ κ²μμ μ€ν¨.
2) add()
1,2. (λμΌ)
3. λ²ν·μ΄ μ°Έμ‘°νλ μ°κ²° 리μ€νΈ 맨 μλΆν° μ°¨λ‘λ‘ μ ν κ²μ, ν€μ κ°μ κ° λ°κ²¬ μ ν€κ° μ΄λ―Έ λ±λ‘λ κ²½μ°μ΄λ―λ‘ μΆκ° μ€ν¨. μμ 맨λκΉμ§ λ°κ²¬λμ§ μμΌλ©΄ ν΄μκ°μΈ 리μ€νΈμ 맨 μμ λ
Έλ μΆκ°
3) remove()
1,2. (λμΌ)
3. λ²ν·μ΄ μ°Έμ‘°νλ μ°κ²° 리μ€νΈ 맨 μλΆν° μ°¨λ‘λ‘ μ ν κ²μ, ν€μ κ°μ κ° λ°κ²¬ μ κ·Έ λ
Έλλ₯Ό 리μ€νΈμμ μμ , κ·Έλ μ§ μμΌλ©΄ μμ μ μ€ν¨.
4) dump() : ν΄μν μ΄λΈμ λ΄μ©μ νκΊΌλ²μ ν΅μ§Έλ‘ μΆλ ₯
μΆ©λμ΄ λ°μνμ λ μ¬ν΄μλ₯Ό μννμ¬ λΉ λ²ν·μ μ°Ύλ λ°©λ²(λ«ν ν΄μλ²)
μμ μΆκ°- μ ν νμ¬λ²
μμ μμ - ν΄μκ°μ΄ λ€λ₯Έ κ°μ κ²μ νΌλμ λ§κΈ° μν΄ μμ μλ£λ μμΉ λ²ν·μ μμ± β
μ μ μ₯
- λΉμ΄μλ λ²ν·μ΄ '-'
μμ κ²μ- β
μ λ§λ μ μ¬ν΄μ λ°λ³΅νμ¬ κ²μ μ±κ³΅