Pertimbangkan set nilai (direpresentasikan sebagai array yang diurutkan tanpa duplikat, dan dengan ukuran yang diketahui (mis. Ukuran dapat diperoleh dalam O (1)). Nilai tersebut dapat diuji untuk kesetaraan dalam waktu O (1). Saya ingin untuk mendapatkan set nilai yang hadir dalam setidaknya k set yang berbeda di antara n .
Algoritma yang jelas untuk melakukan ini adalah melalui semua set, menghitung jumlah kemunculan dari setiap nilai, dan mengembalikannya dengan jumlah yang lebih tinggi dari . Namun, dalam beberapa kasus, Anda dapat melakukan yang lebih baik: misalnya, ketika n = k = 2 dan ketika satu set S 1 jauh lebih kecil daripada set lainnya S 2 , lebih efisien untuk melihat semua item dari S 1 dan melakukan pencarian biner untuk masing-masing di S 2 : pendekatan pencarian biner biaya O ( | S 1 | log ( | S 2 | sedangkan pendekatan naif menelan biaya O ( | S 1 | + | S 2 | ) yang lebih buruk ketika | S 1 | < < | S 2 | .
Dengan pemikiran ini, dalam situasi apa kita bisa melakukan lebih baik daripada algoritma naif? (Jika ini adalah masalah yang terkenal, saya akan senang mengetahui nama biasanya dan memiliki referensi.)
sumber
Jawaban:
OK, saya pikir saya menemukan sesuatu yang relevan: makalah ini menyebutkan "masalah T-kejadian" di bagian III (hal. 2) yang merupakan masalah kita (di mana adalah apa yang kita sebut k ), tersembunyi di balik beberapa jargon khusus domain. Algoritma ScanCount yang mereka usulkan adalah pendekatan naif yang saya sarankan dalam pertanyaan saya. Algoritma MergeOpt adalah generalisasi dari trik pencarian biner. Proposal utama mereka (DivideSkip) adalah kombinasi dari trik pencarian biner ini dan trik yang berbeda (MergeSkip) untuk melewati beberapa nilai. Bahkan tampaknya secara eksperimental pendekatan cerdas jauh lebih baik daripada pendekatan naif (lihat kolom "Tidak ada filter" di halaman 8, filter tersebut heuristik untuk hal-hal khusus domain mereka).T k
Ini dapat dikombinasikan dengan trik David Eppstein untuk membuat beberapa pencarian biner di lebih efisien, dan dengan ide menggunakan pencarian interpolasi daripada pencarian biner (sebuah ide dari makalah ini dari bidang yang sama ).S2
sumber
Masalah Anda serupa dengan masalah penambangan data untuk menemukan item yang sering , juga dikenal sebagai pembelajaran aturan asosiasi . Jika saya mengerti dengan benar, masalah Anda mungkin berkurang hingga sering menemukan item kardinalitas 1 (yaitu, lajang) dengan dukungan > = k . Tentu saja, algoritma yang tersedia (seperti Apriori, Eclat, D-CLUB dll) untuk masalah ini juga memungkinkan menentukan itemset cardinality> 1.
sumber