Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 13376|Yanıt: 3

[Kaynak] .NET/C# koleksiyon türü sorgu testi

[Bağlantıyı kopyala]
Yayınlandı 7.03.2022 16:47:50 | | | |
Gereksinimler: Koleksiyonu eklemeyen, silmeyen veya değiştirmeyecek, sadece koleksiyonu sorgulayan tek okuma amaçlı bir koleksiyon türü tanımlamanız gerekir. UmarızSorgu ne kadar hızlı olursa, o kadar iyi

Yaygın küme karşılaştırmaları



Algoritmanın karmaşıklığını tanımlarken, o(1), o(n), o(logn), o(logn), o(logn), o(nlogn) genellikle ilgili algoritmanın zaman karmaşıklığını ifade etmek için kullanılır; bu algoritma algoritmanın uzaylı-zamansal karmaşıklığının ifadesidir. Sadece zamansal karmaşıklığı temsil etmek için değil, aynı zamanda mekânsal karmaşıklığı da temsil etmek için kullanılır.

O ardından, bir algoritmanın tükettiği zaman/uzay ile yetiştirilen veri miktarı arasındaki ilişkiyi gösteren parantez içindeki bir fonksiyon gelir. burada n giriş veri miktarını temsil eder.

Örneğin, zaman karmaşıklığı O(n) ise, veri miktarının birkaç kat arttığı ve zaman tüketiminin de birkaç kat arttığı anlamına gelir. Örneğin, yaygın geçiş algoritmaları. Bir diğer örnek ise zaman karmaşıklığı O(n^2)'dir; bu, veri hacmi n kat arttığında, n kare kat artması zaman alır ve bu da doğrusal zaman karmaşıklığından daha yüksek bir zaman karmaşıklığıdır. Örneğin, balon sıralaması tipik bir O(n^2) algoritmasıdır ve n sayıyı sıralamak için n × n kez taranması gerekir.

Bir diğer örnek O(logn)'dur; veri n kat arttığında, logn sürelerini artırmak zaman alır (burada log 2'ye dayanır, örneğin veri 256 kat artırıldığında, gereken süre sadece 8 kat artar, bu da doğrusal zamandan daha azdır). İkili arama, O (logn) algoritmasıdır; her bulunduğunda olasılıkların yarısını ortadan kaldırır ve 256 verideki arama hedefi bulmak için sadece 8 kez bulunması yeterlidir.

O(nlogn) aynıdır, yani n logn ile çarpılır; veri 256 kat artırıldığında zaman tüketimi 256 * 8 = 2048 kat artar. Bu karmaşıklık, karenin altındaki doğrusal çizgiden daha yüksektir. Birleştirme ve sıralama, O(nlogn)'un zaman karmaşıklığıdır.

O(1) en düşük uzaylı-zaman karmaşıklığıdır; yani, tüketilen zaman/uzay girdi verinin boyutundan bağımsızdır; giriş verisi kaç kez artırılırsa artsın, tüketilen zaman/uzay değişmez. Hashing algoritması, tipik bir O(1) zaman karmaşıklığıdır ve veri ne kadar büyük olursa olsun tek bir hesaplamadan sonra (çatışmalara rağmen) hedefi bulabilir.

Bu makale BenchmarkDotNet çiftini kullanırList、HashSet、SortedSet、DictionaryKıyaslama için sorgu, aşağıdaki bölümlere bakınız:

.NET/C#, kod performansını test etmek için BenchmarkDotNet kullanır
https://www.itsvse.com/thread-9576-1-1.html

.NET/C# Yansıtma, Emit, İfade performans testi
https://www.itsvse.com/thread-9598-1-1.html
Kod şöyledir:

Test sonucu: Bir Sözlükte veya HashSet'te bir anahtar bulmak, List ve SortedSet'te arama yapmaktan çok daha hızlıdır. Sözlük ve HashSet algoritmalarının zaman karmaşıklığı O(1)'dir ve hafıza tasarrufu için Sözlüğün Değeri bize faydası yok, bu yüzden yine de HashSet depolamayı seçtim.







Önceki:[Uygulama] IIS 10 Access Set IP Kara Listesi
Önümüzdeki:ASP.NET Core (XI) uç nokta rotası, tüm DI servislerini görüntülemek için middleware ekler
Yayınlandı 7.03.2022 23:09:48 |
Tekrar öğrenmeye geldim.
 Ev sahibi| Yayınlandı 9.03.2022 09:55:12 |
HashSet testi


 Ev sahibi| Yayınlandı 24.02.2024 17:45:14 |
.NET/C# koleksiyon listesi, bir elemanın bir kıyaslama yapıp olmadığını belirlemek için HashSet
https://www.itsvse.com/thread-10735-1-1.html
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com