Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 13376|Vastaus: 3

[Lähde] .NET/C# kokoelmatyypin kyselyvertailu

[Kopioi linkki]
Julkaistu 7.3.2022 16.47.50 | | | |
Vaatimukset: Sinun täytyy määritellä vain luku -tyyppinen kokoelmatyyppi, joka ei lisää, poista tai muokkaa kokoelmaa, vaan ainoastaan kyselyy kokoelmasta. ToivommeMitä nopeampi kysely, sitä parempi

Yleiset joukkojen vertailut



Algoritmin monimutkaisuutta kuvattaessa käytetään yleisesti o(1), o(n), o(logn), o(logn), o(logn) ilmaisemaan vastaavan algoritmin aikakompleksisuutta, joka on algoritmin spatio-ajallisen monimutkaisuuden ilmaiseminen. Sitä käytetään paitsi ajallisen monimutkaisuuden myös spatiaalisen monimutkaisuuden kuvaamiseen.

O:ta seuraa suluissa oleva funktio, joka ilmaisee algoritmin kuluttaman ajan/tilan ja kasvatetun datamäärän välisen yhteyden. missä n edustaa syötedatan määrää.

Esimerkiksi, jos aikakompleksisuus on O(n), se tarkoittaa, että datan määrä kasvaa useita kertoja ja ajankulutus moninkertaiseksi. Esimerkiksi yleiset kulkualgoritmit. Toinen esimerkki on aikakompleksisuus O(n^2), joka tarkoittaa, että kun datan tilavuus kasvaa n-kertaiseksi, sen kasvaminen kestää ajan n neliökertaa, mikä on aikakompleksisuus suurempi kuin lineaarinen. Esimerkiksi kuplalajittelu on tyypillinen O(n^2)-algoritmi, joka täytyy skannata n × n kertoa n numeron lajittelemiseksi.

Toinen esimerkki on O(logn), jossa kun data kasvaa n-kertaiseksi, logn-aikojen kasvattaminen vie aikaa (logari perustuu tässä 2:een, esimerkiksi kun data kasvaa 256-kertaiseksi, tarvittava aika kasvaa vain 8-kertaiseksi, mikä on vähemmän kuin lineaarinen). Binäärihaku on algoritmi O (logn), joka poistaa puolet mahdollisuuksista joka kerta, kun se löydetään, ja haku 256 datasta riittää löytämään vain 8 kertaa löytääkseen kohteen.

O(nlogn) on sama, eli n kerrottuna logn:lla, kun dataa kasvatetaan 256-kertaiseksi, ajankulutus kasvaa 256 * 8 = 2048 kertaa. Tämä monimutkaisuus on suurempi kuin lineaarisuus neliön alapuolella. Merge and sort on O(nlogn):n aikakompleksisuus.

O(1) on alin spatiotempraalinen monimutkaisuus, eli kulutettu aika/tila on riippumaton syötedatan koosta, riippumatta siitä, kuinka monta kertaa syötedataa kasvatettaisiin, kulutettu aika/tila pysyy muuttumattomana. Hajautusalgoritmi on tyypillinen O(1)-aikakompleksisuus, joka voi löytää kohteen yhden laskennan jälkeen (ristiriidoista riippumatta), riippumatta datan koosta.

Tässä artikkelissa käytetään BenchmarkDotNet-pariaList、HashSet、SortedSet、DictionaryVertailukysely seuraavista asioista:

.NET/C# käyttää BenchmarkDotNetia koodin suorituskyvyn testaamiseen
https://www.itsvse.com/thread-9576-1-1.html

.NET/C# Heijastus-, Emit- ja Expression-suorituskyvyn testaus
https://www.itsvse.com/thread-9598-1-1.html
Koodi on seuraava:

Testitulos: Avaimen löytäminen sanakirjasta tai hashSetistä on paljon nopeampaa kuin etsiminen listasta ja SortedSetistä. Sanakirja- ja HashSet-algoritmien aikavaativuus on O(1), ja muistin säästämiseksi Sanakirjan arvosta ei ole meille hyötyä, joten valitsin silti HashSet-tallennuksen.







Edellinen:[Harjoitus] IIS 10 Access Set IP Blacklist
Seuraava:ASP.NET Core (XI) -päätepistereitti lisää middleware-ohjelmiston näyttämään kaikki DI-palvelut
Julkaistu 7.3.2022 23.09.48 |
Tule oppimaan uudelleen.
 Vuokraisäntä| Julkaistu 9.3.2022 9.55.12 |
HashSet-testi


 Vuokraisäntä| Julkaistu 24.2.2024 17.45.14 |
.NET/C#-kokoelmalista, HashSet, jolla voidaan määrittää, onko elementillä vertailu
https://www.itsvse.com/thread-10735-1-1.html
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com