Kesetaraan:
Masalah vektor non-ortogonal (sebagaimana didefinisikan di atas) untuk himpunan dari vektor Boolean masing-masing dengan panjang dan bilangan bulat positif adalah sama dengan yang berikut:S Sn nd dkk
Menemukan oleh submatrix dari 1 dalam diberikan oleh Boolean matrix.2 2k kn ndd
Menemukan subgraph lengkap dalam grafik bipartit yang diberikan di mana himpunan simpul pertama memiliki ukuran dan himpunan simpul kedua memiliki ukuran .K 2 , kK2,k nndd
Algoritma Naif:
Pendekatan naif untuk masalah vektor non-ortogonal berjalan dalam waktu karena butuh waktu untuk secara naif menghitung produk titik dari setiap pasangan vektor.O ( d ⋅ n 2 ) O(d⋅n2)O ( d ⋅ n 2 )O(d⋅n2)
Jawab pertanyaan (2) & (3):
Ya, ada beberapa algoritma yang lebih efisien dalam berbagai kasus.
Pendekatan pertama:
Kita dapat memecahkan masalah vektor non-ortogonal dalam waktu .O ( d ⋅ n + k ⋅ n 2 )O(d⋅n+k⋅n2)
Catatan: Karena produk titik dari dua panjang vektor Boolean harus dibatasi oleh , masalahnya hanya masuk akal ketika .d dd dk ≤ dk≤d
Bukti. Biarkan satu set dari Boolean vektor masing-masing dengan panjang dan bilangan bulat positif diberikan. Pertimbangkan pencacahan dari unsur .S Sn nd dk k{ s i } i ∈ [ n ]{si}i∈[n] SS
Buat hashmap dari pasangan ke . Awalnya, memetakan setiap input ke nilai 0.m m( a , b ) ∈ [ n ] × [ n ] (a,b)∈[n]×[n]NN mm
Untuk setiap , kami melakukan hal berikut. Menghitung melalui pasangan vektor , sedemikian sehingga , bit dari adalah 1, dan bit dari adalah 1. Untuk setiap dan jika , maka dan adalah non-ortogonal yaitu . Jika tidak, tambahkan dan lanjutkan.i ∈ [ d ] i∈[d]s a sas bsb a < b a<bi is asa i is b sbs a sas bsb m ( a , b ) = k - 1 m(a,b)=k−1s a sas b sbs a ⋅ s b ≥ k sa⋅sb≥km ( a , b )m(a,b)
Jika kita menyelesaikan enumerasi, maka tidak ada pasangan vektor yang non-ortogonal.
Dibutuhkan waktu untuk memindai setiap bit dari setiap vektor. Kemudian, dibutuhkan waktu tambahan untuk menghitung pasangan vektor. Karena paling banyak vektor dan setiap pasangan dapat muncul paling banyak kali sebelum mereka terbukti non-ortogonal, enumerasi pasangan membutuhkan paling banyak waktu. Oleh karena itu, total runtime adalah .O ( n ⋅ d ) O(n⋅d)( n2 )(n2) k-1k−1O(k⋅n2)O(k⋅n2)O(d⋅n+k⋅n2)O(d⋅n+k⋅n2)
Catatan: Ketika , kita dapat meningkatkan pendekatan ini ke waktu . Ini karena ketika , kita dapat mengurangi menemukan sepasang vektor non-ortogonal di antara vektor Boolean dengan panjang hingga menemukan sepasang vektor non-ortogonal di antara vektor Boolean dengan panjang .k = 2 k=2O ( n ⋅ d ) O(n⋅d)k = 2 k=2n nd dd dnn
Pendekatan kedua:
Kita dapat memecahkan masalah vektor non-ortogonal dalam waktu .O ( k ⋅ ( dk ) ⋅n)O(k⋅(dk)⋅n)
Bukti. Biarkan satu set dari Boolean vektor masing-masing dengan panjang dan bilangan bulat positif diberikan.S Sn nd dkk
melalui set sedemikian sehingga memiliki ukuran . Untuk setiap vektor , memeriksa apakah memiliki semua 1 ini di posisi di . Jika ada dua vektor yang memiliki semua 1 pada posisi di , maka kami telah menemukan dua vektor non-ortogonal.P ⊆ [ d ] P⊆[d]P Pk kv ∈ S v∈Sv vP PPP
Secara total, ada mungkin pilihan untuk . Dan, untuk setiap pilihan, kami memindai melalui bit dari vektor. Oleh karena itu, secara total, runtime adalah .( dk )(dk) PPk⋅nk⋅nO(k⋅ ( dk ) ⋅n)O(k⋅(dk)⋅n)
Pendekatan ketiga:
Ketika , kita dapat memecahkan masalah vektor non-orthongal di waktu di mana adalah eksponen untuk perkalian matriks integer. Ketika , kita dapat memecahkan masalah vektor non-ortongal dalam waktu .d ≤ n d≤nO ( d ω - 2 ⋅ n 2 ) O(dω−2⋅n2)ω ωd > n d>nO ( d ⋅ n ω - 1 )O(d⋅nω−1)
Catatan: Seperti yang ditunjukkan oleh @Rasmus Pagh, kita dapat meningkatkan algoritme ini menjadi saat . Lihat di sini untuk info lebih lanjut: https://arxiv.org/abs/1204.1111O ( n 2 + o ( 1 ) ) O(n2+o(1))d ≤ n 0,3d≤n0.3
Bukti. Biarkan satu set dari Boolean vektor masing-masing dengan panjang dan bilangan bulat positif diberikan.S Sn nd dkk
Pertimbangkan matriks dan . Yang pertama matriks memiliki dimensi oleh mana setiap baris dari adalah vektor dari . Kedua matriks memiliki dimensi oleh di mana setiap kolom dari adalah vektor dari .A AB BA An nd dA AS SB Bd dn nB BSS
Kita dapat menghitung produk titik dari setiap pasangan vektor di dengan menghitung menggunakan algoritma untuk perkalian matriks integer cepat.SSA⋅BA⋅B
Ketika , salah satu pendekatannya adalah mengubah perkalian matriks persegi panjang menjadi perkalian kuadrat dengan matriks . Dengan menggunakan perkalian matriks kuadrat cepat, kita dapat menghitung semua perkalian dalam waktu.d≤nd≤n(nd)2(nd)2ddddO((nd)2⋅dω)=O(dω−2⋅n2)O((nd)2⋅dω)=O(dω−2⋅n2)
Ketika , salah satu pendekatan adalah untuk mengubah perkalian matriks persegi panjang menjadi perkalian persegi oleh matriks. Dengan menggunakan perkalian matriks kuadrat cepat, kita dapat menghitung semua perkalian dalam waktu.d>nd>ndndnnnnnO((dn )⋅nω)=O(d⋅nω-1)O((dn)⋅nω)=O(d⋅nω−1)