Pertimbangkan tugas algoritmik berikut:
Input: bilangan bulat positif , bersama dengan faktorisasi utamanya
Cari: bilangan bulat positif yang meminimalkan , tunduk pada batasan bahwa
Apa kompleksitas masalah ini? Apakah ada algoritma waktu polinomial? Apakah ini NP-hard?
Masalah ini pada dasarnya bertanya: dari semua padatan persegi panjang yang volumenya dan yang dimensinya bilangan bulat, yang mana yang memiliki luas permukaan paling kecil?
Masalah ini diajukan oleh Dan Meyer, dengan judul Masalah Matematika yang Tidak Dapat Dipecahkan oleh 1.000 Guru Matematika . Sejauh ini tidak ada guru matematika yang bekerja dengannya menemukan algoritma yang masuk akal untuk masalah ini. Dalam konteksnya, definisi "masuk akal" agak tidak tepat, tetapi sebagai ilmuwan komputer kita dapat mengajukan pertanyaan yang lebih tepat tentang kompleksitas masalah ini.
Pendekatan yang jelas adalah untuk menghitung semua kemungkinan untuk , tetapi itu membutuhkan waktu yang eksponensial. Komentator di blog Dan Meyer telah mengusulkan banyak algoritma kandidat efisien yang sayangnya semuanya ternyata tidak benar. Martin Strauss menyarankan bahwa masalah ini agaknya mengingatkan pada 3-partisi , tetapi saya tidak dapat melihat pengurangan.
Izinkan saya juga menjernihkan beberapa kesalahpahaman yang saya lihat di komentar / jawaban:
Anda tidak dapat mengurangi dari 3-partisi hanya dengan mengganti setiap angka dengan kekuatannya , karena fungsi objektif dari kedua masalah berbeda. Pengurangan yang jelas tidak bekerja.
Tidak benar bahwa solusi optimal melibatkan memilih salah satu dari untuk menjadi pembagi terdekat dari ke . Saya melihat banyak orang yang berasumsi ini adalah kasus, tetapi pada kenyataannya, itu tidak benar. Ini sudah dibantah pada posting blog Dan Meyer. Sebagai contoh, pertimbangkan ; , dan 4 membagi 68, jadi Anda mungkin berpikir bahwa setidaknya satu dari harus 4; Namun, itu tidak benar. Solusi optimal adalah , , . Contoh tandingan lain adalah , , tetapi solusi optimalnya adalah , , . ( Mungkin benar bahwa untuk semua , solusi optimal melibatkan membuat setidaknya satu dari sama dengan pembagi terkecil dari lebih besar dari atau pembagi terbesar lebih kecil dari - Saya tidak punya contoh tandingan sekarang - tetapi jika Anda berpikir pernyataan ini benar, itu akan memerlukan bukti. Anda benar-benar tidak dapat menganggap itu benar.)z = 2x , y , z n 3 √ 3 √
"Jadikan dengan ukuran yang sama" tampaknya tidak selalu menghasilkan jawaban optimal dalam semua kasus; lihat posting blog Dan Meyer untuk contoh-contoh tandingan. Atau, setidaknya, untuk beberapa interpretasi yang masuk akal dari frasa "buat mereka kira-kira berukuran sama", ada contoh tandingan yang menunjukkan bahwa strategi ini sebenarnya tidak optimal. Jika Anda ingin mencoba beberapa strategi semacam itu, pastikan bahwa Anda menyatakan klaim secara tepat dan kemudian berikan bukti matematika yang cermat.
Waktu berjalan tidak polinomial. Agar masalah ini berada di P, waktu berjalan harus polinomial dalam panjang input . Panjang input adalah sesuatu seperti , bukan . Algoritma brute-force yang jelas dapat dibuat untuk berjalan dalam waktu atau , tetapi itu eksponensial dalam dan dengan demikian dianggap sebagai algoritma waktu eksponensial. Jadi itu tidak membantu.lg n n O ( n 3 ) O ( n 2 ) lg n
Jawaban:
Berikut adalah versi modifikasi dari algoritma "pilih pembagi dekat cube root". Itu masih harus memaksa banyak kasus, jadi saya tidak yakin berapa banyak perbaikan nyata itu bijaksana untuk menghitung semua kasus. Namun, saya mengirimkannya sebagai koreksi terhadap algoritma pada OEIS (yang menghasilkan hasil yang salah) karena saya percaya itu setidaknya harus akurat.
Berikut adalah algoritma untuk menemukan (s1, s2, s3) dan luas permukaan prisma segi empat dengan volumenya n:
Algoritma ini menyebutkan beberapa dari tiga kali lipat (s1, s2, s3) tetapi hanya perlu menguji pembagi di bawah akar pangkat tiga. (Karena tidak semua tiga pembagi bisa di atas akar pangkat tiga). Dengan cara yang sama, s2 hanya perlu menguji pembagi n / s1 di bawah akar kuadrat n / s1, karena tidak kedua pembagi dapat berada di atas akar kuadrat)
Catatan pada langkah 3: jika root cube adalah pembagi maka n adalah cube dan kita bisa berhenti di sana dengan luas permukaan minimal 6 * s1 ^ 2 dari kotak (s1, s1, s1).
Python:
sumber
Masalahnya tentu saja terkait dengan kompleksitas anjak jika dekomposisi utama tidak diberikan. Mengingat faktor-faktor, dan mengambil log dari semua faktor utama, masalah ini tampaknya hampir sama dengan meminimalkan penyimpangan-dari-rata-rata jumlah partisi (latihan, mungkin baik secara analitis atau eksperimental, temukan seberapa dekat perkiraan intuitif ini dari masalah memegang).k
Inilah kasus 3-arah (jumlah partisi adalah ). kasus 2-arah telah dipelajari secara ekstensif dan NP keras (dari 1 st ref). (Kasus 2-cara ini tidak cukup sama dikenal NP-lengkap 2-way masalah partisi di mana jumlah partisi adalah sama. Catatan jumlah partisi yang sama menyiratkan 0 penyimpangan dalam jumlah partisi dan sebaliknya. ) 2 nd ref studi 3- cara dan partisi n -jalan, sebagian secara empiris, di mana tidak ada studi sebanyak kasus 2-arah.log( x ) , masuk( y) , log( z) n
Masalah Sulit Paling Mudah: Partisi Nomor / Mertens
Pemisahan Nomor Multi-Arah / Korf
sumber
Edit
Inilah argumen informal untuk alasan mengapa algoritma cepat tidak mungkin ada. Kalimat itu tidak berubah, tetapi saya telah mengambil apa yang dulu ada di sini karena terstruktur terlalu banyak seperti bukti formal di bagian berikutnya dan diskusi semakin teralihkan ke bug-nya, beberapa di antaranya saya perhatikan sendiri dan satu yang dengan ramah ditunjukkan DW kepada saya. Sebagai gantinya, saya mencoba mengungkapkan intuisi di baliknya.
Apa yang terjadi ketika kita menerjemahkan langkah-langkah yang sama menjadi aljabar yang berbeda, seperti penjumlahan dan pengurangan alih-alih perkalian dan pembagian? Kita tahu (lihat lemma di bawah) bahwa algoritma kami akan menemukan 3-partisi yang produknya sama, jika ada, atau menentukan tidak ada 3-partisi seperti itu. Jadi, jika kita bisa menerjemahkan teknik yang sama ke dalam kelompok aditif, kita bisa menemukan 3-partisi yang jumlahnya sama, atau menentukan bahwa tidak ada partisi seperti itu. Dengan kata lain, kita bisa menyelesaikan 3-partisi dalam waktu polinomial. Itu tidak masuk akal.
Jadi, mengapa algoritma seperti itu bisa berfungsi untuk multiplikasi dan gagal sebagai tambahan? Salah satu alasan yang mungkin adalah bahwa setiap bilangan bulat memiliki faktorisasi prima yang unik di bawah multiplikasi, tetapi merupakan siklik yang ditambahkan. Lain adalah bahwa perkalian membentuk cincin dengan tambahan, sehingga Anda memiliki satu set operasi yang dapat Anda gunakan. Lain adalah bahwa Anda harus menggeneralisasi algoritma untuk bekerja untuk non-bilangan prima, dan itu mungkin tergantung pada keutamaan mereka. DW yang ditunjukkan adalah bahwa metode terjemahan spesifik mungkin secara eksponensial meningkatkan ukuran input Anda. Dan mungkin P = NP setelah semua.
Tetapi jika itu adalah celah yang memungkinkan algoritma cepat bekerja, saya pikir itu masih berguna untuk diketahui, karena itu menunjukkan di mana kita harus memfokuskan upaya kita. Kita harus mencari sesuatu yang akan rusak jika kita mencoba menerapkannya pada masalah NP-complete. Suatu pendekatan yang akan digeneralisasikan ke aljabar lain mungkin menggonggong pohon yang salah. Saya curiga, multiplikasi tidak cukup berbeda untuk berhasil, tetapi itu hanya dugaan.
Kata pengantar singkat
Motivasi langsung saya untuk membuktikan ini adalah untuk mengisi gelombang tangan dalam bukti saya di atas bahwa, jika solusi kubus sempurna ada, itu optimal. Namun, rumus ini bisa berguna untuk memangkas pohon pencarian.
Berbagai Macam Pikiran
Saya tidak melihat kesimetrisan yang jelas kecuali pertukaran dari x, y dan z, yang hanya memberi kita paling tidak faktor konstan 6. Kita memang punya beberapa speedups untuk 2-partisi yang pada dasarnya mengatakan kita ingin kedua istilah untuk sedekat mungkin satu sama lain, tetapi saya tidak segera melihat aplikasi untuk masalah ini.
Dari atas kepala saya, hanya mengambil log dari semua angka segera mengurangi ini menjadi masalah 3-partisi klasik menggunakan penambahan, atau setara, mengambil beberapa angka ke kekuatan angka dalam masalah penambahan 3-partisi apapun mengubahnya menjadi masalah multiplikasi seperti ini. Itu menyiratkan masalah ini seharusnya tidak mudah. Di sini kita memang memiliki faktorisasi utama, sedangkan faktorisasi itu tidak akan menjadi prima, tetapi apakah itu membantu kita?
Secara grafis, permukaan xyz = 0 akan terlihat seperti penyatuan bidang xy-, yz- dan xz, dan untuk setiap n positif, persamaannya akan terlihat seperti y = n / xz, sehingga setiap irisan sepanjang bidang koordinat akan menjadi sebuah hiperbola. Secara umum kita dapat mengatakan bahwa jumlah yang kita coba untuk meminimalkan adalah yang terendah di titik asal dan tumbuh paling cepat di sepanjang garis di mana x = y = z. Jika kita dapat mencari hanya di manifold ini, kita mungkin bisa menguranginya menjadi masalah dua dimensi.
sumber