Saya ingin mempartisi angka yang diberikan N (mungkin atau mungkin tidak sama) menjadi 2 himpunan bagian sehingga 2 himpunan bagian memiliki jumlah sedekat mungkin dan juga kardinalitas set sama (jika n genap) atau hanya berbeda dengan 1 ( jika n aneh).
Saya pikir kita bisa melakukan ini dalam waktu polinomial semu , di mana adalah jumlah angka dalam himpunan.A
Bisakah saya melakukan lebih baik dari ini? Yaitu, apakah ada algoritma waktu polinomial semu yang berjalan dalam waktu dengan ?c < 2
Terima kasih sebelumnya!
ds.algorithms
co.combinatorics
partition-problem
Firebrandt
sumber
sumber
Jawaban:
Seseorang dapat menyelesaikan masalah keputusan dalam waktu .HAI~( n A )
Biarkan urutan angka menjadi . Definisikan sebagai himpunan sedemikian rupa sehingga jika jika ada dengan panjang yang berjumlah . Jika kami telah menghitung , maka kami hanya perlu waktu tambahan untuk menyelesaikan secara menyeluruh untuk menyelesaikan masalah Anda.F S ( i , j ) ∈ F S S j i F S O ( n A ) F SS FS ( i , j ) ∈ FS S j saya FS O ( n A ) FS
Jika dan adalah dua bagian dari partisi , makaS 2 SS1 S2 S
di mana adalah jumlah minkowski, dan penambahan di antara tupel didefinisikan secara koordinat.A + B = { a + b | a ∈ A , b ∈ B }
Klaim: Menghitung dari F S 1 dan F S 2 membutuhkan waktu ˜ O ( | S | A ) .FS FS1 FS2 HAI~( | S| A)
Bukti: Menerapkan konvolusi 2D pada dua tabel ukuran .A × | S|
Algoritma mempartisi urutan ke dua urutan berukuran sama, menerapkan rekursi untuk masing-masing, dan mengambil jumlah hasil minkowski. Misalkan menjadi waktu berjalan terburuk ketika input ke algoritma memiliki elemen n dan A adalah batas atas dari penjumlahan. Kami memiliki Yang menunjukkan .TSEBUAH( n ) n SEBUAH
T A ( n ) = ˜ O ( n A )
Tersembunyi Faktor adalah log n log n A .catatan catatann logn A
sumber
Jika perawatan siapa pun tentang faktor, dengan analisis yang cermat kita dapat membuktikan kompleksitas waktu untuk algoritma Chao adalah O ( n A log ( n A ) ) .catatan O ( n A log( n A ) )
Bukti. Pada lapisan genap dari pohon rekursi, kami mempartisi himpunan menjadi dua himpunan berukuran sama S 1 dan S 2 , yang menghasilkan T e ( n , A ) = T o ( n / 2 , A ′ ) + T o ( n / 2 , A - A ′ ) + O ( n A log ( n A ) ) ,S S1 S2
sumber