Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 13376|Odpověď: 3

[Zdroj] .NET/C# dotazovací benchmark typu kolekce

[Kopírovat odkaz]
Zveřejněno 07.03.2022 16:47:50 | | | |
Požadavky: Musíte definovat typ kolekce pouze pro čtení, který nebude přidávat, mazat ani upravovat kolekci, ale pouze dotazovat kolekci. DoufámeČím rychlejší dotaz, tím lépe

Porovnání společných množin



Při popisu složitosti algoritmu se běžně používají o(1), o(n), o(logn), o(logn), o(logn), o(nlogn) k vyjádření časové složitosti odpovídajícího algoritmu, což je vyjádření prostorově-časové složitosti algoritmu. Používá se nejen k reprezentaci časové složitosti, ale také k zobrazení prostorové složitosti.

O je následováno funkcí v závorce, která ukazuje vztah mezi časem/prostorem spotřebovaným algoritmem a množstvím vypěstovaných dat. kde n představuje množství vstupních dat.

Například pokud je časová složitost O(n), znamená to, že množství dat se několikanásobně zvyšuje a časová spotřeba také několikanásobně. Například běžné algoritmy pro procházení. Dalším příkladem je časová složitost O(n^2), což znamená, že když se objem dat zvýší nkrát, trvá čas, než se zvýší n čtverečníkrát, což je vyšší časová složitost než lineární. Například třídění bublin je typický algoritmus O(n^2), který je třeba prohledat n × n krát, aby seřadil n čísel.

Dalším příkladem je O(logn), když se data zvýší nkrát, trvá nějaký čas, než se logn časy zvýší (logaritmis zde je založen na 2, například když se data zvýší o 256násobek, potřebná doba se zvýší jen 8krát, což je méně než lineární). Binární vyhledávání je algoritmus O (logn), který při každém nalezení eliminuje polovinu možností, a hledání v 256 datech stačí najít 8krát, aby se našel cíl.

O(nlogn) je totéž, tedy n vynásobené logn, když se data zvýší 256krát, časová spotřeba se zvýší o 256 * 8 = 2048krát. Tato složitost je vyšší než linearita pod druhou mocnou. Sloučení a třídění je časová složitost O(nlogn).

O(1) je s nejnižší prostorově-časovou složitostí, tedy čas/prostor spotřebovaný je nezávislý na velikosti vstupních dat, bez ohledu na to, kolikrát se vstupní data zvýší, čas/prostor zůstává nezměněn. Hašovací algoritmus je typická časová složitost O(1), která dokáže najít cíl po jediném výpočtu (bez ohledu na konflikty), bez ohledu na velikost dat.

Tento článek používá dvojici BenchmarkDotNetList、HashSet、SortedSet、DictionaryDotaz na benchmarking viz následující:

.NET/C# používá BenchmarkDotNet k testování výkonu kódu
https://www.itsvse.com/thread-9576-1-1.html

.NET/C# Testování výkonu reflexe, emitu, výrazu
https://www.itsvse.com/thread-9598-1-1.html
Kód je následující:

Výsledek testu: Nalezení klíče ve slovníku nebo Hashsetu je mnohem rychlejší než hledání v seznamu a SortedSetu. Časová složitost algoritmů Slovník a HashSet je O(1) a abychom šetřili paměť, hodnota slovníku nám není k ničemu, proto jsem stále zvolil úložiště HashSet.







Předchozí:[Cvičení] Přístupová sada IIS 10 Seznam IP adres
Další:ASP.NET Core (XI) koncová trasa přidává middleware pro zobrazení všech DI služeb
Zveřejněno 07.03.2022 23:09:48 |
Přijďte se znovu učit.
 Pronajímatel| Zveřejněno 09.03.2022 9:55:12 |
 Pronajímatel| Zveřejněno 24.02.2024 17:45:14 |
.NET/C# kolekce Seznam, HashSet pro určení, zda má prvek benchmark
https://www.itsvse.com/thread-10735-1-1.html
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com