Chào mọi người

Em đang nghiên cứu thuật toán tham lam, nhưng em được biết tham lam chỉ cho kết quả chính xác trong một số trường hợp, còn lại chỉ tương đối, không phải nghiệm tối ưu. Em muốn hỏi em có nên học tham lam không ạ?

Em xin cảm ơn ạ.

Câu hỏi này của bạn mình thấy hơi "lạ". Thiết nghĩ nếu ai học lập trình thì đều muốn học những thuật toán và ý tưởng mới. Tham lam là phương pháp thiết kế thuật toán đã được phát triển từ lâu. Tuy không còn "mới" nhưng ý tưởng của nó thì luôn cho kết quả "đẹp". Đặc biệt thời gian của phần lớn các thuật toán tham lam đều rất nhỏ. Do đó, theo mình chắc chắn là "nên".

Nếu bạn cần thêm motivation thì mình sẽ liệt kê một vài thuật toán kinh điển tham lam: Câp khung nhỏ nhất, thuật toán Dijkstra tìm đường đi ngắn nhất, lập lịch, áp dụng cho các bài toán tối ưu có tính chất matroid, cây mã Huffman. vân vân và vân vân.

> nhưng em được biết tham lam chỉ cho kết quả chính xác trong một số trường hợp, còn lại chỉ tương đối, không phải nghiệm tối ưu.

Đương nhiên không có một thuật toán nào mà có thể áp dụng được cho mọi trường hợp (chứ nếu không thì cuộc sống rất boring). Kể cả quy hoạch động ( có vẻ là một công cụ rất mạnh) cũng không ngoại lệ.  Có một số bài toán mà không có thuật toán nào có thể giải được (trong thời gian cho phép). Áp dụng tham lam đôi khi cho chúng ta những kết quả tối ưu. Ví dụ: bài toán phủ đỉnh, hoặc  bài toán phủ tập hợp. Còn nhiều bài toán khác nhưng có lẽ không gần gũi với bạn nên mình không liệt kê tiếp.

Ngoài ra, tham lam luôn là thuật toán đầu tiên mà người ta nghĩ tới khi thiết kế giải thuật. Hiểu được nó sẽ cho bạn những cách nhìn mới về bài toán, mặc dù, đôi khi nó không cho bạn lời giải mong muốn.

Hi vọng bạn cũng đồng ý với mình là "nên".