Đối với mọi hàm tính toán


19

Đối với mọi hàm tính toán f đều tồn tại một vấn đề có thể giải quyết tốt nhất trong thời gian Θ(f(n)) hoặc có một hàm tính toán f sao cho mọi vấn đề có thể giải quyết trong O(f(n)) cũng có thể được giải quyết trong thời gian o(f(n)) ?

Câu hỏi này xuất hiện trong đầu tôi ngày hôm qua. Tôi đã suy nghĩ về nó một chút bây giờ, nhưng không thể tìm ra nó. Tôi thực sự không biết làm thế nào tôi google cho điều này, vì vậy tôi hỏi ở đây. Đây là những gì tôi nghĩ ra:

Suy nghĩ đầu tiên của tôi là câu trả lời là có: Với mọi hàm tính toán f , vấn đề "Đầu ra f(n) chấm" (hoặc tạo một chuỗi có dấu chấm f(n) hoặc bất cứ điều gì) rõ ràng không thể giải quyết được trong o(f(n)) thời gian. Vì vậy, chúng ta chỉ cần chỉ ra rằng nó có thể được giải quyết trong thời gian O(f(n)) . Không có vấn đề, chỉ cần lấy mã giả sau đây:

x = f(n)
for i from 1 to x:
    output(".")

Rõ ràng thuật toán đó giải quyết vấn đề đã nêu. Và đó là thời gian chạy là rõ ràng trong Θ(f(n)) , vì vậy vấn đề giải quyết. Điều đó thật dễ dàng, phải không? Ngoại trừ không, không phải vì bạn phải xem xét chi phí của dòng đầu tiên. Thời gian chạy thuật toán trên của duy nhất là trong Θ(f(n)) nếu thời gian cần thiết để tính toán f(n)O(f(n)) . Rõ ràng điều đó không đúng với tất cả các chức năng 1 .

Vì vậy, cách tiếp cận này đã không đưa tôi đến bất cứ nơi nào. Tôi rất biết ơn cho bất cứ ai chỉ cho tôi đi đúng hướng để tìm ra điều này đúng.


