'K' en sık görülen sayılar için algoritma


19

Bana herhangi bir zamanda bir veri akışında 'k' en sık meydana gelen öğeleri söyleyen en verimli (akış ??) algoritması arıyor. Bu yazı: "Böl ve fethet" veri akışı algoritmaları beni ilgilendirdi.

Örneğin, sayılar olduğunu varsayalım: (4,3,5,1,6,2,4,3,3,8,9,1) ve en sık görülen 3 sayıyı soruyorum (diyelim), o zaman yapmalıyım cevap olarak (3,4,1) olsun.

Çevrimiçi arama yapmayı denedim, ancak yaklaşım veren ve bunun en iyisi olduğunu söyleyen bir yer bulamadım. Önemsiz bir çözüm bir yığın veya dengeli bir ikili ağaç kullanmak olacaktır, ancak bence daha iyi bir yol var ve bir yerde belgelenip belgelenmediğini bilmek istedim.

Düzenleme: Ben bir şekilde veya başka bir şekilde veri dağıtımına dayanan bir uzlaşma algoritması (çoğu arama sonuçlarında açılır) aksine her zaman doğru cevap veren bir algoritma arıyorum


Aslında üç çeşit algoritma vardır: tam, yaklaşık ve "verilere bağlı". Son türü dışladınız, ancak veri dağıtımına bağlı OLMAYAN yaklaşık algoritmalara izin veriliyor mu? belirttiğim gibi, değilse, bir akış ayarında bu sorun için bilinen alt sınırlar nedeniyle sorun yaşıyorsanız.
Suresh Venkat

1
Sınırlı bellek kullanan algoritmaların (akış algoritmaları) aslında istediğim şeyi yapıp yapamayacağını merak ediyordum ve işaret ettiğiniz gibi yapamıyorlar gibi görünüyor. Ayrıca, O (n) garantili en kötü durumda sorunu çözen akışsız bir tam algoritmanın bilinip bilinmediği, burada belirtilen (sağladığınız bağlantıdan Cormode ve Hadjileftheriou tarafından belirtilen): citeseerx.ist.psu. edu / viewdoc / özet? doi = 10.1.1.106.7889
dhruvbird

Yanıtlar:


20

k=1o(n)

n/k

kk


1
+1. Zaman algoritmasının>% 50'sinin daha önce de belirtildiği gibi iyi bilinen bir algoritma olduğunu düşünüyorum
dhruvbird 15:10

2
Teşekkürler!! Bahsettiğiniz o Cormode ve Hadjileftheriou kağıt bu kağıt değinir: citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.106.7889 ben düşünüyordum aynı tekniği vardır. Bağlantılı 2 liste içerir; biri frekans ve içinde aynı frekansa sahip tüm elemanların başka bir listesi.
dhruvbird

yüzde 50'den fazla algoritmayı ele alabilir misiniz? ve google bulmacası? Ben sadece üzerinde dokundu ve "tanınmış hile" tamamen harcanmadı gibi bu özensiz akıl yürütme takip edemez. Teşekkürler.


Bu, Suresh Venkat'ın link userweb.cs.utexas.edu/users/misra/scannedPdf.dir/… üzerine bir yorum (yeterli itibar değil) : Sunulan algoritmanın verilerden ikinci bir geçiş gerektirdiği görülüyor , bu izin verilmiyor buraya. Aslında, O (1) alan gereksinimlerine sahip tek geçişli bir algoritmanın nasıl var olabileceğini görmüyorum.
TonyK

2

Ayrıca aşağıdaki kitabın 8.1.3 "Veri Akışlarında Sık Örüntü Madenciliği" bölümünü okumanızı da tavsiye ederim:

Jiawei Han, Micheline Kamber. Veri Madenciliği - Kavramlar ve Teknikler, İkinci Baskı, Morgan Kaufmann Publishers , 2006.

Kayıp Sayma olarak bilinen ve sık sık öğeleri (desteği bazı min_support'un üzerinde olan öğeler ) keyfi bir hassasiyetle yaklaştıran bir algoritma sunar .

Tam olarak ne istediğinizi değil, ama bunun yardımcı olabileceğini düşündüm.


belki buradaki
Ben
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.