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 ?
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:
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 ) )
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 )
sumber
Jawaban:
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 : N → N sedemikian rupa sehingga D T I M E ( f ( n ) ) = D T I M E ( g ( f ( n ) ) .g: N → N f: N → N D TsayaM.E( f( n ) ) = D TsayaM.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 ff g g= o ( n ) f O ( f( n ) ) O ( g( f( n ) ) = o ( 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 ) ≥ x g∘ f f ω ( n ) O ( g( f( n ) ) O ( 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).f f( n ) ≥ g( n )
sumber
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 )f O ( f( n ) ) . Secara khusus,
DTIME(o(f(n))o ( f( n )catatan( f( n ) ))
Ini hanya mempertimbangkan masalah keputusan, dan tidak menganggap waktu yang dibutuhkan untuk menghasilkan output.
sumber
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 .
sumber