Ini mungkin pertanyaan yang menggelikan, tetapi mungkinkah memiliki masalah yang sebenarnya semakin mudah saat input bertambah besar? Saya ragu ada masalah praktis seperti ini, tetapi mungkin kita dapat menemukan masalah yang merosot yang memiliki properti ini. Sebagai contoh, mungkin ia mulai "memecahkan dirinya sendiri" ketika menjadi lebih besar, atau berperilaku dengan cara yang aneh lainnya.
algorithms
asymptotics
dsaxton
sumber
sumber
Jawaban:
Tidak, itu tidak mungkin: setidaknya, tidak dalam arti asimptotik, di mana Anda memerlukan masalah untuk terus menjadi lebih mudah, selamanya, seperti .n → ∞
Biarkan menjadi waktu berjalan terbaik untuk menyelesaikan masalah seperti itu, di mana adalah ukuran input. Perhatikan bahwa waktu berjalan adalah hitungan dari jumlah instruksi yang dieksekusi oleh algoritma, sehingga harus berupa bilangan bulat non-negatif. Dengan kata lain, untuk semua . Sekarang jika kita mempertimbangkan fungsi , kita melihat tidak ada fungsi seperti itu yang menurun secara monoton. (Apa pun adalah, ia harus terbatas, katakanlah ; tetapi kemudian karena secara monoton menurun secara ketat, dann T ( n ) ∈ N n T : N → N T ( 0 ) T ( 0 ) = c T T ( c ) ≤ 0 T ( c + 1 ) ≤ - 1 T ( n ) n 0 n ≥ n 0 T ( n )T( n ) n T( n ) ∈ N n T: N → N T( 0 ) T( 0 ) = c T T( c ) ≤ 0 T( c + 1 ) ≤ - 1 , yang tidak mungkin.) Untuk alasan yang sama, tidak ada fungsi yang menurun secara asimptotik: kita dapat membuktikan bahwa tidak ada fungsi waktu berjalan mana terdapat sehingga untuk semua , menurun secara monoton (fungsi semacam itu pada akhirnya harus menjadi negatif).T( n) n0 n ≥ n0 T( n )
Jadi, masalah seperti itu tidak bisa ada, karena alasan sederhana bahwa waktu berjalan harus bilangan bulat non-negatif.
Perhatikan bahwa jawaban ini hanya mencakup algoritme deterministik (yaitu, waktu berjalan terburuk). Itu tidak mengesampingkan kemungkinan algoritma acak yang waktu berjalannya diharapkan secara monoton menurun, selamanya. Saya tidak tahu apakah mungkin ada algoritma seperti itu. Saya berterima kasih kepada Beni Cherniavsky-Paskin untuk pengamatan ini .
sumber
Meskipun ini bukan jawaban untuk pertanyaan Anda, algoritma pencarian string Boyer-Moore mendekati. Seperti yang dikatakan Robert Moore di halaman webnya tentang algoritma,
Dengan kata lain, secara umum algoritma mencari instance string target dalam string sumber dan untuk string sumber tetap, semakin lama string target, semakin cepat algoritma berjalan.
sumber
Jelas, dari sudut pandang matematika murni, algoritma CS murni ini tidak mungkin. Tetapi sebenarnya ada beberapa contoh dunia nyata ketika meningkatkan proyek Anda membuatnya lebih mudah, banyak yang tidak intuitif untuk pengguna akhir.
Petunjuk Arah : Semakin lama arah Anda, kadang-kadang petunjuk itu menjadi lebih mudah. Misalnya, jika saya ingin Google Maps memberi saya petunjuk untuk pergi ke barat 3.000 mil, saya bisa berkendara ke Pantai Barat - dan akan mendapatkan instruksi mengemudi lintas negara. Tetapi jika saya ingin pergi 6.000 mil ke barat, saya akan berakhir dengan instruksi yang jauh lebih sederhana: naik pesawat dari NYC ke Hokkaido. Memberi saya rute lintas negara yang menggabungkan lalu lintas, jalan, cuaca, dll. Algoritma agak sulit, tetapi mengatakan kepada saya untuk naik pesawat dan mencari penerbangan dalam database relatif jauh lebih sederhana. Grafik ASCII tingkat kesulitan vs jarak:
Rendering : katakan saya ingin render satu wajah dan render 1000 wajah; ini untuk iklan baliho sehingga kedua gambar akhir harus 10000px oleh 5000px. Rendering satu wajah secara realistis akan sulit - pada resolusi beberapa ribu piksel Anda harus menggunakan mesin yang sangat kuat - tetapi untuk kerumunan 1000 wajah, setiap wajah hanya perlu sepuluh piksel, dan dapat dengan mudah dikloning! Saya mungkin bisa membuat 1000 wajah di laptop saya, tetapi merender wajah yang realistis dengan 10000px membutuhkan waktu yang sangat lama dan mesin yang kuat. Grafik ASCII tingkat kesulitan vs. objek yang diberikan, menunjukkan betapa sulitnya merender benda ke gambar dengan ukuran yang ditentukan turun dengan cepat tetapi kemudian kembali dengan lambat:
Kontrol perangkat keras : banyak hal dengan perangkat keras menjadi lebih mudah. "Pindahkan motor X 1 derajat" sulit dan / atau tidak mungkin, dan Anda harus berurusan dengan semua hal yang Anda tidak harus berurusan dengan untuk "memindahkan motor X 322 derajat".
Tugas berdurasi pendek: Katakan Anda ingin item X aktif (jumlah waktu yang sangat kecil) setiap detik. Dengan meningkatkan jumlah waktu yang dijalankan X, Anda akan memerlukan perangkat lunak dan perangkat keras yang kurang kompleks.
sumber
Ada beberapa kasus. Mereka adalah kasus-kasus di mana kriteria keberhasilan adalah fungsi dari data, daripada mencoba untuk menemukan jawaban tunggal. Misalnya, proses statistik yang hasilnya diungkapkan dengan interval kepercayaan bisa menjadi lebih mudah.
Satu kasus khusus yang saya pikirkan adalah masalah yang memiliki transisi dari perilaku diskrit ke perilaku berkelanjutan, seperti aliran cairan. Memecahkan masalah kecil hingga dalam tingkat kesalahan dapat melibatkan pemodelan semua interaksi diskrit, yang mungkin membutuhkan superkomputer. Perilaku terus menerus sering mengizinkan penyederhanaan tanpa menghasilkan hasil di luar batas kesalahan terkait.
sumber
Pertanyaannya menarik dan BERMANFAAT, karena filosofi kami di bidang informatika adalah untuk menyelesaikan masalah, semakin banyak kita membaca semakin sulit. Tetapi, pada kenyataannya, PALING masalah yang disajikan dengan cara yang khas (sulit) dapat dengan mudah diwakili dalam cara "mudah"; bahkan mengetahui respons DW (yang salah mengingat bahwa mudah bukan berarti lebih cepat, berarti "kurang lambat"; sehingga Anda tidak harus menemukan waktu negatif, Anda harus menemukan waktu asimptotik).
Trik untuk menemukannya adalah menempatkan bagian dari solusi seperti petunjuk sebagai entri, dan mempertimbangkan entri masalah seperti parameter konstan.
Contoh: Apa cara terpanjang dalam mobil antara London dan Paris menghindari mengunjungi dua kali kota Perancis dan Inggris dan tidak mengunjungi negara lain? pertimbangkan, Anda harus pergi ke Birmingham sebelum Ashford, Orleans sebelum Versailles, La Rochelle sebelum Limoge, dll ...
Jelas bahwa masalah dengan entri panjang akan lebih mudah dengan entri pendek.
Contoh penggunaan: Bayangkan sebuah playgame yang dikelola oleh mesin, dan IA komputer harus menentukan apakah dia harus menjelajahi lebih dalam permainan untuk menemukan lebih banyak petunjuk atau yang lain, jika sekarang saatnya menyimpulkan apa keputusan terbaik yang harus diambil .
sumber
Pertimbangkan sebuah program yang memasukkan apa yang Anda ketahui tentang kata sandi dan kemudian mencoba memecahkannya. Saya pikir ini melakukan apa yang Anda inginkan. Sebagai contoh:
Saya harus menambahkan bahwa ini adalah trik, karena masalah yang dinyatakan seperti ini terbalik dengan ukuran input. Anda bisa meninggalkan satu lapisan abstraksi dan mengatakan bahwa ukuran input besar tanpa input (periksa semua simbol dan panjang kata) dan kecil jika Anda memasukkan kata sandi yang benar di awal.
Jadi semuanya tergantung pada seberapa banyak abstraksi yang Anda izinkan.
sumber
Sebagai soal fakta, saya punya masalah yang semakin kecil dengan meningkatnya data. Salah satu aplikasi saya mencatat atribut produk tertentu, misalnya keju. Atribut misalnya CheeseType, Merek, Negara, Area, MilkType, dll. Setiap bulan atau lebih, saya mendapatkan daftar keju baru yang masuk ke pasar selama waktu itu, beserta atributnya. Sekarang, atribut-atribut ini diketik dengan tangan oleh sekelompok manusia. Beberapa membuat kesalahan ketik, atau tidak tahu nilai untuk semua atribut.
Ketika Anda melakukan pencarian di basis data saya, saya mencoba memprediksi dari statistik seperti apa rasanya keju, berdasarkan pada atribut-atribut ini. Apa yang terjadi, adalah untuk setiap atribut, saya berakhir dengan rentang nilai; ada yang valid ada yang tidak valid. Menghilangkan atau mengoreksi yang tidak valid ini hanya mungkin jika saya memiliki cukup data. Ini tentang membuat perbedaan antara nilai nyata dan noise, tanpa menghilangkan nilai yang jarang namun valid.
Seperti yang dapat Anda bayangkan, dengan volume rendah, kebisingan terlalu penting untuk memperbaiki keadaan dengan benar. Jika Anda memiliki 5 contoh Cheddar, 1 Brie, 1 Bri, dan 1 Chedar, bagaimana saya tahu mana yang benar dan mana yang salah ketik? Dengan volume yang lebih banyak, kesalahan pengetikan cenderung tetap sangat rendah, tetapi nilai-nilai langka mendapatkan beberapa peningkatan penting, membuat mereka keluar dari kebisingan (didukung oleh pengalaman). Dalam hal ini, saya bisa membayangkan 50000 Cheddar, 3000 Brie, 5 Bri, 15 Chedar, misalnya.
Jadi ya, beberapa masalah akhirnya bisa diselesaikan sendiri, ketika Anda memiliki cukup data.
sumber
Pertimbangkan masalah NP-complete 3-SAT. Jika Anda terus menambah masalah dengan memberikan input formulir x_i = true / false, Anda akhirnya mengubah pemisahan individu menjadi klausa dua variabel, sehingga menciptakan masalah 2-SAT yang dipastikan P, atau Anda akhirnya mendapatkan jawaban benar / salah.
Untuk kasus di mana terdapat redundansi dalam x_i = input benar / salah (input yang sama banyak diberikan, atau input kontradiktif) Anda dapat dengan mudah mengurutkan input dan mengabaikan nilai yang berlebihan, atau melaporkan kesalahan jika nilainya bertentangan.
Bagaimanapun, saya pikir ini merupakan masalah 'realistis' yang semakin mudah dipecahkan ketika jumlah input bertambah. Aspek 'lebih mudah' adalah dalam mengonversi masalah NP-complete ke masalah P. Anda masih dapat memainkan sistem dengan memberikan input yang konyol sehingga penyortiran hanya akan memakan waktu lebih lama dari yang dipaksakan dengan kasar.
Sekarang, skenario yang sangat keren adalah jika kita bersedia menerima T (0) (menggunakan notasi DW dalam jawaban di atas) dapat menjadi tak terbatas. Misalnya, T (0) bisa jadi setara dengan menyelesaikan Masalah Puting Turing. Jika kita dapat menemukan masalah sehingga menambahkan lebih banyak input mengubahnya menjadi masalah yang dapat dipecahkan, kita telah menemukan emas. Perhatikan bahwa tidak cukup untuk mengubahnya menjadi masalah yang dapat dipecahkan secara asimptotik - karena sama buruknya dengan kekerasan yang memaksa masalah tersebut.
sumber
Pertanyaannya adalah: "mungkinkah ada masalah yang benar-benar menjadi lebih mudah ketika input bertambah besar?" Bagaimana jika input adalah sumber daya yang akan digunakan oleh algoritma untuk bekerja pada suatu pekerjaan. Sudah menjadi rahasia umum bahwa semakin banyak sumber daya semakin baik. Di bawah ini adalah contoh, di mana semakin banyak karyawan, semakin baik.
3) Output:
Output adalah jalur antara tugas yang harus diambil oleh karyawan. Setiap jalur dikaitkan dengan jumlah karyawan yang mengambilnya. Sebagai contoh:
4) Kemungkinan solusi:
Salah satu solusi yang mungkin adalah pertama menghitung jalur terpendek ke node terdekat dari A. Ini akan menjadi jalur maju. Kemudian secara rekursif menghitung jalur maju untuk setiap tugas yang dikunjungi. Hasilnya adalah pohon. Sebagai contoh:
sumber