Các chức năng với tốc độ tăng trưởng chậm hơn Ackermann nghịch đảo xuất hiện trong giới hạn thời gian chạy?


20

Một số thuật toán phức tạp ( union-find ) có hàm Ackermann nghịch đảo gần như không đổi xuất hiện trong độ phức tạp thời gian tiệm cận và tối ưu hóa thời gian trong trường hợp xấu nhất nếu bỏ qua thuật ngữ Ackermann nghịch đảo gần như không đổi.

Có bất kỳ ví dụ nào về các thuật toán đã biết với thời gian chạy liên quan đến các hàm tăng chậm về cơ bản so với Ackermann nghịch đảo (ví dụ: nghịch đảo các hàm không tương đương với Ackermann dưới các phép biến đổi đa thức hoặc hàm mũ v.v.), cho thời gian trường hợp xấu nhất được biết đến nhiều nhất phức tạp để giải quyết vấn đề cơ bản?


2
Ôi(1) thuật toán thời gian? Bạn đang hỏi về một vấn đề đã biết có thuật toán được biết đến nhiều nhất là và ? Trước tiên, bạn cần tìm một hàm phát triển "nhanh hơn về cơ bản" so với , như TREE , và sau đó thực hiện nghịch đảo của nó, và sau đó tìm một vấn đề phù hợp với nó! ω(1)o(α(n))Một(n)(n)
Pål GD

1
có các thuật toán giả định tùy ý được xây dựng theo hệ thống phân cấp thời gian thm
vzn

2
@vzn: Bất kỳ không thể xây dựng được thời gian (bao gồm ). Vì vậy, định lý phân cấp thời gian không thể được sử dụng ở đây. α ( n )f(n)= =o(n)α(n)
mdxn

@mdx rất vui khi có người chỉ ra điều đó, chỉ cần kiểm tra bạn nháy mắt. vâng, gần đây đã nghĩ rằng có thể có sự khái quát hóa hệ thống phân cấp thời gian cho các chức năng phụ . nhưng dù sao giới hạn là do TM có thể xây dựng thời gian phải đọc tất cả đầu vào, nhưng chúng ta có nói các thuật toán khác này không, ví dụ với độ phức tạp thời gian Ackermann nghịch đảo không? gặp khó khăn khi hình dung điều này! cảm thấy câu hỏi liên quan nhiều hơn đến sự tồn tại của các ngôn ngữ phụ .... có thể có một số loại khảo sát hoặc mô tả ở đâu đó ....o ( n ) o ( n )o(n)o(n)o(n)
vzn

1
@vzn: OP thực sự cần phải làm rõ mô hình tính toán mà họ có trong đầu. và cần được xác định trên các TM truy cập ngẫu nhiên (hoặc tương đương). Khi chỉ định cơ học của chúng tôi, chúng tôi có thể vô tình thêm quá nhiều năng lượng. Nó thậm chí có thể đến mức mà khái niệm về độ phức tạp tính toán không có kết quả. Theo các thuật ngữ cơ bản nhất, chúng ta sẽ phải thay đổi quan niệm về độ phức tạp thời gian (đó là thời gian thực hiện khấu hao) với nguy cơ định nghĩa như vậy có thể trở nên rất khó hiểu (tương tự với mô hình tính toán). LHĐẠI DIỆNLH
mdxn

Câu trả lời:


8

Seth Pettie đã đưa ra một thuật toán để tính toán độ nhạy của cây bao trùm tối thiểu trong thời gian , cải thiện thuật toán Tarjan tính toán cùng thời gian . (So ​​sánh với thuật toán của Chazelle để tính toán cây bao trùm tối thiểu .) Vấn đề độ nhạy yêu cầu tính toán, cho một đồ thị cho trước và một cây bao trùm tối thiểu nhất định, bằng bao nhiêu trọng lượng mỗi cạnh có thể thay đổi mà không thay đổi cây bao trùm tối thiểu.O ( m α ( m , n ) ) O ( m α ( m , n ) )Ôi(mđăng nhậpα(m,n))Ôi(mα(m,n))Ôi(mα(m,n))

(Cảm ơn Tsvi Kopelowitz vì tài liệu tham khảo này.)


1
Tôi không biết liệu Ackermann nghịch đảo về cơ bản là "chậm hơn về cơ bản" so với Ackermann nghịch đảo, nhưng tôi thấy loại thời gian chạy này đáng ngạc nhiên.
Yuval Filmus


-1

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.


Chắc chắn tồn tại các hàm phát triển nhanh hơn hàm Ackermann như được chỉ ra trong các nhận xét (TREE (n)). Phần khó của câu hỏi là xây dựng một thuật toán với giới hạn thời gian chạy của nghịch đảo của hàm đó. Một máy như vậy không có đủ thời gian để tính toán nghịch đảo của hàm ở vị trí đầu tiên, vì vậy việc xây dựng một TM đạt được điều này không đơn giản.
mdxn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.