|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Mar 2005
Messaggi: 41
|
complessità ??
Ciao a tutti
Se ho una struttura formata da una lista di alberi,cioè in cui ogni nodo della lista contiene un albero binario,la complessità (nell'inserimento) è n*logn?? E se per la lista faccio in modo che non debba scorrerla tutta ogni volta che faccio un inserimento(inserimento che faccio sempre in coda),mantenendo un puntatore sull'ultimo nodo, la complessità diventa O(costante)?? Se è così la complessità totale diventerebbe costante*logn o rimarebbe comunque n*logn?? E se nella stessa lista oltre che all'albero avessi un'altra lista dello stesso tipo diventerebbe costante*(costante+logn) o n*(n+logn) o altro?? Grazie!! Ciao pavimento |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Ciao
Non ho capito perche' dici che la complessita', per l'inserimento in btree, e' n*log(n). In realta' devi solo scendere attraverso l'albero di n elementi, per cui e' semplicemente O(log n). Nel caso si debba scorrere anche la lista, allora la complessita' di tutto l'algoritmo e' O(n * log n), come da te rilevato. Se inserisci solo in coda, allora tutto l'algoritmo sara' O(log n) L'ultima domanda non l'ho capita: intendi se avessi una lista di liste, quest'ultima contenente un btree? In questo caso, assumendo la scansione di liste (no puntatori all'ultimo elemento) la complessita' di tutto l'algoritmo sarebbe O(n^2 * log n). High Flying Sottovento |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Mar 2005
Messaggi: 41
|
ciao!
Grazie!! per l'ulitma domanda provo a spiegarmi meglio.. se ho una cosa come /**********************************/ typedef struct lista{ struct albero *a; struct lista *next; struct lista *prec; struct lista_2 *b; }lista; typedef struct lista_2{ int a; struct lista *next; struct lista *prec; }lista_2; /****************************/ dove sia in lista che in lista_2 inserisco in coda. La complessità nell'inserimento dello stesso elemento sia nella lista b che nell'albero è O(logN) ?(se ho capito dalle risposte che mi hai dato prima dovrebbe esser così..)?? Se però non faccio l'inserimento in coda in nessuna delle due diventa n*(n+logn) ??o no?.. Grazie Mille Ciao pavimento |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: May 2003
Messaggi: 1113
|
Io però non credo che la tua struttura si una lista di alberi binari....
Codice:
Struttura AlberoB
Nodo
Successivo (di tipo AlberoB)
Precedente (di tipo AlberoB)
Fine Struttura AlberoB
Struttura Lista
Elemento (di tipo AlberoB)
Successivo (di tipo Lista)
Fine Struttura Lista
-------- AGGIUNTA --------- mi ero perso il pezzo di inserire nella lista un altro elemento dello stesso tipo...la struttura Lista diventerebbe così: Codice:
Struttura Lista
Elemento1 (di tipo AlberoB)
Elemento2 (di tipo AlberoB)
Successivo (di tipo Lista)
Fine Struttura Lista
__________________
| Athlon XP Barton 3000+ | CoolerMaster HAC-V81 | ASUS A7N8X DELUXE v2.0 | 2*256 PC3200 + 1*512 PC3200 = 1GB DDR400| ATI Radeon 9250 | HD 80Gb Maxtor SATA | Ali Q-TEC 550W Dual Fan GOLD PFC Ultima modifica di leadergl : 19-12-2005 alle 21:58. |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Scusa leadergl, ma a me la struttura sembra corretta. Pavimento non ha riportato informazioni sulla definizione della struct albero, ma confiderei nella sua correttezza.
Ad ogni modo: viste le strutture, se inserisci in coda senza quindi scandire alcuna lista, il tempo di inserimento e' costante. Dato il numero n di elementi, non hai alcuna relazione con esso, percio' la tua complessita' e' O(1). La complessita' di inserimento nell'albero binario resta ovviamente O(log n), per cui quest'ultima risultera' essere anche quella totale. High Flying Sottovento |
|
|
|
|
|
#6 | ||
|
Senior Member
Iscritto dal: May 2003
Messaggi: 1113
|
Quote:
Di conseguenza una "lista di alberi binari" avrà due campi di cui uno è di tipo "albero binario" e l'altro è un puntatore ad una struttura dello stesso tipo. e queste: Codice:
typedef struct lista{
struct albero *a;
struct lista *next;
struct lista *prec;
struct lista_2 *b;
}lista;
typedef struct lista_2{
int a;
struct lista *next;
struct lista *prec;
}lista_2;
io vedo solo una struttura tutta incasinata che già per il fatto di avere in entrambe le strutture puntatori a "next" e "prec" mi porta lontano dall'idea di lista.... poi non so, magari ho capito male io quello che si voleva ma nel suo primo messaggio leggo: Quote:
__________________
| Athlon XP Barton 3000+ | CoolerMaster HAC-V81 | ASUS A7N8X DELUXE v2.0 | 2*256 PC3200 + 1*512 PC3200 = 1GB DDR400| ATI Radeon 9250 | HD 80Gb Maxtor SATA | Ali Q-TEC 550W Dual Fan GOLD PFC |
||
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:50.



















