L'accise 3-7 nel "Manuale Algorithm Design" libro dice:Come mantenere minimo e massimo il tempo di O (1) in un albero di ricerca binario bilanciato, senza muovere intorno con i puntatori?
Supponiamo di avere accesso a una struttura di dati dizionario equilibrata, che sostiene ognuno di ricerca operazioni, inserimento, cancellazione, minimo, massimo, successore e il predecessore in O (log n) time. Spiegare come modificare le operazioni di inserimento ed eliminazione in modo che continuino a prendere O (log n) ma ora minimo e massimo richiedono O (1) tempo. (Suggerimento: pensare in termini di utilizzo delle operazioni di dizionario astratte, invece di pasticciare in giro con puntatori e simili.)
Senza i suggerimenti, credo che questa domanda è abbastanza facile.
Ecco la mia soluzione:
per l'albero, ho appena mantenere un puntatore min punta sempre al minimo, e un altro indice di massima che punta sempre al massimo.
Quando si inserisce x, confronto solo il tasto min. Con x.key, if min.key > x.key, then min = x;
e lo faccio anche per il massimo, se necessario.
Quando si elimina x, if min==x, then min = successor(x); if max==x, then max = predecessor(x);
Ma il suggerimento dice che non posso pasticciare in giro i puntatori e simili. La mia soluzione è in discussione con i puntatori?
Se non è possibile utilizzare punti extra, come posso ottenere O (1) per il minimo e il massimo?
Grazie
La mia ipotesi è, la soluzione è quella che chiedi nella domanda, dal momento che cambi il 'insert' e' cancella le operazioni, ma mantenendole su O (log n) perché ciò che fai è O (log n) del vecchio 'insert' /' delete' più O (log n) per 'successor' o' predecessore', che rimane su O (log n) in totale. E non stai giocando con i puntatori qui, perché in realtà mantieni il valore 'min' e' max'. – stryba
@stryba, l'ho pensato anch'io. Ma hanno bisogno di chiarimenti. –
Non sono chiaro sulla parte "mucking with pointers". La mia ipotesi è che non si debba puntare ai valori massimi/minimi precedenti e piuttosto usare il successore ecc. – stryba