11. Backtracking(DFS) B&B(BFS)

μ§€λ“œλž˜κ³€λ“œλž˜λ°₯Β·2025λ…„ 6μ›” 22일

μ•Œκ³ λ¦¬μ¦˜

λͺ©λ‘ 보기
4/7
post-thumbnail

πŸŽ’ 0/1 Knapsack Problem (with Backtracking)

πŸ“Œ 문제 μ •μ˜

  • 무게 μ§‘ν•©:
    wi=(w1,w2,...,wn)w_i = (w_1, w_2, ..., w_n)

  • 이읡 μ§‘ν•©:
    pi=(p1,p2,...,pn)p_i = (p_1, p_2, ..., p_n)

  • μ΅œλŒ€ 수용 무게:
    WW (Knapsack μš©λŸ‰)

  • λͺ©ν‘œ:
    총 λ¬΄κ²Œκ°€ WWλ₯Ό λ„˜μ§€ μ•ŠμœΌλ©΄μ„œ, 이읡(profit)이 μ΅œλŒ€κ°€ λ˜λ„λ‘ μ•„μ΄ν…œ μ§‘ν•© AA 선택


이 μŠ¬λΌμ΄λ“œμ—μ„œλŠ” 0/1 Knapsack λ¬Έμ œμ—μ„œμ˜ Backtrackingκ³Ό Bounding Function 섀계λ₯Ό 닀루고 μžˆμ–΄μš”. μš”μ  μ •λ¦¬ν•΄μ€„κ²Œμš”:


πŸ”Ή Promising / Nonpromising Function (였λ₯Έμͺ½ μœ„)

Promising functionμ΄λž€?
탐색을 계속할지 말지 νŒλ‹¨ν•˜λŠ” κΈ°μ€€ ν•¨μˆ˜.

  • 쑰건 1: ν˜„μž¬ weight > W β†’ ν™•μž₯ 쀑지
  • 쑰건 2: (ν˜„μž¬ weight + λ‹€μŒ μ•„μ΄ν…œ weight) > W β†’ stop
  • 쑰건 3: (ν˜„μž¬ weight + λ‹€μŒ μ•„μ΄ν…œλ“€μ˜ 총합) < W β†’ stop

β‡’ 즉, 더 넣어봐도 Wλ₯Ό λ„˜μ§€ λͺ»ν•˜λ©΄ ν™•μž₯ν•  ν•„μš”κ°€ μ—†μŒ.
β‡’ 이게 λ°”λ‘œ Nonpromising, 즉 더 이상 μœ λ§ν•˜μ§€ μ•ŠμŒ.

✳️ μ—¬κΈ°μ„œ λ§ν•˜λŠ” κ²ƒμ²˜λŸΌ:
Nonpromising function β‰ˆ Bounding function 으둜 봐도 됨.


✴️ 탐색 쑰건:

bound(g+h) < BEST(ν˜„μž¬κΉŒμ§€ 얻은 μ΅œμ„ μ˜ 이읡) β†’ 더 탐색 μ•ˆ 함 (nonpromising)
  • hλŠ” λ¬Έμ œλ§ˆλ‹€ λ‹€μ–‘ν•œ λ°©μ‹μœΌλ‘œ μΆ”μ • κ°€λŠ₯ (κ΅μˆ˜λŠ” 자유둭게 해보라고 함)
  • μ˜ˆμ‹œμ—μ„œ hλŠ” fractional knapsack λ°©μ‹μœΌλ‘œ 일뢀 μ•„μ΄ν…œλ§Œ λ‚˜λˆ  λ‹΄λŠ” 것도 ν—ˆμš©ν•˜μ—¬ 계산

πŸ“Œ 정리

μš©μ–΄μ˜λ―Έ
Promisingμœ λ§ν•΄μ„œ 계속 탐색할 κ°€μΉ˜κ°€ 있음
Nonpromising더 탐색해도 졜적 해에 λͺ» λ―ΈμΉ¨ β†’ Prune
Bound Functionν˜„μž¬ 이읡 + 미래 μ΅œλŒ€ μΆ”μ • 이읡
g + h < BESTν˜„μž¬ κ²½λ‘œλŠ” 더 λ³Ό ν•„μš” μ—†μŒ

🧭 Promising / Non-promising 쑰건

Promising functionμ΄λž€?
탐색을 계속할지 말지 νŒλ‹¨ν•˜λŠ” κΈ°μ€€ ν•¨μˆ˜.

쑰건 1: ν˜„μž¬ weight > W β†’ ν™•μž₯ 쀑지
쑰건 2: (ν˜„μž¬ weight + λ‹€μŒ μ•„μ΄ν…œ weight) > W β†’ stop
쑰건 3: (ν˜„μž¬ weight + λ‹€μŒ μ•„μ΄ν…œλ“€μ˜ 총합) < W β†’ stop

β‡’ 즉, 더 넣어봐도 Wλ₯Ό λ„˜μ§€ λͺ»ν•˜λ©΄ ν™•μž₯ν•  ν•„μš”κ°€ μ—†μŒ.
β‡’ 이게 λ°”λ‘œ Nonpromising, 즉 더 이상 μœ λ§ν•˜μ§€ μ•ŠμŒ.

✳️ μ—¬κΈ°μ„œ λ§ν•˜λŠ” κ²ƒμ²˜λŸΌ:
Nonpromising function β‰ˆ Bounding function 으둜 봐도 됨.


