En azından olan öğeleri bulun arasında setleri


11

kümesini göz önünde bulundurun (yinelenen ve bilinen bir boyuta sahip sıralı diziler olarak temsil edilir (yani boyut O (1) 'de elde edilebilir). Değerler O (1) zamanda eşitlik açısından test edilebilir. arasında en az farklı kümelerde bulunan değer kümesini elde etmek .nkn

Bunu yapmak için bariz algoritma, tüm kümeleri gözden geçirmek, her bir değerin oluşum sayısını saymak ve sayımı daha yüksek olanları döndürmektir . Ancak bazı durumlarda, daha iyi yapabiliriz: Örneğin, ne zaman ve bir dizi zaman diğer seti çok daha küçük , bunun tüm öğeler bakmak için daha verimli ve ikili arama yapmak her biri için : ikili arama yaklaşımı , naif yaklaşım ve.kn=k=2S1S2S1S2O(|S1|günlük(|S2|))O(|S1|+|S2|)|S1|<<|S2|

Bunu akılda tutarak, hangi durumlarda saf algoritmadan daha iyisini yapabiliriz? (Bu iyi bilinen bir sorunsa, normal adını bilmek ve referans almaktan memnuniyet duyarım.)


3
Bu "top-K" sonuçları veya "ağır vurucular" genel kategorisi altında gelir. İkincisi aradığınıza daha yakın. Bu alandaki çalışmaların çoğu, büyük veri kümelerine ve alt doğrusal bellek kısıtlamalarına odaklanmaktadır.
Suresh Venkat

9
Verdiğiniz "S2'deki tüm S1 konumlarını ara" yöntemi zamanında çalışacak şekilde yapılabilir , her zaman en azından naif doğrusal zaman algoritması kadar iyi . Ö(|S1|günlük(|S2|/|S1|))
David Eppstein

Yanıtlar:


2

Tamam, bence alakalı bir şey buldum: bu makale , bazı alanlara özgü jargonun arkasına gizlenmiş olan, tam olarak bizim sorunumuz olan (burada , adlandırdığımız şeydir ), III . Önerdikleri ScanCount algoritması sorumu önerdiğim saf yaklaşım. MergeOpt algoritması, ikili arama numarasının genelleştirilmesidir. Ana önerileri (DivideSkip), bu ikili arama hilesi ile birden çok değeri atlamak için farklı bir hile (MergeSkip) birleşimidir. Hatta deneysel olarak zeki yaklaşımlar naif yaklaşımlardan çok daha iyi görünüyor (sayfa 8'deki "Filtre yok" sütununa bakın, filtreler alanlarına özgü şeyler için sezgiseldir).Tk

Bu, çoklu ikili aramaları daha verimli hale getirmek için David Eppstein'ın hilesi ve ikili arama yerine enterpolasyon araması kullanma fikriyle ( aynı alandaki diğer bir makaleden bir fikir ) birleştirilebilir.S2


1

Sorununuz, İlişkilendirme kuralı öğrenimi olarak da bilinen sık öğe kümelerini bulma veri madenciliği sorununa benzer . Eğer doğru anladıysam, probleminiz > = k desteği ile sık sık kardinalite 1 (yani tekil) öğelerini bulmaya indirgenebilir . Tabii ki, problem için mevcut algoritmalar (Apriori, Eclat, D-CLUB vb.) Ayrıca sıklık> 1 öğelerinin belirlenmesine de izin verir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.