Thuật toán tham lam (Greedy Algorithm)
Greedy là gì?
Greedy Algorithm chọn phương án tốt nhất tại thời điểm hiện tại với hy vọng dẫn đến nghiệm tối ưu toàn cục.
⚠️
Greedy không phải lúc nào cũng cho nghiệm tối ưu! Cần chứng minh tính đúng đắn.
Activity Selection
Python
def activity_selection(activities):
"""Chọn nhiều hoạt động nhất không chồng chéo"""
activities.sort(key=lambda x: x[1]) # Sort by end time
result = [activities[0]]
last_end = activities[0][1]
for start, end in activities[1:]:
if start >= last_end:
result.append((start, end))
last_end = end
return resultFractional Knapsack
Python
def fractional_knapsack(items, capacity):
"""items = [(weight, value), ...]"""
# Sort by value/weight ratio
items.sort(key=lambda x: x[1] / x[0], reverse=True)
total_value = 0
for weight, value in items:
if capacity >= weight:
capacity -= weight
total_value += value
else:
total_value += value * (capacity / weight)
break
return total_valueGreedy vs Dynamic Programming
| Greedy | DP | |
|---|---|---|
| Quyết định | Một lần, không quay lại | Xem xét tất cả |
| Độ phức tạp | Thường O(n log n) | Thường O(n²) |
| Tính đúng đắn | Cần chứng minh | Luôn đúng |
Tiếp theo: Quay lui (Backtracking)
Last updated on