Şu anki durumum var: Büyük olasılıkla dizgiler (250.000'den fazla söyleyeyim) ortalama uzunluğu belki 30. Bunların içinde birçok arama yapmaktır. Bunlar çoğunlukla StartsWith ve İçerdekilerdir.whats en hızlı dize toplama yapısı/algoritması ile başlar ve/veya aramalar içerir
Koleksiyon çalışma zamanında statiktir. Bu, seçim koleksiyonunun ilk okuma ve doldurma işleminin sadece bir kez yapıldığı anlamına gelir. Bu nedenle, veri yapısını oluşturmanın performansı kesinlikle önemli değildir. Bellek de bir sorun değil: aynı zamanda gerekirse her biri için aynı veriyi içeren iki koleksiyona sahip olmamam gerektiği anlamına gelir (başlangıç için bir tane diğeri için olan gibi). Sadece önemli olan, arama koşullarıyla eşleşen tüm öğeleri döndürmesi gereken aramaların performansıdır.
startswith için bir Trie veya Radix-ağacın üzerine geldi .. ama belki daha iyi seçimler vardır? İçin
I (alışkanlık veri bu miktarı ile çok hızlı olacak bir listedeki bir linq sorgusu çalıştıran yanında) henüz hiç iyi bir fikir var .. içeriyor.
Herkese şimdiden teşekkürler!
güncelleme: Önemli bir kısmını unuttular İçeren ile i koleksiyonunda kesin eşleşmeleri demek .. ama bir suffix tree sizi sağlayacak Bina verilen aranacak
İçerir Aramanızın alt dizesi kelimelerle mi yoksa tek tek karakterlerle mi ilgileniyor? Bir indeks oluşturmanın bunun için anlamlı olup olmadığını merak ediyorum. –
Karakterleri desteklemelidir. Performans nedenlerinden ötürü aramadan önce en az 3 veya daha fazla karakter vermeyi hayal edebiliyordum. (Sadece bazı karakterler girildikten sonra sadece bir karakter girildikten sonra bir metin kutusuna otomatik tamamlama gibi düşünebilirsiniz) – Mikk
"Rabin Karp" için web'de arama yapın. Bu size bağlı birkaç arama algoritması olduğu için başlamanız gerekir ... http: //www.stoimen.com/blog/2012/04/02/bilgisayar-algoritmaları-rabin-karp-string-search/Ayrıca bir çiçek filtresi kullanma ve başlangıçta dizeleriniz ile önyükleme hakkında düşünün. – JimR