Originariamente inviato da John360
ok allora aspetterò di studiarlo all'università però prima mi potreste fare un esempio? tipo: la complessità di un algoritmo bubble sort per ordinare un array è .... perchè ....
sempre se non è troppo complesso da spiegare, senno grazie lo stesso
Non ho detto di aspettare l'università eh, ben venga l'interesse personale, dico solo di approfondire prima per bene le numerose dispense disponibili on-line.
Questo è un codice trovato on-line:
codice:
public static void bubbleSort1(int[] x) {
int n = x.length;
for (int pass=1; pass < n; pass++) { // count how many times
// This next loop becomes shorter and shorter
for (int i=0; i < n-pass; i++) {
if (x[i] > x[i+1]) {
// exchange elements
int temp = x[i]; x[i] = x[i+1]; x[i+1] = temp;
}
}
}
}
L'operazione che viene eseguita più volte nel caso peggiore è la verifica della condizione del for interno: oprazione del genere sono assunte come dal costo costante. E' dentro ad un ciclo che itera un numero di volte dipendente dalla dimensione dell'input (n), quindi viene eseguito CIRCA n volte. A sua volte questo ciclo è annidato in un altro ciclo che viene eseguito pure lui unnumero di volte dipendente da n. A questo punto, l'iterazione esterna viene eseguita per circa n volte, ed ad ogni volta c'è un ciclo che fa circa n iterazioni... quindi l'operazione dominante è eseguita circa n*n volte, cioé n^2.
E' fondamentale capire che ciò che importa è l'ordine di grandezza della complessità, non una complessità precisa... un algoritmo che ci mette 100*n viene considerato come un algoritmo che fa n passi, perché sono entrambi linear: ciò che interessa è come cresce la complessità temporale in funzione dell'input, se in modo lineare, quadratico, cubico, fattoriale, logaritmico, costante...
Un altro aspetto fondamentale è il passaggio dei parametri, che in Java avviene in un modo un po' particolare ma in C/C++ assume un ruolo talvolta fondamentale in questo calcolo, per assurdo può anche superare il costo dell'algoritmo stesso.
Oh, prendi con le pinze tutto quel che ti dico, viene dalla tastiera di un appassionato che studia informatica al primo anno, niente di più... 
P.S.: per altro la sezione è sbagliata, andava nella stanza Programmazione.