Karma tablo işlemleri O (1) ne tür verilerdir?


18

(Ne zaman) cevaplarından hash tablosu araması O (1)? , Veriler belirli istatistiksel koşulları karşıladığında , karma tabloların en azından amortismana tabi tutulmuş en kötü durum davranışına sahip olduğunu ve bu koşulları genişletmeye yardımcı olacak teknikler olduğunu düşünüyorum.O(1)

Ancak, bir programcının bakış açısından, verilerimin ne olacağını önceden bilmiyorum: çoğu zaman bir dış kaynaktan geliyor. Ve nadiren tüm verilere bir kerede sahibim: sık sık ekleme ve silme işlemleri, arama oranının çok altında olmayan bir oranda gerçekleşir, bu nedenle karma işlevini ince ayarlamak için verileri ön işleme tabi tutar.

Yani, bir adım atmak: veri kaynağı hakkında biraz bilgi verildiğinde, bir hash tablosunun O(1) işlemlerine sahip olma şansına sahip olup olmadığını ve muhtemelen hash fonksiyonumda hangi teknikleri kullanacağımı nasıl belirleyebilirim?


Oh, ve Hash tabloları ikili ağaçlara karşı , ama burada karma tablolar ve ne zaman onlar en iyi (veya değil) üzerinde duruyorum.
Gilles 'SO- kötü olmayı kes

Herhangi bir karma işlev için en iyi durum, verilerin eşit olarak dağıtılmasıdır.
0-04'te 0x0

@Sunil: Doğru değil. Özelleştirilmiş karma işlevlerine sahip olabilirsiniz.
Raphael

Bence bu soru çok geniş. Özellikle, veri kaynakları hakkındaki bilginin nasıl olacağını somutlaştırabilir misiniz?
Raphael

@Raphael Örneğin, anahtarlar dizgiyse: insanların adları, bir dizindeki dosya adları, XML etiketleri, dosya karmaları,…
Gilles 'SO- kötü olmayı bırak'

Yanıtlar:


4

En kötü durumda bile aramaların her zaman O (1) işlemi gerektireceğini garanti eden çeşitli teknikler vardır.

Karma tablonun O (1) işlem yapma şansına sahip olup olmadığını ve muhtemelen karma fonksiyonumda hangi teknikleri kullanacağımı nasıl belirleyebilirim?

En kötü durum, bazı kötü niyetli saldırganların (Mallory) size, Mallory nin sistemi yavaşlatmak için özellikle seçtiği verileri kasıtlı olarak vermesi durumunda olur.

Belirli bir hash fonksiyonunu seçtikten sonra, Mallory nin hangi hash fonksiyonunu seçtiğinizi asla bulamayacağını varsaymak muhtemelen çok iyimserdir. Mallory hangi hash fonksiyonunu seçtiğinizi öğrendikten sonra, Mallory'nin hash tablonuza bu hash fonksiyonunu kullanarak eklenecek çok fazla veri vermesine izin verirseniz, mahkum kalırsınız: Mallory, milyarlarca veri öğesini dahili olarak hızlı bir şekilde oluşturabilir, hash işlevi, hangi veri öğelerinin çarpışacağını bulmak ve daha sonra çarpışması muhtemel binde bir milyon veri öğesini beslemek ve O'dan çok daha yavaş çalışan aramalara yol açmaktır.

"En kötü durumda bile" O (1) aramalarını garanti eden tüm teknikler, gelecekte her olası aramanın O (1) zamanda başarılı olabileceğini garanti etmek için her bir ekleme üzerinde biraz fazladan çalışma yaparak bu sorunu önler. . Özellikle, Mallory nin er ya da geç hangi hash fonksiyonunu kullandığımızı keşfedeceğini (en kötü durumda) varsayarız; ancak farklı bir hash fonksiyonu seçmeden önce sadece birkaç veri öğesi ekleme şansı elde eder - tablo karma veya başka bir evrensel karma - şimdiye kadar sahip olduğumuz tüm verilerin 2'de aranabileceği şekilde özel olarak seçtiğimiz veya 3 prob - yani O (1). Bu fonksiyonu rastgele seçtiğimiz için, Mallory'nin bir süre için hangi işlevi seçtiğimizi bilmeyeceğinden oldukça emin olabiliriz. Mallory olsa bileHemen bize bu yeni hash işleviyle bile önceki verilerle çarpıştığında, başka bir yeni yeni hash fonksiyonu seçebiliriz, böylece yeniden şekillendirdikten sonra, o ve diğer herkesin bize beslediği tüm önceki veriler şimdi görünebilir en kötü durumda 2 veya 3 probda - yani en kötü durumda O (1) arama.

Yeni bir karma işlevini rasgele seçmek ve tüm tabloların her zaman O (1) olduğunu garanti etmek için yeterince sık yeniden yeniden şekillendirmek oldukça kolaydır. Bu, her aramanın her zaman O (1) olduğunu garanti etse de, bu teknikler, N'inci öğeyi zaten N-1 öğeleri içeren bir karma tabloya eklerken, bazen bu ekleme için O (N) zaman gerektirebilir. Bununla birlikte, sistemi, Mallory size kasıtlı olarak yeni karma işlevini kullanarak önceki verilerle çarpışacak yeni veriler verdiğinde bile, sistemin bir şey yapmadan önce Mallory ve diğerlerinden çok sayıda öğe kabul edebileceği şekilde tasarlamak mümkündür. tam O (N) yeniden oluşturma. En kötü durumda bile O (1) aramalarını garanti etmek için yeni bir işlev ve yeniden şekillendirme seçen karma tablo teknikleri şunları içerir:

  • guguklu karma , her anahtar aramanın en fazla 2 karma hesaplaması ve 2 tablo araması ile başarılı olmasını garanti eder.
  • seksek hashlemesi , her bir anahtar aramasının tablodaki küçük sayı H (belki de H = 32) ardışık girişlerini inceledikten sonra başarılı olmasını garanti eder.
  • dinamik mükemmel karma - Dietzfelbinger'in 1994 makalesi, her bir anahtar aramanın her zaman 2 karma hesaplama ve 2 arama ile başarılı olmasını garanti etmek için "sık sık" yeniden şekillendirilmesine rağmen, okuduğum ilk makale. tam bir rehash o kadar nadiren yapılır ki, her bir tam rehash O (n) süresi kullansa da, beklenen ortalama yerleştirme ve silme maliyeti O (1) itfa edilir.

