Apakah perlu untuk memanggil perkalian matriks kali untuk menemukan cakar


20

Cakar adalah . Algoritma trivial akan mendeteksi cakar dalam waktu . Ini dapat dilakukan dalam , di mana adalah eksponen dari perkalian matriks cepat, sebagai berikut: ambil subgraf yang diinduksi oleh untuk setiap simpul , dan temukan sebuah segitiga di komplemennya. O ( n 4 ) O ( n ω + 1 ) ω N [ v ] vK1,3O(n4)O(nω+1)ωN[v]v

Sejauh yang saya tahu, algoritma dasar ini hanya diketahui. Spinrad yang tercantum dalam bukunya "representasi grafik yang efisien" mendeteksi cakar di waktu o(nω+1) sebagai masalah terbuka (8.3, halaman 103). Untuk batas bawah, kita tahu bahwa algoritma waktu O(nc) akan menyiratkan algoritma waktu O(nmax(c,2)) untuk mencari segitiga. Jadi kita dapat menganggap Ω(nω) sebagai batas bawah.

Pertanyaan:

  1. Apakah ada kemajuan dalam hal ini. Atau ada kemajuan dalam menunjukkan itu tidak mungkin?
  2. Apakah ada masalah alami lainnya dengan algoritme waktu O(nω+1) yang terbaik?

Ucapan:

  1. Saya secara eksplisit meminta deteksi cakar, bukannya pengakuan grafik bebas cakar. Meskipun suatu algoritma biasanya memecahkan keduanya, ada beberapa pengecualian.
  2. Diklaim dalam Handbook of Algorithms dan Theoretical Computer Science bahwa itu dapat ditemukan dalam waktu linier, tetapi itu hanya kesalahan ketik (lihat "representasi grafik yang efisien").

Anda dapat menggunakan metode Alon et al. Untuk menemukan segitiga dalam O(|E|1.41) , untuk setiap node yang berakhir pada HAI(|V||E|1.41) yang merupakan lebih baik dari |V|ω+1 jika grafiknya tidak terlalu padat.
RB

@RB, terima kasih telah menunjukkan ini. Gagasan dasarnya adalah menjalankan n -triangle-detection-algorithm apa pun nkali, yang ingin saya hindari.
Yixin Cao

Bagaimana kita bisa berharap menemukan beberapa algoritma yang tidak terkait dengan penemuan segitiga? Karena apa pun algoritma itu harus memeriksa tetangga masing-masing titik. Maksud saya bahwa properti adalah properti yang sangat lokal, kecuali dengan perbedaan faktor konstan setiap titik harus dilihat. (Atau saya tidak dapat membayangkan algoritma alami yang menghindari lokasi ini). Apakah Anda punya ide yang bahkan kabur?
Saeed

2
Mungkin baik untuk menyebutkan bahwa jika kita dapat menemukan cakar dalam waktu f (n), kita juga dapat menemukan segitiga dalam waktu f (n + 1) (cukup lengkapi grafik dan tambahkan satu lagi simpul yang terhubung ke semua orang ), jadi kita seharusnya tidak berharap menemukan yang lebih baik daripada . nω
domotorp

1
@domotorp, tampaknya bagian itu jelas, sebaliknya tidak jelas, maksud saya mengapa kita perlu pencarian linier. Seperti yang Yixin tunjukkan, mungkin ada algoritma lain yang tidak menggunakan algoritma penemuan segitiga dan menyelesaikan masalah di , yang menurut saya sulit untuk menemukan algoritma seperti itu dan mungkin lebih mudah untuk menunjukkan bahwa algoritma apa pun menggunakan temuan segitiga sebagai subrutin (atau dapat dikonversi) dengan pencarian linear di atasnya. o(nω+1)
Saeed

Jawaban:


16

Saya pikir kita bisa melakukan sedikit lebih baik daripada untuk grafik padat, dengan menggunakan perkalian matriks persegi panjang. Gagasan serupa digunakan oleh Eisenbrand dan Grandoni ("Pada kerumitan klik parameter tetap dan set yang mendominasi", Theoretical Computer Science Volume 326 (2004) 57-67) untuk deteksi 4-klik.O(n1+ω)

