Diberikan grafik asiklik terarah dengan simpul bagaimana kita dapat menentukan apakah ada jalur antara n pasangan simpul berikut ( 1 → n + 1 ) , … , ( n → n + n ) ? Ada algoritma sederhana dalam O ( n ⋅ ( n + m ) ) (di mana m adalah jumlah tepi) dengan melakukan pencarian dari setiap node 1 ... n , tetapi dapatkah itu dilakukan lebih baik?
EDIT: Saya mencari keberadaan, bukan jalur lengkap.
Jawaban:
Seperti yang ditunjukkan Chandra Chekuri dalam komentar, Anda bisa menghitung penutupan transitif melalui perkalian matriks cepat, menyelesaikan masalah dalam waktu O ( ) (gunakan metode favorit Anda, O ( n 2.376 ) melalui Coppersmith dan Winograd, atau lebih praktisnya menggunakan Strassen's O ( n 2.81 )), dan ini akan bagus untuk grafik yang padat.nω n2.376 n2.81
Sekarang, saya mengklaim bahwa jika Anda dapat mengalahkan waktu berjalan ini untuk masalah Anda untuk grafik padat, Anda akan mendapatkan algoritma untuk deteksi segitiga yang lebih efisien daripada menghitung produk dari dua matriks Boolean. Keberadaan algoritma semacam itu adalah masalah terbuka utama.
Saya akan mengurangi masalah segitiga menjadi masalah jangkauan-n-pasangan-DAG. Misalkan kita diberi grafik G pada n node dan kami ingin menentukan apakah G berisi segitiga.
Sekarang, dari G buat DAG G 'sebagai berikut. Buat empat salinan set simpul, , V 2 , V 3 , V 4 . Untuk salinan u i ∈ V i , v i + 1 ∈ V i + 1 untuk i = 1 , 2 , 3 , tambahkan tepi ( u i , v i + 1 ) iff ( u , v )V1 V2 V3 V4 ui∈Vi vi+1∈Vi+1 i=1,2,3 (ui,vi+1) (u,v) berada di G. Sekarang jika kita bertanya apakah ada jalur antara salah satu pasangan untuk semua u ∈ G, maka ini akan persis bertanya apakah ada segitiga di G . Grafik saat ini memiliki 4 n node dan kami bertanya tentang n pasangan. Namun, kita dapat menambahkan 2 n node dummy terisolasi dan memiliki 3 n query (dengan menambahkan query untuk 2 n pasangan yang berbeda ( y , d ) di mana y ∈ V 2(u1,u4) u∈ G 4n n 2n 3n 2n (y,d) dan d boneka), sehingga mendapatkaninstance 6 n -node dari masalah Anda.y∈V2∪V3 d 6n
sumber
Sortasi topologis ( ) kemudian turunkan dengan menyebarkan bit bit dari mana setiap node dapat dicapai ( O ( m n ) ).O(m+n) O(mn)
sumber
Heuristik lain dapat ditambahkan, tetapi efisiensinya (dan efisiensi dari tiga yang diusulkan) sangat tergantung pada struktur grafik.
sumber