Untuk setiap fungsi yang dapat dihitung,

19

Untuk setiap fungsi yang dapat dihitung apakah ada masalah yang dapat diselesaikan paling baik dalam waktu atau adakah fungsi yang dapat dihitung sehingga setiap masalah yang dapat diselesaikan dalam dapat juga dipecahkan dalam waktu ?fΘ(f(n))fHAI(f(n))Hai(f(n))

Pertanyaan ini muncul di kepala saya kemarin. Saya sudah memikirkannya sedikit sekarang, tetapi tidak bisa mengetahuinya. Saya tidak benar-benar tahu bagaimana saya google untuk ini, jadi saya bertanya di sini. Inilah yang saya buat:

Pikiran pertama saya adalah bahwa jawabannya adalah ya: Untuk setiap fungsi dihitung masalah "Output titik" (atau membuat string dengan titik atau apa pun) dapat jelas tidak diselesaikan dalam waktu. Jadi kita hanya perlu menunjukkan bahwa itu dapat diselesaikan dalam waktu . Tidak masalah, ambil saja kode pseudo berikut:ff(n)f(n)Hai(f(n))HAI(f(n))

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

Jelas bahwa algoritma memecahkan masalah yang dinyatakan. Dan itu runtime jelas di , jadi masalah terpecahkan. Itu mudah, bukan? Kecuali tidak, itu bukan karena Anda harus mempertimbangkan biaya baris pertama. Algoritma runtime di atas hanya dalam jika waktu yang dibutuhkan untuk menghitung adalah dalam . Jelas itu tidak benar untuk semua fungsi 1 .Θ ( f ( n ) ) f ( n ) O ( f ( n ) )Θ(f(n))Θ(f(n))f(n)HAI(f(n))

Jadi pendekatan ini tidak membuat saya ke mana pun. Saya akan berterima kasih kepada siapa pun yang menunjukkan saya ke arah yang benar untuk mengetahui hal ini dengan benar.


