Questo problema si può risolvere in tanti modi, io userei una lista di liste oppure un array di liste (magari ordinato in modo da poter usare la ricerca dicotomica sui termini)
La differenza tra array e liste sta nel metodo di allocazione.
Gli array sono allocati per intero, se dichiari un array di 1000 elementi da 4byte verrà cercato(o creato) uno spazio di memoria contiguo di 4000 byte dove è possibile allocare tutta la struttura per intero.
Dynamic space allocationQuando viene creata una lista i nodi vengono allocati uno alla volta, quindi occupano la memoria in maniera non contigua, in questo modo è possibile sfruttare meglio la memoria perché non è necessario effettuare swap su disco se la RAM è quasi piena o molto frammentata. Inoltre quando gli elementi di una lista vengono eliminati vengono anche deallocati liberando la memoria che occupavano mentre con gli array questo non è possibile(parlo di array statici).
Insertion of terms into documents easyL'inserimento ordinato in una lista è una cosa semplicissima, basta creare un nuovo elemento e fare in modo che l'elemento precedente punti a lui ed il suo campo indirizzo punti al successivo.
In questo modo sarebbe semplicissimo inserire il num. 14 nella lista dei documenti in cui è contenuto C (10 righe di codice).
Space overhead of pointerQuesto proprio non lo so,
Mi sembra più uno svantaggio, ma è l'unico modo per avere l'allocazione sparsa. Comunque provo a darti una spiegazione(che è più una supposizione):
Utilizzando le liste "sprechi" un po' di memoria perché devi avere(per ogni elemento)un puntatore all'indirizzo dell'elemento successivo, perché non è adiacente.
Utilizzando array risparmi memoria in quanto viene memorizzato soltanto il puntatore al primo elemento del vettore e la lunghezza del vettore.
Si per risolvere il problema io userei una array di liste.
Ciao Fire
