Java hashmap gerçekten O(1)?
Re Java hashmaps ve O(1)
arama yaptıkları zaman ÇOK ilginç bazı iddialar gördüm. Biri bunun neden böyle olduğunu açıklayabilir mi? Bu hashmaps kadar almış olduğum karma algoritmalar herhangi birinden çok farklı olmadığı sürece, her zaman çarpışmalar içeren bir veri kümesi bulunmalıdır.
Bu durumda, arama O(1)
yerine O(n)
olur.
Birinin olup olmadığını açıklayabilirOnlar bunu başarmak nasıl O(1) ve öyleyse?
CEVAP
Bir HashMap, belirli bir özelliği, diyelim ki, dengeli ağaçlar aksine, onun davranış olasılıklı olmasıdır. Bu durumda en kötü durum olasılığı açısından karmaşıklığı hakkında konuşmak genellikle en yararlı olayını meydana gelen olacaktır. Karma bir harita için, ne dersin tam göster olur saygı ile bir çarpışma durumunda. Bir çarpışma çok kolay tahmin etmektir.
p
çarpışma= n / kapasite
Elemanları bile mütevazı bir sayı ile karma bir harita en az bir çarpışma yaşama olasılığı oldukça çok. Büyük O gösterimi bir şey daha zorlayıcı bize gidelim. Herhangi bir keyfi sabit k için inceleyin.
O(n) = O(k) * n)
Bu özellik, karma harita performansını artırmak için kullanabiliriz. En fazla 2 çarpışma olasılığı düşünmemiz yerine.
p
çarpışma x 2= (n / kapasite)2
Bu çok daha düşüktür. Ekstra bir çarpışma işleme maliyeti Büyük O performans için önemsiz olduğundan, aslında algoritma değiştirmeden performansını artırmak için bir yol bulduk! Bu generalzie edebiliriz
p
çarpışma x k= (n / kapasite)k
Ve şimdi hesap bizden daha çarpışmalar bazı rasgele sayı göz ardı etmek ve yok denecek kadar sonunda daha küçük çarpışma olasılığı edebiliriz. Tüm algoritma gerçek uygulama değiştirmeden doğru k seçerek keyfi minik bir seviyeye olasılık, sen de yapabilirsin.
Karma-göster O(1) erişimi olduğunu söyleyerek bu konuyu konuşuyoruzyüksek olasılıkla
Java dize gerçekten değişmez mi?...
Java Hashmap: Nasıl anahtar değerini a...
Gerçekten nasıl okunur metin Java sını...
Nasıl bir değeri, bir java hashmap bir...
Java HashMap vs nesneleri Göster...