După cum dezinvolt estima complexitatea algoritmului de timp stivă overflow în limba rusă

Ce întrebare - răspuns. )

Numărul estimat de acțiuni. Acest lucru duce adesea la unele relații recurente, care într-o anumită măsură, este dificil de rezolvat - deși există soluții globale gata făcute, atât de mulți algoritmi pentru a estima nu este atât de dificil.
Cu toate acestea, trebuie să ținem cont de faptul că atunci când se evaluează complexitatea algoritmului ar trebui să fie luate în considerare structurile de date utilizate - de exemplu, algoritmul lui Dijkstra, mult depinde de modul în care coada de prioritate pusă în aplicare, și într-adevăr în algoritmi grafic, depinde foarte mult de reprezentare grafic - liste sau matricea de adiacență.

Ca un exemplu simplu - de obicei de multiplicare matrice nxn - fiecare element al noii matrice produsă prin multiplicarea și însumarea produselor de elemente din rândul corespunzător și coloană. Lungimea string / coloana - n. totală, O (n) operații de calcul un element al matricei rezultat. Un total de 2 n - complexitatea totală a algoritmului O (n 3).

Răspuns 19 februarie la 07:29

Precum și din alte estimări „dezinvolt“ (bazată pe intuiție), sunt deja în procesul de învățare: în disponibilitatea de blocuri pe care le poate funcționa în mod inconștient în domeniul ales, datorită practicii scop.

Nici măcar nu poți ști ceva pus în aplicare în mod specific. De exemplu, în cazul în care algoritmul la un pas necesită sortarea de date aleatoare, este rezonabil să se presupună O (n log n) pentru un algoritm bazat pe comparații, indiferent de implementarea particulară. Sau atunci când se uită la masă în baza de date, în cazul în care liniile de mult (atunci când un mare O este semnificativă de a vorbi), ne putem aștepta ca indicele va crea implementare de bună calitate (căutare de O (n) O (log n) se aprinde). În caz de îndoială, poate fi măsurat.

Pentru a găsi sau a verifica răspunsul intuitiv, este posibil expresii recurente sau sume parțiale pentru a construi că utilizarea unui computer pentru a calcula. Deoarece există O (c * n) == O (n) și O (n * n + n) == O (n * n), iar cealaltă pentru a simplifica conversia, mulți algoritmi pot fi reduse la un număr mic de cazuri de bază. Procesul necesită îngrijire, dar destul de simplu (mai ales dacă folosiți ceva de genul WolframAlpha, Maple, Maxima, sympy). Cum de a găsi timp complexitatea unui algoritm.

Prin urmare, există cazuri în care efortul concentrat, folosind abordarea evident, rezultatul nu este dat, atunci este necesar să scape pentru un timp, a comuta la alte sarcini. Inspirația poate veni in momentul cel mai neașteptat (dar acest lucru este dincolo de domeniul de aplicare al „fără gândire“).

Uite ce algoritmi sunt folosite în aplicații care vă interesează. Noi algoritmi cu mai bine de complexitate nu apare în fiecare zi.

Începeți cu un simplu cod în limba dvs., cadru și de a se vedea complexitatea sa (de exemplu, „înlăturarea elementului index al matrice“). Cunoscând complexitatea structurilor elementare, localizați dificultatea de blocuri de cod (compus din aceste structuri), cu care te întâlnești des.

Puteți în direcția opusă: pentru a începe cu un cod de nivel înalt, și coboară treptat, niveluri mai scăzute de abstractizare, în timp ce până la un anumit bloc ajungeți (adăugarea de numere fixe, care sunt în cuvântul mașinii vizitat:. Despre (1) În cazul în care un număr arbitrar n ia O (log n) - proporțional cu numărul de biți sunt incluse). Cm. Tabelul timp de complexități.

Practică până majoritatea codului interesant de zi cu zi nu va fi în măsură să evalueze în mod aleatoriu.