SORU
30 EKİM 2008, PERŞEMBE


En iyi algoritma karma çarpışmalar açısından karma ve dizeleri için performans

Ne olursa, aşağıdaki öncelik olsaydık en iyi karma algoritmasını olurdu (bu sırayla):

  1. En az karma çarpışmalar
  2. Performans

Güvenli olmak zorunda değil. Temelde bir dizin bazı nesnelerin özelliklerini bir arada oluşturmak için çalışıyorum.Tüm özelliklerini dizeleri.

Başvurular, c# uygulamaları duyacağız.

CEVAP
3 Kasım 2008, PAZARTESİ


Terimi unutun "" en iyi Olursa olsun, hangi hash algoritması herkes olabilir ama, tabii çok sınırlı bir dizi veri ihtiyacı için karma, her algoritma gerçekleştiren çok iyi ortalama olabilir tamamen işe yaramaz ise sadece beslenme hakkı (ya da sizin bakış açısı "yanlış") veri.

Çok fazla zaman karma daha fazla çarpışma-ücretsiz CPU zamanı çok fazla kullanmadan nasıl hakkında düşünme harcamak yerine, daha doğrusu düşünmeye başlardım çarpışmalar daha az zor hale getirmek için Nasıl". E. g. eğer her karma kova aslında bir tablo ve tüm dizeleri bu tablo (bu bir çarpışma) alfabetik olarak sıralanmış, arama içinde bir kova tablo kullanarak ikili arama (yalnızca O(log n)) ve anlamına gelir, hatta her saniye karma kova 4 çarpışmalar, kod olacak hala iyi bir performans (biraz daha yavaş kıyasla bir çarpışma boş bir tablo, ama bu kadar çok değil). Bir büyük avantajı işte bu eğer masa yeterince büyük ve karma değil çok basit iki telli sonuç aynı hash değeri genellikle bak tamamen farklı (dolayısıyla ikili arayabilirsiniz dur karşılaştırma dizeleri sonra belki bir ya da iki karakter üzerinde ortalama; yapma her karşılaştırmak çok hızlı).

Aslında doğrudan sıralanmış bir tablo ikili arama karma daha hızlı olduğu ortaya çıktı kullanarak içinde arama bir durum kendimi daha önce vardı! Benim karma algoritması basit olmasına rağmen, bu değerler karma için oldukça uzun bir zaman aldı. Performans testi dersin 700-800'den fazla girdi alırsam sadece, sağlama ikili arama daha gerçekten daha hızlı olduğunu gösterdi. Tablo asla ortalama tablo 10 girişler aşağıda olduğu gibi büyük 256 girişleri neyse daha da artacak, ancak kıyaslama açıkça her sistemde, her CPU, ikili arama daha hızlı olduğunu gösterdi. Burada, aslında genelde zaten karşılaştırarak ilk byte veri yeterliydi neden bir sonraki yineleme bsearch (veri eskiden çok farklı ilk iki bayt zaten) çıktı olarak büyük bir avantaj.

Yani özetlemek gerekirse: alırdım iyi bir karma algoritma, o gelmez çok fazla çarpışmalar ortalama ve oldukça hızlı (ben bile kabul biraz daha çarpışmalar, eğer sadece çok hızlı!) ve oldukça optimize benim çarpışmaların sonra en küçük performans ceza almak için nasıl bir kod (ve onlar olacak! Onlar karma alanınız değilse en azından eşit veya daha büyük bir veri alanı ve veri mümkün olan her set) için benzersiz bir karma değer eşleştirebilirsiniz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • graham025

    graham025

    25 NİSAN 2006
  • Jon Reed

    Jon Reed

    14 AĞUSTOS 2006
  • Living Waters

    Living Water

    9 AĞUSTOS 2006