Thuật toán Ứng dụng — DP, String, Big Data & hơn nữa
~15 phútQuyết định dưới constraint — DP, Greedy, BacktrackingAll-Access

Greedy — Tham lam có chứng minh: Interval Scheduling và Huffman

Greedy chọn tốt nhất mỗi bước không nhìn lại. Nắm greedy choice property, exchange argument, interval scheduling theo finish time, Huffman coding, và khi nào greedy SAI.

TL;DR: Thuật toán greedy dựng nghiệm bằng cách chọn phương án tốt nhất tại chỗ (locally optimal) ở mỗi bước và không bao giờ quay lui. Greedy đúng khi bài toán có hai tính chất: greedy choice property (lựa chọn tham lam không chặn mất nghiệm tối ưu) và optimal substructure (nghiệm tối ưu của bài lớn chứa nghiệm tối ưu của bài con). Cách chứng minh là exchange argument: giả sử nghiệm tối ưu OPT khác greedy, hoán đổi một phần tử sang lựa chọn của greedy thì OPT không tệ đi, nên greedy cũng tối ưu. Greedy SAI khi thiếu một trong hai tính chất: 0/1 knapsack và coin change với mệnh giá lạ là hai counter-example (ví dụ làm greedy sai) kinh điển.

Cây Huffman cho sáu ký tự ở mục 5 chỉ tốn trung bình 2,24 bit mỗi ký tự, so với 3 bit của mã độ dài cố định. Nó đến từ một thuật toán greedy thuần túy: mỗi bước gộp hai node có tần suất nhỏ nhất, chỉ cần một min-heap. Niềm tin rằng chọn tham lam từng bước sẽ ra cây tối ưu phải được chứng minh.

1. Hình dung: người trả tiền thừa vs người đầu bếp tối ưu

Greedy là người trả tiền thừa dễ tính: khi trả 43.000đ, anh ta lấy tờ lớn nhất có thể (20k + 20k + 2k + 1k) và không bao giờ đổi ý. Với hệ mệnh giá Việt Nam (1k, 2k, 5k, 10k, 20k, 50k, 100k), cách này luôn cho số tờ ít nhất. Hệ mệnh giá như vậy gọi là canonical: lấy tờ lớn nhất luôn không làm hỏng kết quả cuối.

Khi greedy thất bại: đất nước khác có mệnh giá {1, 3, 4}, cần trả 6. Greedy: 4 + 1 + 1 = 3 đồng. Tối ưu: 3 + 3 = 2 đồng. Greedy chọn 4 (lớn nhất không vượt 6) nhưng chính đồng 4 làm mất tổ hợp tốt hơn. Muốn bắt được kiểu sai này, hãy làm tay vài ví dụ nhỏ trước khi tin một cách chọn, và chủ động đi tìm ví dụ làm nó sai.

Chuyện trả tiền thừaTrong greedy
Lấy tờ lớn nhất không vượt số còn lạilựa chọn tham lam
Hệ mệnh giá VN, lấy tờ lớn luôn đủ tối ưugreedy choice property
Mệnh giá {1, 3, 4}, cần trả 6counter-example
Đặc trưngGreedyDP
Quyết địnhTốt nhất tại chỗ, không quay luiXét mọi bài con, chọn nghiệm tối ưu toàn cục
Khi đúngCó greedy choice property + optimal substructureĐúng khi có optimal substructure; overlapping subproblems làm cache có lợi
Độ phức tạpThường O(n log n)Thường O(n²) hoặc O(n × W)
Chứng minhCần chứng minh (exchange argument hoặc greedy stays ahead)Chứng minh qua transition

All-Access Pass

Phần còn lại của bài dành cho All-Access Pass

Bạn vừa đọc phần xem trước. Hai bài đầu của mỗi khoá luôn đọc trọn miễn phí.

  • Đọc trọn mọi bài trong 6 khoá System Design và dữ liệu phân tán
  • AI Mentor trả lời theo toàn bộ nội dung bài
  • Trả một lần, không tự gia hạn, không tự trừ tiền

Trọn đời

1.690.000 ₫

Trả một lần, dùng mãi mãi

Gói năm

699.000 ₫

365 ngày · ≈ 58.000 ₫/tháng

Thanh toán bằng thẻ Visa/Master/JCB qua Polar. Xem bảng giá

Đã mua? Đăng nhập để đọc tiếp

Bài này có giúp bạn hiểu bản chất không?

Bài này đáng gửi cho bạn học cùng?

Copy link đã gắn nguồn — dán group, chat, hoặc LinkedIn.

Thảo luận & góp ý

Hỏi đáp về bài này

Bài tiếp theo

Backtracking và cắt tỉa — Permutations, N-Queens, pruning