Veri Yapıları / Karma Tablolar



5

Karma tablo araması statik kümeler için her zaman , Arne Andersson ve Mikkel Thorup'un 2002 tarihli makalesine bakın: Üstel arama ağaçlarına sahip dinamik sıralı kümelerO(1)

O(1)O(n2W) bölünme olmaksızın [30]. Kelime boyutunun bağımlılığının kaldırılabileceğini gösteriyoruz.

O(logn/loglogn)O(1)


5

ha,b(x)=ax+bmodp

Geçmişte, Crosby ve Wallach'ın Usenix belgesine göre , yaygın programlama dilleri böyle bir şey yapmadı, birçok web uygulamasını (ve diğer sunucuları) üretim çarpışmalarına dayanan bir DoS saldırısına açık bıraktı. (Makale 2003 yılından beri, ancak Dan Bernstein'ın aynı fikri biraz daha önce keşfettiğini gösteriyor.)

Hızlı bir hakkında arama uygulamaları açısından tekniğin durumu hem olduğunu iddia içerir geliştirilmiş ve olmayan gelişmiş .

Başka bir kenara, yüksek bant genişliği olan bir dünyada, zamanlama saldırılarının çevrimiçi çarpışmaları bulmayı çok zorlaştırıyor (Crosby-Wallach bağlantısının önerdiği gibi çevrimdışı). Daniel Golovin'in birkaç yıl önce zamanlama saldırılarına karşı savunmasız olmayan veri yapıları üzerinde sonuçları olduğunu hatırlıyorum, ancak bunların yaygın olarak kullanılıp kullanılmadığını bilmiyorum.


0

Karma tablolar için ortalama durum analizi, bir zamanlar occam'ın usturaya bağlı olarak yapılan girişlerin tekdüzelik varsayımı altında yapılır.

Anahtarların etki alanı ve dağılımı hakkında ek bilginiz varsa, aynı ortalama durum analizini alabilir ve tekdüzen dağılımı dağıtımınızla değiştirebilir ve en azından teoride beklentileri yeniden hesaplayabilirsiniz.

Elbette zorluk, üniform olmayan avaerage-case analizinin yapılması zor olmasından kaynaklanmaktadır. Ve “bilginiz” böyle bir analizde kolayca kullanılabilecek bir dağıtım olarak uygun bir şekilde ifade edilemeyebilir.

Açıkçası yapılacak en kolay şey simülasyonlardır. Karma tabloları uygulayın ve tipik girdi kümeniz için nasıl performans gösterdiğini gözlemleyin.


8
İlk cümleye katılmıyorum. Standart varsayım, hash işlevinin giriş verisi değil rastgele olduğudur . Tekdüze dağıtılmış verilerin varsayılması , analizi fantazi alanına iter; gerçek dünya verileri asla tekdüze değildir! Ancak hash fonksiyonlarını yeterince üniform hale getirmek için ders kitabı teknikleri vardır. Bkz. Evrensel karma ve özellikle tablo karma .
Jeff

İçinde ortalama durum analizi de @JeffE Bakış Raphael'in cevap o bu tekdüzelik varsayımı ifade eder. Dağıtım olmadan ortalama bir durum analizi yapamazsınız. Birini seçmelisiniz ve eğer verilmezse, occam'ın tıraş bıçağı tek tip olanı önerir.
uli

6
Tabii ki bir dağıtımınız var; karma işlevini seçmek için kullandığınız dağıtımdır. Giriş verileri için bir dağıtım seçmek, elektrik direğinin altındaki kayıp anahtarlarınızı aramak gibidir; Tabii, ışık daha iyi, ama muhtemelen onları düşürdüğünüz yer bu değil.
JeffE

@JeffE Ortalama bir vaka analizi bu şekilde yapılır, bir dağılım seçin ve hesaplamaya başlayın. Her zaman olduğu gibi, dağıtımın seçimi tartışmalıdır. Düzgün olmayan bir ortalama-durum analizi yapabilirsiniz.
uli

4
Evet, nasıl yapıldığını biliyorum. (Profilimi kontrol et.) Analizinizin öngörülü olmasını istiyorsanız (analizin tamamı budur), karma işlevini rastgele seçmelisiniz. O zaman kesin dağılımı biliyorsunuz, çünkü onu seçtiniz.
Jeff

-1

Bilinen sonlu kümelerin özel bir durumu olarak permütasyonlar (sabit uzunlukta): permütasyonlara bu sayıdaki gibi benzersiz numaralar atamak nispeten kolaydır . Uzunluk permütasyonlarını haritalamak için bunu kullandım (biraz daha korkunç bir uygulamada)n bir dizi boyuta n!. Ama bunu yapabilirdim çünkü sonunda her permütasyona ihtiyacım olacaktı; yalnızca bir alt küme kullanıyorsanız, o alt kümeye veya etkin bir seyrek diziye göre uyarlanmış bir işleve ihtiyacınız vardır.

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.