Menemukan setidaknya dua jalur dengan panjang yang sama dalam grafik terarah

20

Misalkan kita memiliki grafik diarahkan dan dua node dan . Saya ingin tahu apakah sudah ada algoritma untuk menghitung masalah keputusan berikut:G=(V,E)AB

Apakah setidaknya ada dua jalur antara dan dengan panjang yang sama?AB

Bagaimana dengan kerumitannya? Bisakah saya menyelesaikannya dalam waktu polinomial?


Saya ingin menambahkan batasan baru pada grafik, mungkin masalahnya lebih bisa dipecahkan. Pada matriks adjacency, setiap kolom tidak kosong. Jadi, setiap simpul memiliki setidaknya satu panah pada input dan ada juga setidaknya satu simpul yang terhubung dengan dirinya sendiri. Jadi jika simpulnya adalah simpul ke- , maka adalah tepi pada grafik.i(i,i)

Paolo Parisen T.
sumber
Apakah maksud Anda jalur sederhana? (mengunjungi setiap simpul paling banyak satu kali), Apakah mereka diizinkan memiliki simpul internal yang sama?
1
tidak, tidak ada batasan pada jalur. Anda dapat mengulang, jika Anda mau.
Paolo Parisen T.
Pengamatan mudahnya adalah ini: jika hanya ada satu jalur sederhana antara , dan jalur sederhana ini terhubung ke paling banyak satu loop, Anda bisa langsung mengatakan , Jika setidaknya ada dua loop dengan panjang berbeda yang terhubung ke jalur sederhana ini , Anda bisa mengatakan ya, .... (Saya pikir hal-hal serupa bermanfaat dan Anda dapat membuktikannya), Tetapi dalam kasus jalur sederhana yang terputus-putus (jika selama ini Anda menemukan jalan yang terputus-putus), itu adalah NPC. A,BNo
1
@ mrm: Saya tidak melihat ini sebagai duplikat. Meminta semua jalan adalah operasi yang memakan waktu besar-besaran (secara umum, ada banyak jalan), sedangkan OP meminta dua jalur (sederhana), tidak semua jalan.
Dave Clarke

Jawaban:

10

Perhatikan grafik , kita ingin tahu apakah ada dua jalur berbeda dari ke dengan panjang yang sama. Melakukan apa? Sederhana: kode dua jalur dalam satu. Tentukan grafik dengan simpul . Anda membuat langkah di dengan membuat dua langkah independen dalam . Bit tambahan memberi tahu Anda apakah kedua jalur sudah terpisah satu sama lain.GABGV×V×{0,1}GG

Secara formal, ada edge di iff(i,j,e)(i,j,e)G , j j di G dan e = e ( i , i ) ( j , j ) .iijjGe=e(i,i)(j,j)

Algoritma memeriksa apakah ada jalur ke ( B , B , 1 ) dalam G , yaitu O ( V 4 ) , atau sesuatu seperti O ( ( V + E ) 2 ) .(A,A,0)(B,B,1)GO(V4)O((V+E)2)

Jika Anda setuju bahwa algoritma ini benar maka, sebagai akibatnya, jalur dalam panjangnya paling banyak 2 n 2 , oleh karena itu potensi "tumbukan jalur" harus terjadi paling baru pada panjang itu. Anda bisa mendapatkan algoritma O ( V ω log V ) dari pengamatan ini, di mana ω adalah kompleksitas perkalian matriks (tanyakan apakah Anda memerlukan spoiler ...).G2n2O(VωlogV)ω

Saya sangat merasakan ada algoritma , yang menggunakan lebih banyak struktur masalah.O(V+E)

sdcvvc
sumber
3
Itu elegan.
Raphael
4

Mungkin saya punya jawaban untuk masalah ini, tapi saya tidak yakin itu berfungsi.

Tidaklah penting untuk "menemukan" dua jalan, satu-satunya yang penting adalah "mengetahui" apakah ada atau tidak. Saya tidak berpikir bahwa ini adalah masalah lengkap NP.

Jadi, mengambil adjacency matrix . Kita dapat dengan mudah mengira bahwa itu diisi dengan nilai 0,1. (0 = tanpa tepi; 1 = ada tepi) Mari kita gunakan aljabar berikut dengan 3 nilai (0,1,2), di mana semuanya bekerja seperti biasa kecuali: 2 + <sesuatu> = 2 ; 2 <apa pun yang lebih besar dari 0> = 2A2+<something>=22<whatever greater than 0>=2

Jadi, jika ada dua jalur dengan panjang yang sama dari saya berharap ada nilai p sehingga ( A p ) i , j = 2 .i,jp(Ap)i,j=2

nAn×npAn2p<n2AA2A3

inilah argumentasi saya:

  • n
  • n2n2
  • α+βm=γ+δkmkAqijqAq1ijn2δβLCM(a,b)(ab)/GCD(a,b)n

(Ap)i,j=2

Apakah aku salah?

Paolo Parisen T.
sumber
αγ
2
n2nαγLCM(a,b)+α+γ<ab+α+γα+γ+a+b<nab+α+γn2