info@meetujewelry.com
+86-19924726359 / +86-13431083798
Algoritmo sudėtingumas pirmiausia skirtas dviem ištekliams:
laikas
(vykdymo trukmė) ir
erdvė
(atminties naudojimas). Nors laiko sudėtingumas matuoja, kaip vykdymo laikas auga kartu su įvesties dydžiu (
n
), erdvės sudėtingumas įvertina atminties suvartojimą. Pavyzdžiui:
- Algoritmas su
O(n)
laiko sudėtingumas tiesiškai kinta priklausomai nuo įvesties dydžio.
- Algoritmas su
O(1)
Erdvės sudėtingumas naudoja pastovią atmintį, nepriklausomai nuo įvesties dydžio.
Abu rodikliai yra būtini. Greitas algoritmas gali išeikvoti atmintį dideliuose duomenų rinkiniuose, o atmintį taupantis algoritmas gali būti per lėtas realaus laiko programoms.
Efektyvumas lemia įgyvendinamumą. Apsvarstykite galimybę surūšiuoti 10 elementų sąrašą, palyginti su 10 milijonų:
- A
burbulų rūšiavimas
(
O(n)
) gali pakakti mažiems duomenų rinkiniams, bet tampa nepraktiškas dideliems.
- A
sujungimo rūšiavimas
(
O(n log n)
) sklandžiai tvarko didesnius duomenų rinkinius, bet reikalauja papildomos atminties.
Sudėtingumo analizė suteikia universalią kalbą algoritmams palyginti, abstrahuojant su aparatine įranga susijusias detales. Tai suteikia kūrėjams galimybę numatyti mastelio keitimą ir išvengti kliūčių kritinėse sistemose.
Asimptotiniai žymėjimai apibūdina funkcijų ribinį elgesį, pasiūlydami sudėtingumo santrumpą. Trys pagrindiniai žymėjimai yra:
Big O notacija apibrėžia maksimalų laiką arba erdvę, kurią užims algoritmas. Pavyzdžiui:
-
O(1)
Pastovus laikas (pvz., prieiga prie masyvo elemento pagal indeksą).
-
O(n)
Linijinis laikas (pvz., iteracija per sąrašą).
-
O(n)
Kvadratinis laikas (pvz., įterptiniai ciklai burbuliniame rūšiavime).
„Big O“ yra dažniausiai naudojamas rodiklis, nes jis garantuoja našumo lubas.
Omega apibūdina minimalų reikalingą laiką. Pavyzdžiui:
- Linijinė paieška turi
(1)
jei taikinys yra pirmasis elementas.
Nors ir optimistinė, geriausio atvejo analizė yra mažiau informatyvi blogiausio atvejo planavimui.
Teta sujungia Didįjį O ir Omegą, vaizduodama tikslų asimptotinį elgesį. Jei algoritmo geriausias ir blogiausias atvejai yra vienodi:
-
(n log n)
Taikoma sujungimo rūšiavimo vidutiniams ir blogiausiems scenarijams.
Šie žymėjimai abstrahuoja konstantas ir žemesnės eilės narius, sutelkdami dėmesį į augimo tempus. Pavyzdžiui, 2n + 3n + 4 supaprastina iki O(n) nes kvadratinis narys dominuoja dideliems n .
Sudėtingumo klasių supratimas padeda suskirstyti algoritmus pagal mastelio keitimą. Štai hierarchija nuo efektyviausio iki mažiausiai efektyvaus:
Vykdymo laikas arba atmintis lieka nepakitę, nes
n
auga.
-
Pavyzdys
Prieiga prie maišos lentelės reikšmės pagal raktą.
Veikimo laikas auga logaritmiškai su
n
.
-
Pavyzdys
Dvejetainė paieška kiekvienoje iteracijoje sumažina įvesties erdvę perpus.
Veikimo laikas proporcingai keičiasi
n
.
-
Pavyzdys
Linijinė paieška nerūšiuotame sąraše.
Įprasta skaldyk ir valdyk algoritmuose.
-
Pavyzdys
Suliejimo ir kaupimo rūšiavimas.
Įdėtinės iteracijos lemia sprogstamąjį augimą.
-
Pavyzdys
Rūšiavimas burbulais ir rūšiavimas pagal pasirinkimą.
Su kiekvienu papildomu įėjimu veikimo laikas padvigubėja.
-
Pavyzdys
Rekursinis Fibonačio skaičiavimas be įsiminimo.
Permutacija pagrįsti algoritmai.
-
Pavyzdys
Keliaujančio pardavėjo problemos sprendimas naudojant grubią jėgą.
Skirtumas tarp O(n log n) ir O(n) tampa akivaizdu n = 10 Pirmasis gali būti įvykdytas per milisekundes, o antrasis – per kelias dienas.
Algoritmai veikia skirtingai, priklausomai nuo įvesties konfigūracijų. Visų atvejų analizė užtikrina patikimumą:
Duomenų bazės užklausų optimizavimo įrankis gali pasirinkti maišos sujungimą ( O(n + m) ) ir įdėtųjų ciklų sujungimas ( O(nm) ) remiantis duomenų pasiskirstymu. Blogiausio atvejo analizė yra labai svarbi saugos požiūriu kritinėms sistemoms (pvz., aviacijos programinei įrangai), kur nenuspėjamumas yra nepriimtinas.
Tą pačią problemą galima išspręsti naudojant skirtingus algoritmus. Pavyzdžiui, tikslinės reikšmės paieškos reikšmių sąraše problemą galima išspręsti naudojant skirtingus algoritmus, tokius kaip tiesinė paieška, dvejetainė paieška arba maišos lentelės paieška.
Žemiau esančioje lentelėje palyginamas šių algoritmų laiko ir erdvės sudėtingumas ieškant tikslinės reikšmės sąraše. n vertybės.
Algoritmo pasirinkimas priklauso nuo problemos dydžio, įvesties charakteristikų ir turimų išteklių. Pavyzdžiui, jei sąrašas yra mažas ir nerūšiuotas, geriausias pasirinkimas gali būti tiesinė paieška. Jei sąrašas yra didelis ir surūšiuotas, dvejetainė paieška gali būti geriausias pasirinkimas. Jei sąrašas yra didelis ir nerūšiuotas, geriausias pasirinkimas gali būti paieška maišos lentelėje.
Amortizuota analizė apskaičiuoja vidutinį laiką per operacijų seką.
-
Pavyzdys
Dinaminiai masyvai padvigubina savo talpą, kai yra pilni. Nors vienas
stumti
operacija gali užtrukti
O(n)
laikui bėgant amortizuota savikaina išlieka
O(1)
.
Algoritmai, tokie kaip
Monte Karlas
ir
Las Vegasas
Naudokite atsitiktinumą efektyvumui.
-
Pavyzdys
Millerio-Rabino pirmumo testas turi tikimybines garantijas, bet yra greitesnis nei deterministiniai metodai.
Kai kurios problemos (pvz., Būlio patenkinamumas) yra NP-pilnas , tai reiškia, kad nėra žinomo polinominio laiko sprendinio. NP-išsamumo įrodymas redukcijomis padeda klasifikuoti skaičiavimo kietumą.
An O(n) klasterizavimo algoritmas gali tapti kliūtimi dideliems duomenų rinkiniams, todėl gali būti pereinama prie apytikslių metodų, tokių kaip kd medžiai ( O(n log n) ).
Viešojo rakto sistemos remiasi kietumu O(2) uždaviniai (pvz., sveikųjų skaičių skaidymas į faktorizaciją), skirti atremti atakas.
Realaus laiko atvaizdavimo varikliai teikia prioritetą O(1) fizikos modeliavimo algoritmai, skirti palaikyti 60+ FPS.
Kompromisai svarbūs:
-
Laikas ir Erdvė
Naudokite maišos žemėlapius (
O(1)
paieškos) atminties sąskaita.
-
Paprastumas vs. Optimalumas
Įterpimo rūšiavimas (
O(n)
) gali būti tinkamesnis mažiems, beveik surūšiuotiems duomenų rinkiniams.
Rekursiniams algoritmams – pasikartojimo ryšių modelio vykdymo laikas. Pavyzdžiui, „merge“ rūšiuoja pasikartojimą:
[ T(n) = 2 T(n/2) + O(n) ] išsprendžiama į
O(n log n)
per
Pagrindinė teorema
.
Empirinis testavimas papildo teorinę analizę. Profiliavimo įrankiai (pvz., „Valgrind“, „perf“) atskleidžia realias kliūtis.
pitonas
def linijinė_suma(arr):
iš viso = 0
už skaičių atvykus:
iš viso + = skaičius
grąžos suma
def kvadratinė_suma(arr):
iš viso = 0
už i arr:
už j arr:
iš viso + = i * j
grąžos suma
Nors O(n) abstrahuoja konstantas, a 100n algoritmas gali būti lėtesnis nei 0.01n algoritmas praktiniam naudojimui n .
An O(n log n) algoritmas gali veikti nepakankamai gerai O(n) už n = 10 dėl pridėtinių išlaidų.
Įsiminta Fibonačio funkcija ( O(n) erdvė) gali sugesti esant dideliems įvesties duomenims, skirtingai nei iteracinė versija ( O(1) erdvė).
Savaime balansuojantis BST ( O(log n) paieška) yra saugesnė nei įprasta BST ( O(n) blogiausiu atveju) nepatikimiems duomenims.
Algoritmo sudėtingumo analizė yra kompasas, vedantis kūrėjus per didžiulį skaičiavimo efektyvumo kraštovaizdį. MTSC7196 studentams šios disciplinos įvaldymas sujungia teorines žinias ir praktinę patirtį. Išanalizavę laiko ir erdvės reikalavimus, lygindami asimptotines ribas ir ieškodami realaus pasaulio kompromisų, kūrėjai gali sukurti sistemas, kurios sklandžiai keičia mastelį ir veikia patikimai.
Duomenimis pagrįstų inovacijų eroje gebėjimas atskirti O(n log n) ir O(n) Sprendimas nėra vien akademinis – tai strateginis imperatyvas. Studijuodami atminkite: sudėtingumo analizė nėra vien skaičiai ir simboliai. Kalbama apie paties skaičiavimo esmės supratimą.
Nuo 2019 m. „Meet U“ papuošalai buvo įkurti Guangdžou, Kinijoje, papuošalų gamybos bazėje. Mes esame juvelyrinių dirbinių įmonė, integruojanti dizainą, gamybą ir pardavimą.
+86-19924726359/+86-13431083798
13 grindys, „Gome Smart City“ vakarų bokštas, Nr. Juxin gatvė 33, Haizhu rajonas, Guangdžou, Kinija.