Misalkan menjadi grafik di mana kita ingin mendeteksi keberadaan cakar. Biarkan adalah himpunan pasangan (memerintahkan) dari simpul di . Pertimbangkan matriks Boolean berikut ini ukuran: setiap baris diindeks oleh beberapa , setiap kolom diindeks oleh beberapa , dan entri yang sesuai adalah satu jika dan hanya jika , dan . Pertimbangkan produk matriks Boolean dari dan transposnya . Grafik memiliki cakar jika dan hanya jika adaA V M | V |G=(V,E)AVMu V ( v , w ) A { u , v } E { v , w } E { u , w } E M M T G { u , v } E M M|V|×|A|uV(v,w)A{u,v}E{v,w}E{u,w}EMMTG{u,v}E sehingga entri di baris diindeks oleh dan kolom diindeks oleh adalah satu. u vMMTuv

Kompleksitas dari algoritma ini pada dasarnya adalah kompleksitas penghitungan produk Boolean dari oleh matriks , di mana menunjukkan jumlah simpul dalam grafik. Diketahui bahwa produk matriks seperti itu dapat dihitung dalam waktu , yang lebih baik daripada untuk batas atas yang diketahui pada . Tentu saja, jika (seperti dugaan) maka kedua pendekatan tersebut memberikan kompleksitas sama .n 2 × n n O ( n 3.3 ) O ( n 1 + ω ) ω ω = 2 O ( n 3 )n×n2n2×nnO(n3.3)O(n1+ω)ωω=2O(n3)


Besar! Inilah yang saya inginkan untuk pertanyaan pertama saya: hanya satu panggilan perkalian matriks, meskipun yang lebih besar. Saya akan menunggu lebih banyak komentar atau jawaban pada pertanyaan kedua saya sebelum menganggapnya sebagai jawaban.
Yixin Cao

15

Saya tidak tahu bagaimana cara menghindari melakukan perkalian matriks, tetapi Anda dapat menganalisanya sedemikian rupa sehingga waktu efektif dari jumlah yang lebih kecil. Trik ini darin

Kloks, Ton; Kratsch, Dieter; Müller, Haiko (2000), "Menemukan dan menghitung subgraph kecil yang diinduksi secara efisien", Information Processing Letters 74 (3-4): 115–121, doi: 10.1016 / S0020-0190 (00) 00047-8, MR 1761552.

Pengamatan pertama adalah bahwa, ketika Anda akan mengalikan matriks, matriks tidak benar-benar , tetapi mana adalah derajat dari setiap titik, karena apa yang Anda cari adalah co-triangle di lingkungan masing-masing titik.d × d dn×nd×dd

Kedua, dalam grafik bebas-cakar, setiap simpul harus memiliki tetangga . Sebab, jika tidak, set tetangga akan memiliki tepi terlalu sedikit untuk menghindari memiliki segitiga dalam komplemen. Jadi, ketika Anda melakukan perkalian matriks, Anda hanya perlu melakukannya pada matriks ukuran daripada .O(O(m)nO(m)n

Selain itu, setiap sisi dapat berkontribusi pada ukuran masalah perkalian matriks hanya untuk dua simpul, titik akhir. Kasus terburuk terjadi ketika untuk ukuran total masalah perkalian matriks ini adalah menyebar ke submasalah ukuran masing-masing, yang memberikan total waktu terikat , peningkatan untuk grafik jarang di atas batas disebutkan oleh R B.O ( 2mO(O(m)O(m)O(m(1+ω)/2)O(nmω/2)


Wow, itu ide yang cerdas, saya berpikir apakah mungkin untuk melakukan pencarian sublinear (sebenarnya membantah ini) dan bahkan tidak berpikir tentang sifat intrinsik masalah.
Saeed

David terima kasih Saya membiarkannya terbuka sesaat karena pertanyaan kedua saya tampaknya belum diperhatikan.
Yixin Cao
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.