1 Pertimbangkan misalnya fungsi . Jelas , tetapi tidak ada algoritma yang menghitung dalam waktu. O ( p ( n ) ) = O ( 1 ) p O ( 1 )hal(n)={1jika n adalah prima2jika tidakHAI(hal(n))=HAI(1)halHAI(1)

sepp2k
sumber
1
Saya tidak berpikir dua pernyataan Anda dalam paragraf pertama Anda harus saling mendukung satu sama lain: bagaimana jika Anda memiliki sehingga ada beberapa masalah yang dapat diselesaikan di , bukan di , atau dalam waktu ? O ( f ( n ) ) o ( f ( n ) ) Θ ( f ( n ) )fO(f(n))Hai(f(n))Θ(f(n))
Alex ten Brink
@ Alex Itu poin bagus saya tidak mempertimbangkan itu.
sepp2k

Jawaban:

13

Dengan teorema Gap (menggunakan formulasi dari sini , cari 'gap'), untuk setiap fungsi tak terbatas yang dapat dihitung , ada beberapa fungsi komputer yang dapat diperbesar (pada kenyataannya, semena-mena besar) f : NN sedemikian rupa sehingga D T I M E ( f ( n ) ) = D T I M E ( g ( f ( n ) ) .g:NNf:NNDTsayaM.E(f(n))=DTsayaM.E(g(f(n))

Ini menjawab pertanyaan Anda bahwa terdapat ( sedemikian banyak, pada kenyataannya): untuk setiap fungsi yang dapat dihitung g sedemikian sehingga g = o ( n ) , ada beberapa fungsi yang meningkat f sehingga semua masalah dapat dipecahkan dalam O ( f ( n) ) ) waktu juga dapat dipecahkan dalam waktu O ( g ( f ( n ) ) = o ( f ( n ) ) . Perhatikan bahwa ffgg=Hai(n)fHAI(f(n))HAI(g(f(n))=Hai(f(n))f belum tentu dapat dikonstruksi-waktu - untuk kasus yang dapat dikonstruksi-waktu, lihat jawabannya oleh @RanG.

Dalam formulasi Wikipedia (yang mensyaratkan bahwa ), maka g f menjadi Anda misalnya, dan f kebutuhan untuk menjadi ω ( n ) (sehingga Anda pergi sebaliknya - 'masalah dipecahkan di O ( g ( f ( n ) ) juga dapat dipecahkan dalam O ( g ( n ) ) 'adalah bagian yang menarik).g(x)xgffω(n)HAI(g(f(n))HAI(g(n))

Artikel Wikipedia tidak mencatat bahwa meningkat dan sebenarnya bisa besar secara sembarang ( f ( n ) g ( n ) misalnya). Artikel yang membuktikan teorema gap memang menyebutkan dan membuktikan ini (lihat di sini , misalnya).ff(n)g(n)

Alex ten Brink
sumber
bisakah menjadi o ( n ) ? Tidakkah diharuskan g ( x ) x ? Pernyataan Anda masih benar, tetapi buktinya sebaliknya, bukan? go(n)g(x)x
Ran G.
@RANG. Diperbarui untuk memberikan bukti untuk kedua formulasi (saya menggunakan formulasi di koran) :)
Alex ten Brink
"untuk setiap fungsi yang dapat dihitung g sedemikian sehingga g = o (n), ada beberapa fungsi f sehingga semua masalah yang dapat dipecahkan dalam waktu O (f (n)) juga dapat dipecahkan dalam O (g (f (n)) = o ( f (n)) waktu "Bagaimana jika semua fs yang ada untuk g berada di O (1)? Maka O (g (f (n)) masih O (1) dan dengan demikian bukan o (1).
sepp2k
@ sepp2k: tangkapan bagus, ini memang masalah yang dirumuskan. Saya telah memperbarui jawaban saya.
Alex ten Brink
12

Untuk setiap fungsi dihitung tidak terdapat masalah yang dapat diselesaikan di terbaik di Θ ( f ( n ) ) waktu atau apakah ada fungsi komputasi f sehingga setiap masalah yang dapat diselesaikan dalam O ( f ( n ) ) bisa juga diselesaikan dalam o ( f ( n ) ) waktu?fΘ(f(n))fHAI(f(n))Hai(f(n))

Jika adalah fungsi yang dapat dikonstruksi waktu , maka Teorema Hierarki Waktu mengatakan bahwa ada masalah yang memerlukan waktu O ( f ( n ) ) , dan tidak dapat diselesaikan dengan waktu o ( f ( n )fHAI(f(n)). Secara khusus, DTIME(o(f(n))Hai(f(n)catatan(f(n)))

DTIME(Hai(f(n)catatan(f(n))))DTIME(f(n))

Ini hanya mempertimbangkan masalah keputusan, dan tidak menganggap waktu yang dibutuhkan untuk menghasilkan output.

Ran G.
sumber
Apakah saya benar berasumsi bahwa jika kita mempertimbangkan fungsi-fungsi yang tidak dapat dikonstruksi waktu, jawaban atas pertanyaan saya adalah "tidak"? Atau terkait: jika suatu fungsi tidak dapat dikonstruksi-waktu dan dengan demikian tidak ada mesin Turing yang berhenti setelah langkah f ( n ) , apakah itu berarti juga tidak ada mesin Turing yang berhenti setelah langkah Θ ( f ( n ) ) ? Karena dari situ akan dengan sepele mengikuti bahwa jawaban untuk pertanyaan saya adalah tidak. ff(n)Θ(f(n))
sepp2k
Tergantung. Asumsikan tidak konstruktif waktu tetapi dapat dibatasi oleh beberapa fungsi lain g yang konstruktif waktu. f = Θ ( g ) dan masih ada masalah yang dapat diselesaikan dengan waktu O ( f ) tetapi tidak terlalu jauh dari itu. fgf=Θ(g)HAI(f)
Ran G.
dan menggunakan beberapa TM tape, Anda dapat meningkatkan hasil dari hinggao(f(n)). Hai(f(n)lgf(n))Hai(f(n))
Kaveh
3

Saya akan mencoba memberikan sesuatu kerangka kerja dengan harapan memberikan wawasan yang lebih dalam.

Ketika Anda mendapatkan sesuatu yang mendasar ini ada jebakan yang tak terduga di mana-mana. Misalnya: apa artinya "memecahkan" masalah? Seringkali dalam ilmu komputer kita hanya mempertimbangkan varian "keputusan", di mana kita diberi input dan hanya perlu untuk menghasilkan Benar atau Salah. Anda berfokus pada masalah "fungsi".

Jika Anda menganggap notasi O (f (n)) sebagai upaya untuk menangkap berapa "kerja" yang diperlukan untuk menyelesaikan masalah, menggunakan keputusan alih-alih fungsi (di mana output diperlukan) tampaknya lebih baik karena Anda dengan bersih memisahkan perhitungan dari format output .

Saya tidak berpikir ini akan menjawab pertanyaan Anda, tetapi Anda mungkin tertarik pada ini: http://en.wikipedia.org/wiki/Time_hierarchy_theorem

Juga, berhati-hatilah dengan teorema speedup .

agorenst
sumber