Khi Alan Turing phát hiện ra máy tính, đã từng có một vài mô hình cho máy tính được đề xuất. Turing đã chứng minh rằng một số (3) mô hình này có thể mô phỏng lẫn nhau VÀ tính toán hàm Ackermann, trong khi các mô hình khác có thể mô phỏng lẫn nhau nhưng không phải là chức năng Ackermann (vì vậy chúng không thể mô phỏng 3). Do đó, 3 mô hình này (Turing Machine, von Neumann và một mô hình tôi không biết) đã được chọn làm kiến trúc cho máy tính. Điều này không có nghĩa là chức năng Ackermann là giới hạn của máy tính, nhưng tôi cho rằng đó là khoa học cứng. Tôi không biết bất kỳ chức năng tính toán nào phát triển nhanh hơn chức năng Ackermann.
Bây giờ, tôi không nghĩ có một vấn đề thực tế phù hợp với câu hỏi của bạn, nhưng có lẽ chúng ta có thể xây dựng một vấn đề. Chúng ta cần đặt các ràng buộc trên đầu vào mặc dù. Vì chúng tôi không thể sử dụng O (n), chúng tôi không thể kiểm tra toàn bộ đầu vào. Trong thực tế, chúng ta thậm chí không thể kiểm tra độ dài của đầu vào vì đó sẽ là O (log n). Vì vậy, chúng ta cần tham số đầu tiên là biểu diễn độ dài của phần còn lại của đầu vào, ví dụ c sao cho Ackermann (c) là độ dài của đầu vào. Vì điều này cũng không phù hợp, chúng tôi yêu cầu giá trị đầu tiên trong đầu vào của chúng tôi là tham số c, sao cho bb (c) có độ dài của đầu vào, trong đó bb là hàm hải ly bận. Hàm này không thể thực hiện được nhưng bb (c) chắc chắn tồn tại. Sau đó, thuật toán đi như sau:
for (int i=0; i<c; i++) {
if (input[i] == null) {
return false;
}
}
return true;
Mục đích của thuật toán là kiểm tra xem c có nghịch đảo với bb không, nếu sau đó độ dài đầu vào lớn hơn bb (c).
Nếu có một hàm tính toán phát triển nhanh hơn hàm Ackermann, tôi nghĩ chúng ta có thể sử dụng hàm nghịch đảo để tạo ra một thuật toán trả lời câu hỏi của bạn trên bất kỳ đầu vào nào.