Mengambil jalur terpendek dari grafik dinamis

24

Saya sedang mempelajari jalur terpendek dalam grafik terarah saat ini. Ada banyak algoritma yang efisien untuk menemukan jalur terpendek dalam jaringan, seperti dijkstra atau bellman-ford. Tetapi bagaimana jika grafiknya dinamis? Dengan mengatakan dinamis, saya maksudkan bahwa kita dapat menyisipkan atau menghapus simpul selama eksekusi program. Saya mencoba untuk menemukan algoritma yang efisien untuk memperbarui jalur terpendek dari vertex ke setiap titik lain , setelah memasukkan keunggulan , tanpa perlu menjalankan algoritma jalur terpendek dalam grafik baru lagi. Bagaimana saya bisa melakukan ini? Terima kasih sebelumnya.u evue

  • Catatan: perubahan dapat dilakukan setelah iterasi pertama algoritma
  • Catatan [2]: dua node diberikan, sumber dan target. Saya perlu menemukan jalur terpendek antara node-node ini. Ketika grafik diperbarui, saya hanya perlu memperbarui , yang merupakan jalur terpendek antara dan .t π ( s , t ) s tstπ(s,t)st
  • Catatan [3]: Saya hanya tertarik pada kasus sisipan tepi.

Definisi formal : Diberikan grafik . Mendefinisikan operasi update sebagai 1) penyisipan dari tepi ke atau 2) aa penghapusan tepi dari . Tujuannya adalah untuk menemukan secara efisien biaya semua jalur terpendek setelah operasi pembaruan. Secara efisien, maksud kami setidaknya lebih baik daripada mengeksekusi algoritma All-Pairs-Shortest-Path, seperti algoritma Bellman-Ford, setelah setiap operasi pembaruan.e E e EG=(V,E)eEeE


Sunting: Di bawah ini ada versi sederhana dari masalah:

Grafik tertimbang diberikan, terdiri dari tepi searah, dan dua simpul kritis dan . Satu set dari tepi dua arah kandidat juga diberikan. Saya harus membuat edge untuk meminimalkan jarak dari ke .s t CG(V,E)stCs t(u,v)Cst

Rontogiannis Aristofanis
sumber
Lebih banyak pertanyaan klarifikasi: Apakah titik akhir jalur Anda tetap setiap saat? Apakah Anda hanya tertarik pada kasus sisipan tepi, atau perubahan sewenang-wenang dalam grafik? Saya akan berpikir bahwa ada riset untuk menjawab pertanyaan Anda, tetapi sayangnya saya tidak benar-benar tahu ke mana harus mencari. Pencarian Google cepat menghasilkan slide ini yang tampaknya sangat membantu, dan makalah ini: "jalur terpendek pada grafik dinamis" (harap link berfungsi). (u,v)
usul

Jawaban:

14

Masalah yang mungkin Anda perhatikan adalah masalah yang cukup sulit. Memeriksa web akan menghasilkan beberapa contoh kompleks yang mungkin tidak Anda perlukan. Inilah solusinya - seperti yang dipersyaratkan (yaitu Anda tidak perlu menghitung ulang semuanya dari awal).

untuk kasus penambahan edge - lalu gunakan matriks jarak yang sudah dibangun - lakukan hal berikut:(u,v)

Untuk setiap pasangan node dan periksa apakah - ini dapat dilakukan di karena Anda membandingkan setiap pasangan node.xyd((x,u))+c((u,v))+d((v,y))<d((x,y))O(n2)

Untuk kasus tepi penghapusan: Mengingat matriks jarak sudah dibangun, maka Anda dapat memiliki untuk setiap node pohon terpendek-jalan berakar di . Jika tepi terhapus tidak ada di pohon itu, maka jalur terpendek dari ke yang lain tidak terpengaruh - (mereka tetap sama).uueu

Jika berada di pohon jalur terpendek dari , maka untuk setiap simpul sedemikian sehingga jalur terpendek termasuk , jalur akan berubah. Oleh karena itu, hitung jalur terpendek dari ke . Sekarang, ulangi yang sebelumnya untuk setiap node - ini bukan solusi terbaik. Faktanya, dalam kasus terburuknya, asimptotik sama dengan melakukan segala sesuatu dari awal, tetapi rata-rata bisa lebih baik. euvπ(u,v)euv

jika Anda ingin memiliki hasil yang lebih baik dari ini, lihat:

  1. Demetrescu, Camil, dan Giuseppe F. Italiano. "Pendekatan baru untuk dinamis semua pasangan jalur terpendek." Jurnal ACM (JACM) 51.6 (2004): 968-992. (dapat ditemukan secara bebas dari Google)

  2. atau lihat survei yang ditulis dengan baik ini

