Tôi sẽ đưa ra câu trả lời giống như tôi đã đưa ra lần trước câu hỏi này.
Trước tiên, hãy hiểu rằng không có định nghĩa chính thức tốt về "thuật toán" tại thời điểm viết. Từ khóa ở đây là "chính thức".
Tuy nhiên, có những người thông minh làm việc trên nó.
Những gì chúng ta biết là bất kể "thuật toán" là gì, nó nằm ở đâu đó giữa "hàm toán học" và "chương trình máy tính".
Một hàm toán học là khái niệm chính thức của ánh xạ từ đầu vào đến đầu ra. Vì vậy, ví dụ, "sort" là ánh xạ giữa một chuỗi các mục có thể sắp xếp và một chuỗi các mục có thể sắp xếp cùng loại, ánh xạ từng chuỗi theo trình tự được sắp xếp. Hàm này có thể được thực hiện bằng các thuật toán khác nhau (ví dụ: sắp xếp hợp nhất, sắp xếp heap). Lần lượt, mỗi thuật toán có thể được thực hiện bằng các chương trình khác nhau (thậm chí được cung cấp cùng ngôn ngữ lập trình).
Vì vậy, cách xử lý tốt nhất mà chúng ta có về "thuật toán" là gì, đó là một loại lớp tương đương trên các chương trình, trong đó hai chương trình tương đương nhau nếu chúng thực hiện "về cơ bản giống nhau". Bất kỳ hai chương trình thực hiện cùng một thuật toán đều phải tính toán cùng một hàm, nhưng điều ngược lại là không đúng.
Tương tự, có một lớp tương đương giữa các thuật toán, trong đó hai thuật toán tương đương nếu chúng tính toán cùng một hàm toán học.
Phần khó trong tất cả những điều này là cố gắng nắm bắt những gì chúng ta muốn nói là "về cơ bản là cùng một thứ".
Có một số điều rõ ràng mà chúng ta nên bao gồm. Ví dụ, hai chương trình về cơ bản là giống nhau nếu chúng chỉ khác nhau bởi các lần đổi tên. Hầu hết các mô hình ngôn ngữ lập trình đều có các khái niệm nguyên gốc về "tính tương đương" (ví dụ: giảm beta và chuyển đổi eta trong phép tính lambda), vì vậy chúng ta cũng nên đưa chúng vào.
Bất cứ mối quan hệ tương đương nào chúng ta chọn, điều này cho chúng ta một số cấu trúc. Các thuật toán tạo thành một thể loại bởi thực tế rằng chúng là thể loại thương số của các chương trình. Một số quan hệ tương đương thú vị được biết là làm phát sinh các cấu trúc phân loại thú vị; ví dụ, phạm trù thuật toán đệ quy nguyên thủy là một đối tượng phổ quát trong phạm trù các phạm trù. Bất cứ khi nào bạn thấy cấu trúc thú vị như thế, bạn biết rằng dòng điều tra này có thể sẽ hữu ích.