mi è stata data come compito a casa la Introduction to Algorithms esercizio 11.1-3
che va come segue:implementazione di una tabella di indirizzo diretto
Segnala come implementare una tabella ad accesso diretto, in cui le chiavi di elementi memorizzati non hanno bisogno di essere distinti e gli elementi possono avere dati satellitari. Tutte e tre le operazioni del dizionario (Inserisci, Elimina e Cerca) dovrebbero essere eseguite in O (1) volta. Non dimenticare che Delete accetta come argomento un puntatore a un oggetto da eliminare, non una chiave.
Bene, Inserisci non è un problema, poiché significa semplicemente creare un elenco collegato nella posizione appropriata nella tabella (se non esiste già) e aggiungervi l'elemento. La ricerca, a cui viene assegnata una chiave, può restituire qualsiasi elemento che corrisponda alla chiave, quindi significa semplicemente che è necessario restituire la testa dell'elenco corrispondente nella tabella.
Il mio problema è con l'operazione Elimina. Se modifico l'oggetto per aggiungervi un puntatore al suo nodo nell'elenco collegato, posso cancellare in O (1), ma non sono sicuro di poter modificare l'oggetto. C'è un modo per farlo senza cambiare l'oggetto dato?
+1 per pubblicare una domanda sui compiti con la divulgazione e mostrare che hai già provato qualcosa. Benvenuti in SO – JoshJordan
L'elenco standard di vanilla linked non offre prestazioni di ricerca O (1). –
@GregS - Ho detto che posso restituire qualsiasi elemento con la chiave corrispondente, il che significa che posso solo restituire la testa della lista, che è O (1). Gli elementi –