Lorenzo Norcini ha scritto:
Grazie mille della risposta che mi ha già chiarito diverse cose!
L' equazione di costo sarebbe quindi la somma di tutti i vari costi moltiplicati per il numero di volte che si ripetono:
Costo(N) = c1 + c0 + c0 + (c1 + c1)N + c1 + c1 + ( c1 + c1 + c1 + Free)N + Free + Return.
Si, a parte c0 che puoi omettere dato che il costo è 0.
- Negli costi di alcuni degli algoritmi del mio libro (Ad es Bubblesort ) ignora sostanzialmente tutto ciò che si trova al di fuori dei cicli. Lo fa in quanto sono trascurabili su liste di lunghe dimensioni?
Si. Se il costo interno ai cicli è, diciamo, 1000 a causa di quanti elementi processi, il costo esterno diventa trascurabile. Se mandi al limite N ->infinito, N^2 + K, k sparisce.
- Nella funzione che ho scritto se ci troviamo nel peggior caso abbiamo raggiunto la fine della lista nel primo while e pertanto non si entra nemmeno nel secondo, hanno comunque entrambe N come caso peggiore?
La complessità, a differenza del costo, è fissa e dipende unicamente (in questo caso) dal ciclo e dal numero di elementi che processa. Poco importa che il ciclo sia eseguito o no. Per questo si parla di O(N).
- Il Free e il return hanno un costo? Quale?
Entrambi hanno costo c1, ma mentre la free() si comporta come le variabili, cioè dipende da quante volte la invochi, il return termina la funzione per cui in caso di vari return sparsi in un funzione, il costo della stessa varia (tuttavia non cambia il modo di calcolo complessivo, al massimo si azzerano alcuni parametri).