3 strutture dati avanzate che ogni programmatore dovrebbe conoscere
Scoprirai che l’utilizzo di strutture di dati è un evento piuttosto comune come programmatore, quindi essere abile con strutture di dati di base come alberi binari, stack e code è vitale per il tuo successo. Ma se vuoi migliorare le tue capacità e distinguerti dalla massa, vorrai anche familiarizzare con le strutture di dati avanzate.
Le strutture di dati avanzate sono una componente essenziale della scienza dei dati e aiutano a chiarire la gestione inefficiente e forniscono l’archiviazione per grandi set di dati. Ingegneri del software e data scientist fanno costantemente uso di strutture dati avanzate per progettare algoritmi e software.
Continua a leggere mentre discutiamo delle strutture dati avanzate che ogni programmatore esperto dovrebbe conoscere.
1. Mucchio di Fibonacci
Se hai già dedicato del tempo all’apprendimento delle strutture di dati, devi avere familiarità con gli heap binari. Gli heap di Fibonacci sono piuttosto simili e seguono le proprietà min-heap o max-heap . Puoi pensare a un mucchio di Fibonacci come a una raccolta di alberi in cui il nodo del valore minimo o massimo è sempre alla radice.
L’heap soddisfa anche la proprietà di Fibonacci tale che un nodo n avrà almeno F(n+2) nodi. All’interno di un mucchio di Fibonacci, le radici di ciascun nodo sono collegate tra loro, di solito tramite un elenco circolare a doppio collegamento. Ciò rende possibile eliminare un nodo e concatenare due elenchi in un tempo O(1).
Gli heap di Fibonacci sono molto più flessibili degli heap binari e binomiali, il che li rende utili in un’ampia gamma di applicazioni. Sono comunemente usati come code di priorità nell’algoritmo di Dijkstra per migliorare significativamente il tempo di esecuzione dell’algoritmo.
2. Albero AVL
Gli alberi AVL (Adelson-Velsky e Landis) sono uno dei tanti diversi tipi di alberi in informatica. Sono essenzialmente un albero di ricerca binario autobilanciato. Gli alberi di ricerca binaria standard possono essere distorti in alcuni casi limite e avere una complessità temporale nel caso peggiore di O(n), rendendoli inefficienti per le applicazioni del mondo reale. Gli alberi autobilanciati cambiano automaticamente la loro struttura quando violano la proprietà di bilanciamento.
In un albero AVL, ogni nodo contiene un attributo extra che contiene il suo fattore di bilanciamento. Il fattore di equilibrio è il valore ottenuto sottraendo l’altezza del sottoalbero sinistro dal sottoalbero destro in quel nodo. La proprietà di autobilanciamento dell’albero AVL richiede che il fattore di equilibrio sia sempre -1, 0 o 1.
Se la proprietà di autobilanciamento (fattore di equilibrio) viene violata, l’albero AVL ruota i suoi nodi per preservare il fattore di equilibrio. Un albero AVL utilizza quattro rotazioni principali: rotazione a destra, rotazione a sinistra, rotazione a sinistra-destra e rotazione a destra-sinistra.
La proprietà di autobilanciamento di un albero AVL migliora la sua complessità temporale nel caso peggiore a solo O (log n), che è significativamente più efficiente rispetto alle prestazioni di un albero di ricerca binario.
Poiché l’albero AVL si mantiene tramite un fattore di equilibrio, è possibile calcolare il numero minimo di nodi, data l’altezza. La relazione di ricorrenza si riduce a N(h) = N(h-1) + N(h-2) + 1 e ci devono essere almeno tre nodi nell’albero AVL (n > 2). I casi base della relazione di ricorrenza sono rispettivamente N(0) = 1 e N(1) = 2.
3. Albero rosso-nero
Un albero rosso-nero è un altro albero di ricerca binario autobilanciato che utilizza un bit in più come proprietà di autobilanciamento. Il bit viene solitamente indicato come rosso o nero, da cui il nome albero rosso-nero.
Ogni nodo in un Red-Black è rosso o nero, ma il nodo radice deve essere sempre nero. Non possono esserci due nodi rossi adiacenti e tutti i nodi foglia devono essere neri. Queste regole preservano la proprietà di autobilanciamento dell’albero.
A differenza degli alberi di ricerca binaria, gli alberi rosso-nero hanno un’efficienza approssimativamente pari a O(log n), il che li rende molto più efficienti. Tuttavia, gli alberi AVL sono molto più equilibrati grazie a una proprietà di autobilanciamento definitiva.
Migliora le tue strutture dati
Conoscere strutture dati avanzate può fare una grande differenza nei colloqui di lavoro e potrebbe essere il fattore che ti separa dalla concorrenza. Altre strutture di dati avanzate che dovresti esaminare includono n-alberi, grafici e insiemi disgiunti.
Identificare una struttura dati ideale per un determinato scenario fa parte di ciò che rende eccezionale un buon programmatore.
Lascia un commento