Menu
CoddyTech

Ghi nhớ kết quả

Bài học 4 trên 15 trong khóa học Nhập môn quy hoạch động của Coddy.

Ghi nhớ (memoization) là một kỹ thuật tối ưu hóa trong lập trình động, giúp tăng tốc chương trình bằng cách lưu kết quả của các lần gọi hàm tốn nhiều tài nguyên và trả về kết quả đã lưu khi gặp lại cùng đầu vào.

Để triển khai kỹ thuật ghi nhớ, bạn có thể tạo một từ điển để lưu các kết quả đã tính, trong đó khóa là các đối số đầu vào và giá trị là kết quả đầu ra tương ứng. Trước khi tính kết quả của một hàm, bạn có thể kiểm tra xem đầu vào đã được tính và lưu trong từ điển hay chưa. Nếu rồi, bạn có thể trả về kết quả đã lưu thay vì tính lại. Nếu chưa, bạn tính kết quả rồi lưu vào từ điển.

list cũng có thể được dùng để triển khai kỹ thuật ghi nhớ.

Kỹ thuật ghi nhớ có thể tăng tốc đáng kể các thuật toán lập trình động, đặc biệt khi có nhiều bài toán con chồng lấn.

challenge icon

Thử thách

Dễ

Viết một hàm Python có tên fib để tính số Fibonacci thứ n bằng phương pháp ghi nhớ.

  • Dùng từ điển memo để lưu các số Fibonacci đã tính.
  • Trước khi tính số Fibonacci thứ n, hãy kiểm tra xem số đó đã được tính và lưu trong memo chưa.
  • Nếu đã có, hãy trả về kết quả đã lưu. Nếu chưa, hãy tính số Fibonacci thứ n bằng hệ thức truy hồi fib(n) = fib(n-1) + fib(n-2) rồi lưu kết quả vào từ điển để dùng sau.

Gợi ý: xem lời giải ở cuối để kiểm tra xem bạn đã dùng phương pháp ghi nhớ đúng cách chưa!

Tự làm thử

memo = {0: 0, 1: 1}

def fib(n):
    

Tất cả bài học trong Nhập môn quy hoạch động

Tự luyện tập: Trình biên dịch Python online