Kaynaştırma testi için karma tamsayılar kümesi


10

H (.) Ve R (.,.) Kümeleri üzerinde bir karma işlevi arıyorum, böylece A B'ye dahil edilirse R (H (A), H (B)). Elbette, R (.,.) Doğrulaması kolay olmalı (sabit zaman) ve H (A) doğrusal zamanda hesaplanmalıdır.

H ve R'nin bir örneği:

  • 'H(bir)=xbir1<<(h(x)şıkk) ; burada k sabit bir tamsayıdır ve h (x) tamsayılar üzerinde bir karma işlevidir.
  • R (H (A), H (B)) = ((H (A) ve H (B)) == H (A))

Başka iyi örnekler var mı? (iyi tanımlamak zordur, ancak eğer R (H (A), H (B)) sezgisel olarak B'ye A whp dahil edilirse).

Daha sonra düzenleme :

  1. Karma işlevler ailesi arıyorum. Birçok setim var; Her sette 3-8 eleman; % 90'ında 3 veya 4 element vardır. Verdiğim örnek karma işlevi bu durum için çok iyi dağıtılmamış.
  2. H (.) 'Nin (benim örneğimde k) küçük olması gereken bit sayısı (yani, H (.) Bir tamsayıya veya uzunluğa sığmalıdır).
  3. R'nin güzel bir özelliği, H (.) 'Nin k bitleri varsa, R (.,.)' Nin (3 ^ k - 2 ^ k) / 4 ^ k çiftleri için doğru olmasıdır. çok az çift için.
  4. Bloom filtreleri özellikle büyük setler için iyidir. Bu sorun için BF kullanmayı denedim, ancak en iyi sonuçlar sadece bir fonksiyonla yapıldı.

(Crosspost gelen stackoverflow , ben bir cevap iyi yeterince almadı)


ne üzerinde "whp"? Girdilerinizin belirli bir dağıtımdan geldiğini düşünüyor musunuz?
Jukka Suomela

Ve gerçekten bir karma işlev ailesi değil, tek bir sabit karma işlev mi arıyorsunuz?
Jukka Suomela

@Jukka: Sanırım R (H (A), H (B)) ise, o zaman yüksek olasılıkla A'nın B'nin bir alt kümesi olduğu sonucuna varıyoruz. Olasılık A ve B'nin rastgele seçimlerinin yanı sıra iç para birimi H ve R (varsa) fırlatır.
MS Dousti

Karma işlevler ailesi arıyorum. Kümelerim küçük olma eğilimindedir (her biri 3-8 eleman;% 90'ında 3 veya 4 eleman vardır), bu yüzden verdiğim örnek karma işlevi çok iyi dağıtılmamış.
Alexandru

R'nin güzel bir özelliği, H (.) 'Nin n biti varsa, R (.,.)' Nin (3 ^ n - 2 ^ n) / 4 ^ n çiftleri için doğru olmasıdır. çok az çift için.
Alexandru

Yanıtlar:


10

(Bu cevap aslında yorumlardaydı ancak Suresh'ın önerisinde ayrı bir cevaba taşıyorum.)

Çok küçük kümeler ile uygulama için muhtemelen Bloom özet fonksiyonları sayısı istediğiniz yanlış pozitiflerin sayısını en aza indirmek için oldukça büyük olması. Hesaplama süresinden tasarruf etmek için bir Bloom filtresinin aşağıdaki varyasyonunu öneririm. Üç geleneksel karma işlevlere sahip varsayalım , , her üretmek olduğunu elemanları bitlik dizeleri. Her bir öğeyi bitsel olarak ve bu üç sağlama işlevinden geçirin. Ortaya çıkan eleman karmaları yaklaşıkh 1 saat 2 saat 3 m 2 - 3 = 1 / 8 T hkh1h2h3m2-3=1/8tholanlar. Her biri bit bileşenlerine veya bileşen öğelerinin karma değerlerine kümesini karma. Kümeleriniz 3-8 elemente sahip olduğundan, sonuçlanan karmalar yarım olanların mahallesinde olacaktır, bu muhtemelen yanlış pozitif oranı en iyi şekilde tutmak istediğiniz şeydir.

Yukarıdaki şema arasındaki fark, geleneksel Bloom filtresinin klasik Erdos rastgele grafik modeli ile rastgele düzenli grafikler arasındaki farka benzer olmasıdır. Yukarıdaki şemada Bloom hash'lerinin etkili sayısı , ortalaması etrafında biraz değişmektedir, ancak oldukça büyüktür, bu nedenle bu fark önemli olmamalıdır. dG,n,pdkm/8m/8


Bu, özellikle önerdiğiniz gibi büyük m (32 veya 64) için iyidir.
Alexandru

4

Teklifinizle aynı ilişkiyi içeren karma için bir Bloom filtresi kullanmayı denerdim. Uygulamanız için en iyi filtre boyutu ve karma işlev sayısı hesaplamak çok zor olmamalıdır; ilham almak için Wikipedia'nın Bloom Filter makalesine bakın . Yanlış pozitiflerden kaçınmak istediğinize bağlı olarak ve gibi bir şey yeterli olabilir.k m = 64 k = 4mkm=64k=4


k

h1h2h3m

Bu varyasyonun avantajı, çoğu bilgisayarın sahip olduğu kelime işlemlerindeki doğal paralelliğin daha iyi kullanılmasıdır.
Warren Schudy

Warren, bunu bir cevap olarak göndermelisin. Bazı oyları hak ediyor
Suresh Venkat

2
@Warren, @Suresh: Sanırım birbiriyle yakından ilişkili bu iki yanıtı birleştirmek ve sonra yorumları silmek daha mantıklı olacaktır . Özellikle cevaplardan biri diğerinde tanımlanan parametrelere atıfta bulunduğundan takip etmek daha kolay olacaktır.
Jukka Suomela
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.