πŸ“ Bound Function κ°œλ…

  • λ°±νŠΈλž˜ν‚Ήμ—μ„œ promising νŒλ‹¨ κΈ°μ€€ = bound function

  • μ •μ˜:
    Bound=g+h\text{Bound} = g + h

    • gg: μ§€κΈˆκΉŒμ§€ μ„ νƒν•œ μ•„μ΄ν…œλ“€μ˜ 이읡 총합 (ν˜„μž¬ profit)
    • hh: 남은 μ•„μ΄ν…œλ“€λ‘œλΆ€ν„° 얻을 수 μžˆλŠ” μ΅œλŒ€ 이읡의 μΆ”μ •μΉ˜
  • νŒλ‹¨ κΈ°μ€€:
    g+h<ν˜„μž¬κΉŒμ§€μ˜Β BESTg + h < \text{ν˜„μž¬κΉŒμ§€μ˜ BEST} β†’ Non-promising


πŸ”Έ μ˜ˆμ‹œ μˆ˜μ‹ (였λ₯Έμͺ½ μ•„λž˜):

  • g: item_1 ~ item_i κΉŒμ§€μ˜ 이읡 ν•©

  • h: item_i+1 ~ item_k κΉŒμ§€ 이읡 ν•©

    • item_k+1 μΌλΆ€λ§Œ 담을 수 μžˆλ‹€κ³  κ°€μ •ν•˜κ³  λΉ„μœ¨ 계산
p_k+1 / w_k+1 * 남은 무게

πŸ’‘ μΆ”κ°€ μ„€λͺ…

  • hh: κ²½ν—˜μ  μΆ”μ •κ°’ (heuristic)
    β†’ 미래 이읡을 μ˜ˆμΈ‘ν•˜κΈ° μœ„ν•œ μΆ”μ •μΉ˜

❓ κ΅μˆ˜λ‹˜ 질문

Q. hhλ₯Ό 크게 μΆ”μ •ν•˜λ©΄ pruning이 더 잘 될까?


βœ… Yes β€” μž₯점

  • Pruning power 증가
    β†’ μœ λ§ν•˜μ§€ μ•Šμ€ 경둜λ₯Ό 더 빨리 μž˜λΌλƒ„
    β†’ 탐색 속도 ν–₯상

❌ No β€” 단점

  • 잘λͺ»λœ κ°€μ§€μΉ˜κΈ° (Invalid pruning) λ°œμƒ κ°€λŠ₯
    β†’ μ‹€μ œλ‘œλŠ” 쒋은 ν•΄κ°€ μ‘΄μž¬ν•˜λŠ” 경둜λ₯Ό 쑰기에 μ œκ±°ν•  μœ„ν—˜
    β†’ 졜적 ν•΄λ₯Ό 놓칠 수 있음

πŸ” κ²°λ‘ 

  • hh 값은 보수적이고 μ‹ μ€‘ν•˜κ²Œ μ„€κ³„λ˜μ–΄μ•Ό 함
  • 속도와 μ •ν™•μ„± μ‚¬μ΄μ˜ κ· ν˜•μ΄ μ€‘μš”ν•¨


μœ„λŠ” Backtracking 으둜 ν‘Ό 것이닀 ( λΉ¨κ°• β†’ νŒŒλž‘ β†’ 핑크 )
λ‹€μŒμœΌλ‘œ Branch and Bound (B&B) μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•΄μ„œ ν’€μ–΄λ³΄μž



πŸ“˜ Branch and Bound

πŸ– κΈ°λ³Έ B&B Algorithm


πŸ†• NEW B&B Algorithm:

  1. Branch and Bound with Best-First (Search)

    • 평가 ν•¨μˆ˜:

      f(n)=g(n)+h(n)f(n) = g(n) + h(n)

      (g: ν˜„μž¬κΉŒμ§€ λΉ„μš©, h: νœ΄λ¦¬μŠ€ν‹± 예츑)

    • μš°μ„ μˆœμœ„κ°€ κ°€μž₯ 쒋은(hκ°€ 제일 큰) λ…Έλ“œλ₯Ό λ¨Όμ € ν™•μž₯ν•˜λŠ” 방식

  2. Best-first Branch and Bound

    • Best-first μ „λž΅μ„ μ‚¬μš©ν•˜μ—¬ 탐색 μ„±λŠ₯ ν–₯상
  3. A μ•Œκ³ λ¦¬μ¦˜ (인곡지λŠ₯μ—μ„œ μ‚¬μš©λ¨)

    • λŒ€ν‘œμ μΈ Best-first Search 기반 μ•Œκ³ λ¦¬μ¦˜

β˜ƒοΈ μ˜ˆμ‹œ


이 경우 h = 98 둜 κ°€μž₯ 큰 λ…Έλ“œλ₯Ό 제일 λ¨Όμ € μˆ˜ν–‰ν•œλ‹€


"λͺ¨λ“  방법듀은 all enumerations κ°€λŠ₯"
β†’ λͺ¨λ“  κ°€λŠ₯ν•œ 경우의 수(μ—΄κ±°)λ₯Ό λ‹€ 탐색할 수 μžˆλŠ” κ΅¬μ‘°λΌλŠ” λœ»μž…λ‹ˆλ‹€.

0개의 λŒ“κΈ€