μ¬μ (Dictionary)
π’ μ μ
-
μ¬μ μ νμ κ°λ₯ν ννμ (ν€,μμ)μ νλͺ©λ€μ λͺ¨μμ λͺ¨λΈλ§ ν κ²μ΄λ€.
-
μ¬μ μ κ΄ν μ£Όμ μμ
1. νμ(Searching)
2. μ½μ (Inserting)
3. μμ (Deleting) -
μ¬μ μλ λ μ’ λ₯μ μ¬μ μ‘΄μ¬νλ€.
1. 무μμ¬μ ADT (Ex. "κ°κ³λΆ") π "μμκ° μλ€"
2. μμμ¬μ ADT (Ex. "μΆμλΆ", "λ°±κ³Όμ¬μ ") π "νλ² or μμμ,λͺ¨μμ" λ±μ μ λ ¬λ μμκ° μλ€. -
μ¬μ μμ©μλ λ κ°μ§
1. μ§μ μμ© π "μ°λ½μ² λͺ©λ‘", "μ μ©μΉ΄λ μ¬μ©μΉμΈ", "μΈν°λ·μ£Όμ 맀ν"
2. κ°μ μμ© π "μκ³ λ¦¬μ¦ μνμ μν 보쑰 λ°μ΄ν°κ΅¬μ‘°", "λ€λ₯Έ λ°μ΄ν°κ΅¬μ‘°λ₯Ό ꡬμ±νλ μμ"
π’ νμ
-
λΉκ³΅μμ : νμ(Search)μ λ°μ΄ν° μ§λ¨μΌλ‘λΆν° νΉμ ν μ 보λ₯Ό μΆμΆν¨μ λ§νλ€.
-
곡μμ : νμ(Search)μ μ¬μ μΌλ‘ ꡬνλ λ°μ΄ν° μ§λ¨μΌλ‘λΆν° μ§μ λ ν€(key)μ μ°κ΄λ λ°μ΄ν° μμλ₯Ό λ°νν¨μ λ§νλ€.
-
μ¬μ ꡬνμ λ°λ₯Έ νμ κΈ°λ²
ꡬν νν | ꡬν μ’ λ₯ | μ | μ£Όμ νμ κΈ°λ² |
리μ€νΈ | 무μμ¬μ ADT | κΈ°λ‘(log)νμΌ | μ ννμ |
μμμ¬μ ADT | μΌλν | μ΄μ§νμ | |
νΈλ¦¬ | νμνΈλ¦¬ | μ΄μ§νμνΈλ¦¬ AVL νΈλ¦¬ μ€νλ μ΄ νΈλ¦¬ |
νΈλ¦¬νμ |
ν€μν μ΄λΈ | ν΄μ± |
π’ 무μμ¬μ ADT
-
무μ리μ€νΈλ₯Ό μ¬μ©νμ¬ κ΅¬νλ μ¬μ π μ¬μ νλͺ©λ€μ μμμ μμλ‘ λ¦¬μ€νΈμ μ μ₯
( μ΄μ€μ°κ²°λ¦¬μ€νΈ λλ μν λ°°μ΄μ μ¬μ© ) -
μ±λ₯
μ½μ : O(1) μμ π μλ‘μ΄ νλͺ©μ κΈ°μ‘΄ 리μ€νΈμ 맨 μ λλ 맨 λ€μ μ½μ νλ©΄ λκΈ° λλ¬Έ
μμ : O(N) μμ π (μ΅μ μ κ²½μ°)νλͺ©μ΄ μ‘΄μ¬νμ§ μμκ²½μ°, 리μ€νΈ μ 체λ₯Ό μνν΄μΌ νκΈ° λλ¬Έ
νμ : O(N) μμ π (μ΅μ μ κ²½μ°)νλͺ©μ΄ μ‘΄μ¬νμ§ μμκ²½μ°, 리μ€νΈ μ 체λ₯Ό μνν΄μΌ νκΈ° λλ¬Έ - ν¨κ³Όμ μΈ κ²½μ° : μκ·λͺ¨ μ¬μ , or μ½μ μ λΉλ²νλ, νμμ΄λ μμ λ λλ¬Έ μ¬μ ( Ex. μλ²μ λ‘κ·ΈμΈ κΈ°λ‘ )
π’ 무μμ¬μ μ ννμ μκ³ λ¦¬μ¦
Alg findElement(K) // λ°°μ΄ Ver.
input Array[0..N-1], Key K
output element with key K
i <- 0 // 첫λ²μ§Έ λ°°μ΄ μΈλ±μ€ μ΄κΈ°ν
while(i < N) // λ°°μ΄ λκΉμ§ κ°λκΉμ§ λ°λ³΅
if(A[i].key == K) // A[i].key != λͺ©ν Keyκ°
return A[i].key
else // A[i].key != λͺ©ν Keyκ°
i <- i + 1
return NoSuchKey
================================================================
Alg findElement(K) // μ°κ²°λ¦¬μ€ Ver.
input doubly linked list with header H and trailer T, Key K
output element with Key K
i <- H.next // μ°κ²°λ¦¬μ€νΈ Headerμ λ€μ λ
Έλλ‘ μ΄κΈ°ν
while(i != T) // μ°κ²°λ¦¬μ€νΈμ λ Tailerμ κΉμ§
if(i.key == K) // i.key == λͺ©ν Keyκ°
return i.elem
else // i.key == λͺ©ν Keyκ°
i <- i.next
return NoSuchKey
π’ μμμ¬μ ADT
-
μμ리μ€νΈλ₯Ό μ¬μ©νμ¬ κ΅¬νλ μ¬μ π μ¬μ νλͺ©λ€μ λ°°μ΄μ κΈ°μ΄ν 리μ€νΈμ ν€λ‘ μ λ ¬λ μμλ‘ μ μ₯
-
μ±λ₯
μ½μ : O(N) π μ νλͺ©μ μ½μ νκΈ° μν κ³΅κ° ν보λ₯Ό μν΄, (μ΅μ μ κ²½μ°) Nκ°μ κΈ°μ‘΄ νλͺ©μ μ΄λν΄μΌ νλ€.
μμ : O(N) π νλͺ©μ΄ μμ λ 곡κ°μ κΈ°μ‘΄ νλͺ©λ€λ‘ λ©κΎΈκΈ° μν΄ (μ΅μ μ κ²½μ°) Nκ°μ κΈ°μ‘΄ νλͺ© μ΄λν΄μΌ νλ€.νμ : O(log(N)) π μ΄μ§νμμ μ¬μ©νλ©΄ κ°λ₯νλ€. -
ν¨κ³Όμ μΈ κ²½μ° : μκ·λͺ¨ μ¬μ , or νμμ΄ λΉλ²νλ, μ½μ μμ λ λλ¬Έ μ¬μ ( Ex. μ νλ²νΈλΆ )
π’ μ΄μ§νμ(Binary Search)
-
ν€κ°μΌλ‘ λ "λ°°μ΄(Array)"μ κΈ°μ΄ν 리μ€νΈλ‘ ꡬνλ μ¬μ μ λν΄ νμ μμ μ μννλ€.
-
λ°°μ΄μ ν€κ°λ€μ λ°λμ "μ λ ¬(Sorted)"λμ΄ μμ΄μΌ νλ€.
-
μ¬κ·μ μΈ λ°©μ λΉμ¬κ·μ λ°©μμ΄ λ κ°μ§ λͺ¨λ ꡬν κ°λ₯νλ€.
- μ λ ₯ν¬κΈ°(N)μ λ‘κ·Έ μ(log(N))μ ν΄λΉνλ μμ μ¬κ·(or λΉμ¬κ·)λ₯Ό μνν ν μ μ§νλ€. ( Ex. μ€λ¬΄κ³ κ° )
π’ μ¬κ·μ μ΄μ§νμ
Alg findElement(K)
input sorted Array A[0..N-1], K
output element with key K
return rFE(K, 0, N-1)
=====================================
Alg rFE(K,l,r) // l,rμ λ°°μ΄μ‘°μ¬ λ²μμ μΌμͺ½,μ€λ₯Έμͺ½ μΈλ±μ€
if(l > r)
return NoSuchKey
mid <- (l + r)/2 // μ¬κ·νΈμΆλ§λ€, μ€μ μΈλ±μ€ midκ° κ΅¬νκ³
if(K = Key(A[mid])) // A[mid]κ° = μ°ΎμμΌλ keyκ°, A[mid]κ° λ°ν
return element(A[mid])
elseif(K < Key(A[mid])) // A[mid]κ° > μ°ΎμμΌλ keyκ°, (λ²μλ₯Ό l~(mid-1)λ‘ μ¬κ· μ΄μ§νμ μ¬κ·νΈμΆ)
return rFE(K, l, mid-1)
else // A[mid]κ° < μ°ΎμμΌλ keyκ°, (λ²μλ₯Ό (mid+1)~r)λ‘ μ¬κ· μ΄μ§νμ μ¬κ·νΈμΆ)
return rFE(K, mid+1, r)
π’ λΉμ¬κ·μ μ΄μ§νμ
Alg findElement(K)
input sorted Array A[0..N-1], Key K
output element with key K
l <- 0
r <- N-1
while(l <= r) // μ¬κ·νΈμΆ λμ ,λ°λ³΅λ¬Έ μ¬μ©
mid <- (l + r) / 2 // 맀 κ³Όμ , λ°°μ΄μ μ€μ μΈλ±μ€ mid ꡬνκ³
if(K == Key(A[mid])) // A[mid] == λͺ©ν Key
return element(A[mid])
elseif(K < key(A[mid])) // A[mid] > λͺ©ν Key
r <- (mid - 1)
else // A[mid] < λͺ©ν Key
l <- (mid + 1)
return NoSuchKey
π’ μ΄μ§νμ μν μ
π’ [ μ°Έκ³ ] μ¬κ· μκ³ λ¦¬μ¦ π λΉμ¬κ· μκ³ λ¦¬μ¦ μ ννκΈ° μν μΌλ°μ μΈ μλ Ή
-
μ¬κ·νΈμΆμ λ°λ³΅λ¬ΈμΌλ‘ λ체νλ€.
-
μ¬κ·μ 맀κ°λ³μλ₯Ό λ°λ³΅λ¬Έμ μ μ΄λ³μλ‘ μ ννλ€.
-
μ΅μ΄μ μ¬κ·νΈμΆμ μ¬μ©νλ 맀κ°λ³μ κ°μ λ°λ³΅λ¬Έ μ§μ μ μ΄κΈ°νλ‘ μ ννλ€.
-
μ¬κ·μ BaseCaseλ₯Ό λ°λ³΅λ¬Έμ μ’ λ£ μ‘°κ±΄μΌλ‘ μ ννλ€.