|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Feb 2005
Messaggi: 88
|
Calcolo della complessità
Ciao a tutti
Dovrei calcolare la complessità di un algoritmo in java. Praticamente ho fatto il calcolo ma ho grossi dubbi in queste porzioni di codice: Codice:
while (testa != coda) {
for (t = coda; t != null && t.struttura.frequenza > agg; t = t.prec);
}
Codice:
void trasforma(Nodo p) {
if (p.sx == null && p.dx == null){
p.dx = stream[p.segno+128];
stream[p.segno+128] = p;
}
else {
trasforma(p.sx);
trasforma(p.dx);
}
}
Aiutatemi se potete, vi ringrazio già da ora |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2003
Città: Genova
Messaggi: 4739
|
l' algoritmo su cosa opera? su una lista ?
in ogni caso , a meno che non entri in ciclo infinito per aver omesso/errato qualche verifica di condizione, si eseguirà la trasforma sugli elementi dello stream che sono per definizione, finiti (è un numero finito la dimensione della memoria, è un numero finito la banda eventuale di trasmissione dello stream, è un numero finito, il tempo che vivi davanti allo schermo per ricevere pacchetti dello stream, nel caso questo appaia come un "continous feed".. ) il caso estremo (numero di operazioni nel caso peggiore) dovrebbe essere, data una finestra di N elementi, <n. di operazioni della transform> x N x (N-1) nel caso la transform chiami se stessa altre n-1 volte , per ogni elemento dello stream contenuto nella finestra che , visto che il primo termine è una costante e N-1 (circa) N, non vorrei sbagliare ma mi sembra diventi O(N^2)
__________________
Jappilas is a character created by a friend for his own comic - I feel honored he allowed me to bear his name Saber's true name belongs to myth - a Heroic Soul out of legends, fighting in our time to fullfill her only wish Let her image remind of her story, and of the emotions that flew from my heart when i assisted to her Fate
Ultima modifica di jappilas : 18-07-2005 alle 15:00. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
|
per il doppio ciclo innestato quoto O(n^2), mentre per la ricorsione attento alla dimensione dell'input
__________________
My gaming placement |
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Feb 2005
Messaggi: 88
|
Ciao a tutti
Grazie Mille Cmq l'alg opera su una lista con la quale implemento un albero binario. Il codice che è contenuto in "while testa != coda" serve per raggruppare tanti nodi in un unico albero. posto il codice completo del ciclo Codice:
while (testa != coda) {
agg = testa.struttura.frequenza + testa.succ.struttura.frequenza;
for (t = coda; t != null && t.struttura.frequenza > agg; t = t.prec);
y = new NodoP(t,t.succ);
t.succ = y;
if (t == coda) coda = y;
else y.succ.prec = y;
y.struttura = new Nodo((byte)0,agg,0,testa.struttura,testa.succ.struttura);
testa = testa.succ.succ;
testa.prec = null;
}
Il ciclo for interno fa ogni volta una ricerca partendo dall'ultimo nodo della lista e andando all'indietro. In teoria considerando il caso peggiore il suo costo è n? Quindi il totale sarebbe O(N-1)*(N + spiccioli) cioè anche qui O(N^2)? La trasforma dovrebbe eseguire tutte le sue operazioni solo per i nodi terminali, diciamo N; mentre per gli altri chiama la ricorsione e in teoria dovrebbero essere N-1 quindi non so se è O(N^2) oppure O(N+(N-1))=O(2N)=O(N) ???? Grazie ancora a tutti
Ultima modifica di Perfo : 18-07-2005 alle 16:48. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:45.



