1 Hãy xem xét ví dụ hàm . Rõ ràng O ( p ( n ) ) = O ( 1 ) , nhưng không có thuật toán nào tính được p trong thời gian O ( 1 ) .p(n)={1if n is prime2otherwiseO(p(n))=O(1)pO(1)


1
Tôi không nghĩ hai câu trong đoạn đầu tiên của bạn nhất thiết phải là những điểm chung của nhau: nếu bạn có một sao cho tồn tại một số vấn đề có thể giải quyết trong O ( f ( n ) ) , không phải trong o ( f ( n ( n) ) ) , cũng không phải trong Θ ( f ( n ) ) thời gian? fO(f(n))o(f(n))Θ(f(n))
Alex ten Brink

@Alex Đó là một điểm tốt tôi đã không xem xét điều đó.
sepp2k

Câu trả lời:


13

Theo định lý Gap (sử dụng công thức từ đây , tìm kiếm 'gap'), cho bất kỳ hàm không tính toán nào , tồn tại một số hàm tăng tính toán (thực tế, lớn tùy ý) f : NN sao cho D T I M E ( f ( n ) ) = D T I M E ( g ( f ( n ) ) .g:NNf:NNDTIME(f(n))=DTIME(g(f(n))

Điều này trả lời câu hỏi của bạn rằng có tồn tại một (vô cùng nhiều, trên thực tế): với mọi hàm tính toán g sao cho g = o ( n ) , tồn tại một số hàm tăng f sao cho tất cả các vấn đề có thể giải quyết được trong O ( f ( n ( n) ) ) thời gian cũng có thể giải được trong thời gian O ( g ( f ( n ) ) = o ( f ( n ) ) . Lưu ý rằng ffgg=o(n)fO(f(n))O(g(f(n))=o(f(n))f không nhất thiết là thời gian có thể xây dựng - đối với trường hợp có thể xây dựng theo thời gian, hãy xem câu trả lời của @RanG.

Trong việc xây dựng Wikipedia (mà đòi hỏi rằng ), sau đó g f trở thành ví dụ của bạn, và e cần phải được ω ( n ) (do đó bạn đi theo con đường khác xung quanh - 'vấn đề có thể giải quyết trong O ( g ( f ( n ) ) cũng có thể giải được trong O ( g ( n ) ) 'là phần thú vị).g(x)xgffω(n)O(g(f(n))O(g(n))

Các bài viết Wikipedia không lưu ý rằng đang gia tăng và trong thực tế có thể tùy tiện lớn ( f ( n ) g ( n ) ví dụ). Bài báo chứng minh định lý khoảng cách đề cập và chứng minh điều này (xem ở đây chẳng hạn).ff(n)g(n)


có thể là o ( n ) không? Không phải là nó đòi hỏi g ( x ) x ? Tuyên bố của bạn vẫn đúng, nhưng bằng chứng lại đi theo một cách khác, phải không? go(n)g(x)x
Ran G.

@RanG. Đã cập nhật để đưa ra bằng chứng cho cả hai công thức (Tôi đã sử dụng công thức trong bài báo) :)
Alex ten Brink

"Với mọi hàm tính toán g sao cho g = o (n), tồn tại một số hàm f sao cho tất cả các vấn đề có thể giải quyết được trong thời gian O (f (n)) cũng có thể giải quyết được trong O (g (f (n)) = o ( f (n)) time "Điều gì sẽ xảy ra nếu tất cả các fs tồn tại của g đó nằm trong O (1)? Sau đó O (g (f (n)) vẫn là O (1) và do đó không phải là o (1).
sepp2k

@ sepp2k: bắt tốt, đây thực sự là một vấn đề như công thức. Tôi đã cập nhật câu trả lời của mình.
Alex ten Brink

12

Đối với mọi hàm tính toán đều tồn tại một vấn đề có thể giải quyết tốt nhất trong thời gian Θ ( f ( n ) ) hoặc có một hàm tính toán f sao cho mọi vấn đề có thể giải quyết trong O ( f ( n ) ) cũng có thể được giải quyết trong thời gian o ( f ( n ) ) ?fΘ(f(n))fO(f(n))o(f(n))

Nếu hàm có thể xây dựng theo thời gian , thì Định lý phân cấp thời gian nói rằng có những vấn đề đòi hỏi thời gian O ( f ( n ) ) và không thể giải quyết theo thời gian o ( f ( n )fO(f(n)). Cụ thể, DTIME(o(f(n)o(f(n)log(f(n)))

DTIME(o(f(n)log(f(n))))DTIME(f(n))

Điều này chỉ xem xét các vấn đề quyết định và không liên quan đến thời gian cần thiết để tạo đầu ra.


Tôi có đúng không khi cho rằng nếu chúng ta xem xét các hàm không thể xây dựng được thời gian, câu trả lời cho câu hỏi của tôi là "không"? Hoặc có liên quan: nếu một hàm không thể xây dựng được theo thời gian và do đó không có máy Turing nào dừng sau các bước f ( n ) , điều đó có nghĩa là cũng không có máy Turing nào dừng sau các bước Θ ( f ( n ) ) ? Bởi vì từ đó nó sẽ theo một cách tầm thường rằng câu trả lời cho câu hỏi của tôi là không. ff(n)Θ(f(n))
sepp2k

fgf=Θ(g)O(f)

o(f(n)lgf(n))o(f(n))

3

Tôi sẽ cố gắng cung cấp một cái gì đó của một khuôn khổ với hy vọng nó mang lại cái nhìn sâu sắc hơn.

Khi bạn nhận được một cái gì đó cơ bản này, có những cạm bẫy bất ngờ ở khắp mọi nơi. Ví dụ: "giải quyết" vấn đề là gì? Thông thường trong khoa học máy tính, chúng tôi chỉ xem xét biến thể "quyết định", trong đó chúng tôi được cung cấp đầu vào và chỉ cần xuất ra Đúng hoặc Sai. Bạn đang tập trung vào vấn đề "chức năng".

Nếu bạn coi ký hiệu O (f (n)) là cố gắng nắm bắt bao nhiêu "công việc" cần thiết để giải quyết vấn đề, sử dụng quyết định thay cho chức năng (trong đó yêu cầu đầu ra) có vẻ tốt hơn vì bạn tách biệt tính toán khỏi định dạng đầu ra .

Tôi không nghĩ rằng điều này sẽ trả lời câu hỏi của bạn, nhưng bạn có thể quan tâm đến điều này: http://en.wikipedia.org/wiki/Time_hierarchy_theorem

Ngoài ra, hãy cẩn thận về định lý speedup .

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.