Hình 1 .1 Bài tốn xếp ba lô dạng 0-1
2.3 Phương pháp tham lam
2.3.1 Giới thiệu chung
Thuật toán tham lam (Greedy algorithms) là một thuật toán giải quyết một số bài toán theo kiểu heuristic để tìm kiếm lựa chọn tối ưu địa phương ở mỗi bước đi với hy vọng tìm được tối ưu tồn cục. Ưu điểm của thuật toán tham lam là dễ đề xuất theo tư tưởng tự nhiên (Miếng ngon ăn trước). Trong hầu hết các bài toán tối ưu, để nhận được nghiệm tối ưu chúng ta có thể đưa về sự thực hiện một dãy các lựa chọn. Ý tưởng của chiến lược tham lam là tại mỗi bước ta sẽ lựa chọn một phương án được xem là tốt nhất trong ngữ cảnh nào đó được xác định bởi bài tốn tức là việc lựa chọn ở mỗi bước chính là phương án tối ưu địa phương. Tùy theo từng bài tốn mà ta đưa ra tiêu chuẩn lựa chọn thích hợp.
Các thuật tốn tham lam (greedy algorithm) nói chung là đơn giản và hiệu quả (vì các tính tốn để tìm ra quyết định tối ưu địa phương thường là đơn giản). Tuy nhiên các thuật toán tham lam có thể khơng tìm được nghiệm tối ưu, nói chung nó chỉ cho ra nghiệm gần tối ưu, nghiệm tương đối tốt. Nhưng cũng có nhiều thuật tốn được thiết kế theo kỹ thuật tham lam cho ta nghiệm tối ưu, chẳng hạn thuật tốn Dijkstra tìm đường đi ngắn nhất từ một đỉnh tới các đỉnh còn lại trong đồ thị định hướng, các thuật toán Prim và Kruskal tìm cây bao trùm ngắn nhất trong đồ thị vô hướng. Phương pháp tham lam là kỹ thuật thiết kế thường được dùng để giải các bài toán tối ưu, phương pháp được tiến hành theo nhiều bước, tại mỗi bước theo một lựa chọn nào đó (xác định bằng một hàm chọn) sẽ tìm một lời giải tối ưu cho bài toán nhỏ tương ứng. Lời giải của bài toán được bổ sung dần từng bước từ lời giải
của các bài tốn con. Các lời giải tìm được bằng phương pháp tham lam thường chỉ là chấp nhận theo điều kiện nào đó, chưa chắc là tối ưu.