Alberi AVL e il mondo REALE


14

a scuola ci viene insegnato come possiamo bilanciare un albero AVL su un inserimento o eliminazione.

In che modo questo tipo di conoscenza sarà effettivamente utile nel mondo reale? Qualcuno può fare un esempio su quando questo tipo di conoscenza sarebbe effettivamente utile?

Da quello che ho visto, sul posto di lavoro tali dettagli non arrivano quasi mai ...

Posso vedere come una conoscenza dettagliata degli algoritmi e di alcune strutture di dati possa essere importante, ma non dettagli come le rotazioni dell'albero AVL (e concetti dettagliati simili).

Grazie!


7
È utile nelle interviste, se conta come il mondo reale.
Kevin,

Questo è lo stesso argomento che alcune persone fanno riguardo all'apprendimento della trigonometria a scuola "Sheesh! Quando mai lo userò nella vita reale?", E la risposta è "ti ha pensato come analizzare e risolvere un'intera classe di problemi" . Quello e un giorno vuoi tagliare un albero e il tuo partner chiede "Sei sicuro che non sta per colpire la casa?" Trig in soccorso!
Binary Worrier,

Risposte:


13

Lo studio degli alberi AVL può essere utile per i seguenti motivi:

  • È un'ottima pratica per ragionare su dati astratti. Non devi pensare a un albero in particolare, devi considerare ogni possibilità. La pratica con questo tipo di ragionamento può aiutare anche con casi più semplici.

  • È un'ottima pratica per comprendere predicati e contratti. Garantire che un albero sia bilanciato e che gli strumenti utilizzati per dimostrare l'equilibrio conservato di ciascuna operazione, ad esempio, possano essere applicati a problemi di sicurezza e al codice parallelo.

  • Ti consente di scrivere le tue varianti o persino di creare tipi di strutture dati completamente nuovi.

  • Potrebbe essere necessario implementare un albero AVL per una nuova libreria o piattaforma.

Puoi discutere i meriti particolari dell'apprendimento di ogni tipo di algoritmo di ordinamento o di ogni tipo di albero bilanciato. Non importa quali si finirà per apprendere, ma si dovrebbe essere sicuri di ottenere una copertura completa degli argomenti più importanti.

Se vuoi vedere quanto siano importanti gli algoritmi di conoscenza nel mondo reale, leggi " Come uccidere una grande idea! ", Un articolo di Inc sulla caduta di Friendster e come la minima applicazione di principi fondamentali per migliorare l'efficienza avrebbe potuto aiutarli.


Articolo interessante, ma non vedo come gli alberi AVL avrebbero aiutato gli amici.
Eratosthenes

Mi sarebbe piaciuto vedere un esempio, come B + -Trees sono utilizzati per l'indicizzazione del database.
Luca Fülbier,

5

Oltre ai punti Macneils ...

Gli alberi rosso-nero sono forse più direttamente utili perché ci sono utili operazioni efficienti che non sono ampiamente supportate nelle implementazioni di librerie standard come il C ++ std::map(almeno AFAIK). Gli alberi rosso-neri possono supportare la "divisione" (tagliando un albero in due, uno contenente le chiavi in ​​meno di una chiave specificata e uno contenente le chiavi in ​​più) e "unendo" (il contrario, combinando un albero di chiavi grandi con un albero di piccole dimensioni chiavi) possono essere eseguite entrambe in O (log n) time, ma se queste sono supportate nelle librerie container standard, sembra essere una cosa ben nascosta.

Tuttavia, "aumentare" le strutture di dati è comune. Un semplice esempio è l'aggiunta di informazioni sulla dimensione della sottostruttura ai nodi in quasi tutte le strutture di dati ad albero per supportare la sottoscrizione O (log n). Esempi più sofisticati includono alberi ad intervalli.

Una volta che hai avuto l'idea di aumentare le strutture di dati, ci sono molte varianti che possono essere utili per applicazioni particolari - e pochissime sono disponibili preconfezionate come libreria. Le strutture di dati della libreria standard esistenti (ad es. Come std::map) non possono essere aumentate se non si copiano il codice sorgente e lo si modifica direttamente - non è possibile aumentarli utilizzando i parametri del modello.

Naturalmente per sviluppare una struttura di dati aumentata, è necessario comprendere la struttura di dati non aumentata sottostante.

Gli alberi AVL possono essere più veloci degli alberi rosso-nero se si effettuano molte più ricerche rispetto agli inserti / eliminazioni (e purché non siano necessarie tali operazioni di divisione / unione), quindi a seconda dell'applicazione, potrebbero essere un'ottima base per che aumenta.


1
+1 per aumentare la struttura dei dati, anche se è una cosa abbastanza rara da fare. La maggior parte dei programmatori non deve impegnarsi per le prestazioni (altrimenti useremmo tutti C ++ / C / Fortran / Assembly).
Matthieu M.

@Matthieu - Credo che sia comune, ma solo in determinati tipi di ambienti di sviluppo. Non è una contraddizione, onesto, perché ... errm, beh ...
Steve314

Sono completamente d'accordo! : D
Matthieu M.

5

No

Non è davvero utile nel mondo reale ...

Tranne per farti pensare .

Il mondo reale ha problemi molto più difficili , molti dei quali non hanno già soluzioni ben note.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.