Dipotong
sumber
17

Masalah yang Anda tanyakan adalah masalah algoritmik yang terkenal. Sebenarnya masih terbuka, betapa sulitnya masalah ini sebenarnya. Anda juga harus tahu bahwa ada inkarnasi yang berbeda dari masalah ini. Sebaliknya apa yang Anda minta, biasanya hanya jarak yang dikembalikan, sedangkan Anda meminta jalur terpendek yang sebenarnya. Perhatikan bahwa jalur ini bisa sangat panjang. Algoritma grafik dinamis membedakan antara hanya penghapusan tepi (algoritme dg decremental), hanya insersi tepi (algoritme dg inkremental) dan insersi dan penghapusan tepi (algoritme dg dinamis penuh). Dengan demikian Anda tertarik pada algoritma tambahan .

Algoritme yang disebutkan dalam pos AJed, sedikit usang. Ada hasil yang lebih baru dari Thorup, lihat di sini, di halaman 8 untuk survei singkat. Algoritma APSP eksak sepenuhnya dinamis terbaik saat ini oleh Thorup (untuk kueri jarak, bukan path), membutuhkan waktu pembaruan diamortisasi, sambil mendukung waktu permintaan kasus terburuk. Perhatikan, bahwa jika Anda memiliki edge, maka Anda bisa menghitung ulang dari awal dengan Dijkstra dan Fibonacci-heaps dan mendapatkan waktu berjalan yang sama seperti pada algoritma Thorup. Jadi jika grafik Anda tidak terlalu padat, saya akan merekomendasikan menggunakan Dijkstra.O ( 1 ) O ( n log n )O(n2(logn+log2(1+m/n))O(1)O(nlogn)

Saya tidak mengetahui adanya algoritma inkremental yang lebih baik . Tetapi Anda harus melakukan pencarian web jika ada hasil yang lebih baru untuk masalah khusus ini.

A.Schulz
sumber
Saya tidak perlu memperbarui semua jalur terpendek dalam grafik, tetapi hanya antara pasangan tertentu . Apakah ada yang lebih baik untuk itu? (s,t)
Rontogiannis Aristofanis
@RondogiannisAristophanes sebenarnya apa yang telah diusulkan sejauh ini adalah yang terbaik. Lihatlah makalah ini yang mengklaim bahwa: "masalah jalur terpendek satu sumber tambahan dan penurunan, untuk grafik tertimbang atau tidak berarah, adalah, dalam arti yang kuat, setidaknya sekeras statis semua pasangan jalur terpendek masalah." (sejujurnya, saya hanya membaca intro) - referensi: "Pada masalah jalur terpendek dinamis", Roditty & Zwick - tetapi apakah Anda mau memberi tahu kami apa masalah sebenarnya yang Anda miliki? skenario spesifik apa? apa yang sudah kamu don sejauh ini? - mungkin kami dapat membantu Anda lebih baik.
AJed
@RondogiannisAristophanes semakin baik kinerjanya, semakin sulit untuk diimplementasikan (dalam kebanyakan kasus) dan kadang-kadang dalam aplikasi praktis Anda tidak perlu semua peningkatan kinerja.
AJed
@ AJed Saya mengedit posting saya untuk memasukkan deskripsi masalah yang disederhanakan.
Rontogiannis Aristofanis
5

Saya percaya algoritma AD * mungkin membantu Anda.

http://www.cs.cmu.edu/~ggordon/likhachev-etal.anytime-dstar.pdf

Ketika informasi terbaru mengenai grafik yang mendasarinya diterima, algoritma secara bertahap memperbaiki solusi sebelumnya. Hasilnya adalah suatu pendekatan yang menggabungkan manfaat dari perencana kapan saja dan tambahan untuk memberikan solusi yang efisien untuk masalah pencarian yang kompleks dan dinamis

Sorotan AD *: Ini "kapan saja", yang berarti dapat memberi Anda "solusi sub-optimal" dengan sangat cepat, meskipun itu mungkin bukan yang terbaik. Meskipun diberikan waktu yang cukup, itu akan mengembalikan solusi optimal. Selain itu, Anda dapat membatasi solusi sub-optimal agar tidak lebih buruk daripada solusi optimal oleh beberapa konstanta yang ditentukan pengguna. Ini memberi Anda kemampuan untuk menggunakan ini dalam skenario perencanaan waktu nyata di mana memiliki solusi yang oke (di mana 'oke' secara teoritis dibatasi) lebih baik daripada tidak memiliki solusi sama sekali.

http://www.cs.cmu.edu/~maxim/software.html

pemenang
sumber