Milyonlarca dizem var. Her dizenin bir int değeri vardır. Bu değeri giriş dizesiyle almak istiyorum ancak çok fazla yer kapladıklarından tüm bu dizeleri saklamak istemiyorum. Karma tabloyu kullanamam çünkü bellekte tüm veya en az çok dizeyi saklamak gerekiyor. Peki benim durumum için iyi bir veri yapısı nedir (herhangi bir dizeyi eklemem ya da silmem gerekmedim, zaten veri hazırladım ve okuyabiliyorum sadece çalışmaya izin veriliyor)Dizeleri saklamak için bellek verimli yolu
cevap
Bir hash tablosunun kullanılma nedeniniz yok Ses şu anda sorunuzdaki sınırlı bilgilere dayanarak geçerlidir. İyi uygulandığında oldukça etkilidir. İhtiyaçlarınız için kabul edilebilirse, tekrarlı dizeleri saklamak için bellekleri boşa harcamamanın avantajına da sahip olabilir;
Ayrıca, aramalarınızı nasıl yapacağınız konusunda yaratıcıysanız, her bir dizenin sıkıştırılmış formunu hash tablosunda saklayabilirsiniz. Dizeler tipik olarak ne kadardır?
Ortalama uzunluk 10 harftir. En azından, dizeleri hashtabamın bir öğe yığını ile depolayamıyorum. Bu yüzden bu yaklaşımı desteklemenin bir yolu var. – Neir0
kullanın ortak alt dizeleri depolamak önlemek için bir trie ..
Trie iyi bir fikir ama çok daha yavaş, sonra hashtable. – Neir0
@larsmans Heh!Çok büyük bir regex modelinin verimliliğini en üst düzeye çıkarmak için böyle bir şey hakkında olsa da, şimdi bir regex dize ayrıştırıldığında otomatik olarak yapılır eğer merak ediyorum. Ne aradığını bilmek güzel. – Nolo
bir hashtable dizeleri saklamak için bellek etkin bir yol değil, ancak – argentage
Sen dize tuşları için tasarlanmış bir versiyonu hızlı ve kompakt hem olacak şekilde tasarlanmış ve vardır Judy tree, bakmak isteyebilirsiniz. Uygulaması sourceforge'da kullanılabilir.
Kelime listesini önceden işleyebilirseniz, CMPH gibi mükemmel karmalara bakın. (gperf başka bir şeydir, ama daha küçük veri kümeleri için optimize görünüyor.) Daha ziyade diyabet Dokümanlar
:
mükemmel hash fonksiyonu çarpıştırmadan m tamsayı sayı kümesinin içine n anahtarlarının bir statik dizi eşler, burada m n'den büyük veya eşittir. M n'ye eşitse, işlev minimal olarak adlandırılır.
...
daha ziyade diyabet Kütüphane kolay kullanımlı, üretim kaliteli, hızlı API en yeni ve daha verimli algoritmalar kapsüller. Kütüphane, ana belleğe sığamayan büyük girişlerle çalışmak üzere tasarlanmıştır. 100 milyondan fazla tuşa sahip takımlar için minimum mükemmel hash fonksiyonları oluşturmak için başarıyla kullanıldı, ...
- 1. Android'de bitmap'leri yeniden boyutlandırmak için en verimli bellek yolu?
- 2. verimli yolu
- 3. Hsqldb veritabanlarında uzun dizeleri (CLOB) saklamak?
- 4. JS dizeleri saklamak için karakter başına her zaman iki bayt kullanır mı?
- 5. MySQL: Uzun notları saklamak için en verimli veri türü?
- 6. Verimli yolu N
- 7. Verimli yolu tüm satırı silmek için '@'
- 8. Javascript dizeleri çoğaltmak için kısa yol yolu
- 9. Dizeleri bölünmüş işlevden Python'daki ints'e dönüştürmenin etkili yolu
- 10. seçenekleri verilen dizeleri
- 11. saklamak için veritabanı bağlantısı
- 12. İşlemci/Bellek kullanımı için Çapraz Platform yolu
- 13. Değişken dizeleri birleştirmenin doğru yolu
- 14. Sayısal dizide modu bulmanın en verimli yolu
- 15. PHP'nin substr ne kadar verimli?
- 16. Verimli yolu bir sözlüğüne aşağıdaki listeyi dönüştürmek için en verimli şekilde ihtiyaç
- 17. MySQL - Çeyrek Geçen Gün (En Verimli Yolu)
- 18. SQL Server - Verimli yolu verilerim bir haritalama/topaklanmaya oluşturmak için
- 19. Bunu kodlamak için daha verimli bir yolu var mı?
- 20. Python'da rasgele kesinliğe yuvarlanmanın verimli yolu
- 21. Filtre dizeleri
- 22. Redis'te karma dizisi saklamak için nasıl
- 23. Android tutam zum geniş görüntü, detay kaybetmeden bellek verimli
- 24. Öğelerin bir listesini saklamak için jQuery.data kullanma
- 25. Android - Hangi daha verimli?
- 26. Verimli
- 27. Verimli
- 28. Listedeki dizeleri birleştirmenin standart yolu nedir?
- 29. App.config, şifreleri saklamak için güvenli bir yer mi?
- 30. Dizeleri
Hangi programlama dili? Ayrıca, birçok özdeş dizeleri var mı? –
@ jdv-Jan de Vaan Tüm dizeler benzersiz değildir. Soru dilime özgü olduğunu düşünmüyorum ama C# yi tercih ediyorum. – Neir0
Yapmanız gereken şey açık değil. Sadece bu sayıları çıkarmanız ve başka bir dosyaya kaydetmeniz gerekiyor mu? Veya onlarla bazı hesaplamalar yapman gerekiyor mu? Giriş sırası korunmuyorsa tamam mı? –