Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Spiegazione del perché utilizziamo le sommatorie per valutare il costo computazionale #5

Open
notedo opened this issue Mar 16, 2024 · 0 comments

Comments

@notedo
Copy link
Member

notedo commented Mar 16, 2024

🚨giuro che la finisco🚨

Ciao a tutti, il motivo per il quale sto scrivendo questa guida è che ho passato ore a cercare di capire come funzionasse il meccanismo della sommatoria per il calcolo della complessità di un algoritmo, e dopo averlo capito, voglio farti risparmiare le ore che ci potresti mettere a capirlo.

Il problema

Cerchiamo di comprendere il problema alla base. Prendiamo come esempio questo ciclo for:

def func1(n)
    count = 0
    for i in range(n):
        count += i

è facile notare che ogni volta che i aumenta di 1, il nostro count aumenta di 1. Ora proviamo a riscrivere matematicamente la stessa cosa: $\sum\limits_{i=1}^n\text{count}$. Inizia a notare la somiglianza? Facciamo ora un passo avanti e cerchiamo di capire il meccanismo dietro: dietro a un ciclo for o a un ciclo while in cui il passo aumenta (ad esempio i) c'è una sommatoria implicita.

I cicli annidati

Una delle difficoltà maggiori che ho avuto è stata quando dovevo calcolare la complessità dei cicli annidati, perché in alcuni come l'es6 di: #3 non moltiplicavo la complessità del ciclo esterno per quello interno, mentre in altri si.
Quando si presentano davanti a noi uno o più cicli annidati, dobbiamo capire due cose:

  • L'esecuzione dei vari cicli dipende dalle stesse cose (ad esempio una i che viene incrementata e usata in entrambi i cicli) o no?
  • Se l'esecuzione dei vari cicli non dipende dalle stesse cose, quante volte eseguo questi cicli?
    Prendiamo questo pseudocodice:
Screenshot 2024-03-16 alle 16 31 22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants