Kompleksitas waktu dari algoritma Bellman-Held-Karp untuk TSP, ambil 2

16

Sebuah pertanyaan baru-baru ini membahas algoritma pemrograman dinamis klasik sekarang untuk TSP, karena independen untuk Bellman dan Held-Karp . Algoritma secara universal dilaporkan berjalan dalam waktu O(2nn2) . Namun, seperti yang ditunjukkan oleh salah satu siswa saya baru-baru ini, waktu berjalan ini mungkin memerlukan model perhitungan yang sangat kuat.

Berikut adalah uraian singkat algoritmanya. Input terdiri dari grafik berarah dengan simpul dan fungsi panjang non-negatif . Untuk setiap simpul dan , dan setiap subset dari simpul yang tidak termasuk dan , misalkan menunjukkan panjang jalur Hamiltonian terpendek dari ke dalam subgraf diinduksi . Algoritma Bellman-Held-Karp didasarkan pada pengulangan berikut (atau sebagai ekonom dan ahli teori kontrol suka menyebutnya, "persamaan Bellman"):s t X s t L ( s , X , t ) s t G [ X { s , t } ]G=(V,E): E R +n:ER+stXstL(s,X,t)stG[X{s,t}]

L(s,X,t)={(s,t)if X=minvX (L(s,X{v},v)+(v,t))otherwise

Untuk setiap vertex , panjang optimal bepergian tur salesman adalah L (s, V \ setminus \ {s \}, s) . Karena parameter pertama s adalah konstan dalam semua panggilan rekursif, ada \ Theta (2 ^ nn) subproblem yang berbeda, dan setiap subproblem paling banyak bergantung pada n lainnya. Dengan demikian, algoritma pemrograman dinamis berjalan dalam waktu O (2 ^ nn ^ 2) .sL(s,V{s},s)sΘ(2nn)nO(2nn2)

Atau apakah itu ?!

Model RAM integer standar memungkinkan manipulasi bilangan bulat konstan dengan bit O(logn) , tetapi setidaknya untuk operasi aritmatika dan logis , bilangan bulat yang lebih besar harus dipecah menjadi potongan-potongan berukuran kata. (Kalau tidak, hal - hal aneh dapat terjadi.) Apakah ini tidak benar untuk mengakses alamat memori yang lebih lama? Jika suatu algoritma menggunakan ruang superpolynomial, apakah masuk akal untuk mengasumsikan bahwa akses memori hanya membutuhkan waktu yang konstan?

Untuk algoritma Bellman-Held-Karp khususnya, algoritma harus mengubah deskripsi subset X menjadi deskripsi subset X{v} , untuk setiap v , untuk mengakses tabel memoisasi. Jika himpunan bagian diwakili oleh bilangan bulat, bilangan bulat ini membutuhkan n bit dan karenanya tidak dapat dimanipulasi dalam waktu yang konstan; jika mereka tidak diwakili oleh bilangan bulat, representasi mereka tidak dapat digunakan secara langsung sebagai indeks ke dalam tabel memoisasi.

Jadi: Apa waktu berjalan asimptotik aktual dari algoritma Bellman-Held-Karp?

Jeffε
sumber
Tautan "hal-hal aneh" Anda rusak.
Tyson Williams
Saya memperbaiki tautannya.
Jeffε

Jawaban:

12

Ini kurang dari jawaban matematis daripada jawaban filosofis, tapi saya lebih suka memikirkan model RAM yang memungkinkan manipulasi bilangan bulat waktu-konstan dengan sejumlah B bit yang tidak diketahui tetapi setidaknya sebesar , di mana S adalah jumlah ruang yang dibutuhkan algoritma. Karena, jika bilangan bulat tidak sebesar itu, bagaimana Anda bisa mengatasi memori Anda? Untuk algoritma waktu dan ruang polinomial sama dengan bit O (log n), tetapi untuk algoritma ruang eksponensial, ia menghindari masalah.log2S

Tentu saja, jika S melebihi jumlah memori yang Anda miliki, algoritma Anda tidak akan berjalan sama sekali. Atau, itu akan berjalan dengan mem-paging informasi ke dalam dan keluar dari memori dan Anda harus menggunakan model hierarki memori daripada model RAM.

David Eppstein
sumber
Saya sudah terbiasa dengan gagasan bahwa model mesin harus bergantung pada ukuran input , tetapi ada sesuatu yang sedikit tidak beres tentang membiarkan model mesin bergantung pada algoritma. Apakah Anda benar-benar ingin membiarkan mesin Anda memecahkan masalah di PSPACE dalam waktu konstan, selama Anda sudah menggunakan ruang eksponensial? n
Jeff
3
Bagi saya itu kurang masalah membuat model bervariasi tergantung pada algoritma, dan lebih banyak pertanyaan memiliki model yang diperbaiki tetapi tidak mampu menjalankan semua algoritma (karena kehabisan ruang). Bagi saya itu tidak terdengar sangat berbeda dengan komputer sungguhan.
David Eppstein
1
Saya tidak yakin dengan jawaban David. Ada dua masalah di sini. Yang satu teoretis, yang lain praktis. Dalam pengaturan teoretis, lebih alami untuk lebih tepatnya tentang model dan menganalisis waktu berjalan dengan tepat. Dalam pengaturan praktis, tidak mudah untuk mengetahui apakah seseorang benar-benar kehabisan memori pada contoh tertentu karena berbagai optimasi yang dapat dilakukan (dan melakukan memoisasi parsial dll), namun, ketika menerapkan algoritma kita harus berurusan dengan bagaimana kami menyimpan set dan indeks ke dalamnya. Model di atas tidak membantu dalam hal ini.
Chandra Chekuri
8

Ada diskusi tentang masalah ini dalam buku terbaru oleh Fedor V. Fomin dan Dieter Kratsch " Algoritma Eksponensial Eksak" di mana mereka menentukan waktu berjalan dalam model RAM unit-cost dan model RAM log-cost ( - jarak maksimum antara kota dan f ( n ) = O ( g ( n ) ) jika f ( n ) = O ( g ( n ) p o l y ( n ) ) ):Wf(n)=O(g(n))f(n)=O(g(n)poly(n))

dan 2 n log W n O ( 1 ) (catatan, 2 n log W n O ( 1 )O ( 2 n ) ), masing-masing.O(2n)2nlogWnO(1)2nlogWnO(1)O(2n)

Oleksandr Bondarenko
sumber
1
Jadi mereka menghindari masalah dengan menyembunyikan faktor polinomial. Saya ingin tahu apa faktor polinomialnya!
Jeffε
3
Mereka menganggap bahwa faktor polinomial adalah (lihat tautan di komentar saya). n2
Oleksandr Bondarenko