Hogyan lehet megbecsülni az algoritmus összetettségét az idős verem túlcsordulásával oroszul

Milyen kérdés az ilyen válasz. )

A tevékenységek számát becslik. Gyakran előfordul, hogy bizonyos visszatérő kapcsolatokhoz vezetnek, amelyek valamivel többé-kevésbé nehéz megoldani - habár vannak kész közös megoldások is, így nem sok nehéz algoritmust értékelni.
Ugyanakkor azt kell szem előtt tartani, hogy értékelése során összetettsége az algoritmus figyelembe kell venni használt adatszerkezetek - például Dijkstra-algoritmus, sok múlik, hogy a megvalósított prioritási sor, sőt a gráfalgoritmusok, sok múlik a gráf - listák vagy szomszédsági mátrix.

Egyszerű példa - a nxn mátrix szokásos szorzása - az új mátrix minden egyes elemét úgy kapjuk meg, hogy megszorozzuk és összegezzük a megfelelő sor és oszlop elemeinek termékeit. A sor / oszlop hossza n. összesen, O (n) műveletekkel az eredményül kapott mátrix egy elemének kiszámításához. Összesen n 2 közülük az algoritmus komplexitása O (n3).

Feladta február 19-én, 7:29 órakor

Csakúgy, mint a többi „rögtönzött” becslések (intuíció alapján), már a tanulási folyamat: a rendelkezésre álló építőelemek hogy működhet öntudatlanul a választott szakterületen, köszönhetően a céltudatos gyakorlatban.

Nem is tudhatod, hogy valamit konkrétan hajtanak végre. Például, ha az algoritmus néhány lépés megkívánja válogatás véletlenszerű adatokat, ésszerű azt feltételezni, O (n log n) egy algoritmus összehasonlításán alapulnak, függetlenül a konkrét végrehajtás. Vagy amikor nézi a táblát az adatbázisban, ha a vonalak sok (ha egy nagy O értelmes beszélni), azt várhatjuk, hogy az index létrehozni jó minőségű végrehajtás (keresés O (n) O (log n) fordul). Kétség esetén meg lehet mérni.

Egy intuitív válasz megkereséséhez vagy teszteléséhez rekonstruálhat olyan kifejezéseket vagy részösszegeket, amelyeket számításhoz használhat. Mivel vannak olyan O (c * n) == O (n) és az O (n * n + n) == O (n * n), és a másik, hogy egyszerűsítse a konverziós, sok algoritmus lehet csökkenteni egy kis számú bázis esetek. A folyamat figyelmet igényel, de eléggé egyszerű (főleg, ha olyan dolgot használ, mint a wolframalpha, Maple, Maxima, sympy). Az algoritmus időbeli összetettségének keresése.

Ennek megfelelően vannak olyan esetek, amikor a koncentrált erőfeszítések, nyilvánvaló megközelítések alkalmazásával, nem eredményeznek eredményt, akkor érdemes egy kicsit elmozdulni, más feladatokra váltani. A megvilágítás a leginkább váratlan pillanatban jön (de már nincs a dobozban).

Nézd meg, milyen algoritmusokat használnak az Önt érdeklő feladatokban. A jobb összetettségű új algoritmusok nem jelennek meg minden nap.

Kezdje el a legegyszerűbb kódot az Ön nyelvén, keretein belül, és fedezze fel annak összetettségét (például "elem törlése egy tömbből egy indexből"). Az elemi struktúrák összetettségének ismeretében megtalálja a gyakran megfogalmazott (ezekből a konstrukciókból álló) kódblokkok összetettségét.

Lehetőség van az ellenkező irányba: kezdeni egy magas szintű kódot, és fokozatosan ereszkedik alacsonyabb absztrakciós szinten, hogy az ismert blokkok eléred (felül rögzített számokat, amelyek gépi szó látogatott :. O (1) Ha egy tetszőleges szám n venni az O (log n) arányos a számok bitjeinek számával. Lásd az időbeli nehézségek táblázata.

Gyakoroljuk, amíg a mindennapi érdekes kód legtöbbje nem tud kijönni.