Apakah memeriksa transitivitas suatu digraf tidak lebih mudah daripada (dalam hal kompleksitas asimptotik) mengambil penutupan transitif dari digraf? Apakah kita tahu ada batas bawah yang lebih baik daripada untuk menentukan apakah digraf transitif atau tidak?Ω ( n 2 )
9
Jawaban:
Di bawah ini saya akan menunjukkan yang berikut: jika Anda memiliki algoritma waktu O ( ) untuk memeriksa apakah grafik transitif untuk , maka Anda memiliki O ( ) algoritma waktu untuk mendeteksi segitiga dalam grafik node, dan karenanya (dengan kertas dari FOCS'10 ) Anda akan memiliki algoritma waktu O ( ) untuk mengalikan dua boolean matriks, dan karenanya oleh hasil Fischer dan Meyer dari 70-an , ini juga menyiratkan algoritma waktu O ( ) untuk penutupan transitif.n 3 - ε ε > 0 n 3 - ε n n 3 - ε / 3 n × n n 3 - ε / 3n3−ε ε>0 n3−ε n n3−ε/3 n×n n3−ε/3
Misalkan Anda ingin mendeteksi segitiga dalam simpul . Kita sekarang dapat membuat grafik berikut . adalah tripartit dengan partisi pada node masing-masing. Berikut setiap node dari memiliki salinan di bagian I , J , K . Untuk setiap tepi ( u , v ) dari G menambahkan tepi diarahkan ( u I , v J ) dan ( u Jn G H H I , J , K n x G x I , x J , x K G ( u I , v K )n G H H I,J,K n x G xI,xJ,xK I,J,K (u,v) G (uI,vJ) , v K )(uJ,vK) . Untuk setiap nonedge ( u , v ) dari tambahkan tepi terarah .(u,v) G (uI,vK)
Pertama, jika mengandung segitiga , maka tidak transitif. Ini karena tepi berada di tetapi tidak. Kedua, jika tidak transitif, maka harus ada beberapa jalur diarahkan dari beberapa simpul untuk beberapa simpul di sehingga tidak tepi diarahkan di . Namun, jalur terpanjang di , maka membentuk segitiga diG u , v , w H ( u I , v J ) , ( v J , w K ) H ( u I , w K ) H s t H ( s , t ) H H 2 ( u I , v J ) , ( v J , w K ) ( u I ,G u,v,w H (uI,vJ),(vJ,wK) H (uI,wK) H s t H (s,t) H H memiliki tepi, dan setiap jalur tersebut harus berbentuk dan tidak ada di2 (uI,vJ),(vJ,wK) wK)(uI,wK) HH u,v,wu,v,w GG .
sumber
Sepertinya adalah batas bawah yang paling dikenal, karena setiap batas bawah menyiratkan batas bawah untuk perkalian matriks boolean. Kita tahu bahwa pemeriksaan transitivitas dapat dicapai dengan menggunakan satu perkalian matriks boolean, yaitu, adalah transitif jika dan hanya jika .Ω ( n 2 ) G G = G 2Ω(n2) G G=G2
sumber
Mencari tahu apakah DAG transitif sama sulitnya dengan memutuskan apakah digraf umum transitif (yang membawa kita kembali ke pertanyaan sebelumnya :)).
Asumsikan Anda memiliki algoritma yang berjalan dalam waktu O ( f ( n ) ) untuk memutuskan apakah DAG adalah transitif.O(f(n))
Diberi grafik G terarah , Anda dapat menggunakan algoritma acak berikut untuk memutuskan apakah G transitif dalam waktu O ( f ( n ) ⋅ log ( 1)G G δ ))dan probabilitas kesalahan≤δ:O(f(n)⋅log(1δ)) ≤δ
Sekarang jelas bahwa jika G adalah transitif, algoritma ini mengembalikan true.G
Sekarang anggap G tidak transitif. Misalkan e 1 = ( v i , v j ) , e 2 = ( v j , v k ) ∈ E sedemikian rupa sehingga ( v i , v k ) ∉ E (harus ada tepi seperti G tidak transitif). Probabilitas bahwa e 1 , e 2 ∈ G ' adalah 1G e1= ( vsaya, vj) , e2= ( vj, vk) ∈ E ( vsaya, vk) ∉ E G e1, e2∈ G′ 6 , oleh karena itu dalam setiap iterasi probabilitas bahwa algoritma akan mencariGtidak transitif adalah116 G 6 dan setelahO(log(δ))iterasi probabilitas kegagalan paling banyakδ.16 O(log(δ)) δ
sumber
Saya pikir ini harus layak dalam waktu linier, yaitu O ( n + m ) di mana n adalah jumlah simpul dan m jumlah tepi. Mungkin dengan mengadaptasi beberapa skema traversal grafik ke pengaturan yang diarahkan? Titik awal bisa berupa LexBFS / LexDFS yang dijelaskan di sini ; untuk grafik terarah tampaknya kita harus menggunakan pengurutan topologis daripada DFS, jadi mungkin itu mungkin dengan beberapa algoritma LexTSA untuk menemukan?O(n+m) n m
sumber
Mengenai jawaban sebelumnya, berikut adalah cara sederhana untuk mendefinisikan algoritma semacam itu. Tetapkan untuk setiap titik x indeks i ( x ) , diinisialisasi ke 0 . Untuk setiap x , misalkan M ( x ) menunjukkan multiset dari indeks dari tetangganya. Kami mensimulasikan penyortiran topologis dengan mempertahankan set R dari simpul yang belum dijelajahi, diinisialisasi ke seluruh set. Pada setiap langkah, kami melakukan hal berikut:x i(x) 0 x M(x) R
Memilih simpul x ∈ R yang multiset M ( x ) minimal (dalam urutan multiset);x∈R M(x)
Memperbarui i ( x ) loop counter dan menghapus saat x dari R .i(x) x R
Dapatkah algoritma ini digunakan untuk masalah Anda, atau untuk beberapa aplikasi lain?
sumber