4116cc6563ce846f08fb7ca5451b42c49c315e4b
linguaggi/s03/alg_dei_tipi.md
| ... | ... | @@ -133,4 +133,13 @@ Valore (Indice i) 0 1 2 3 4 5 6 7 |
| 133 | 133 | Bit (1=Presente, 0=Assente) 0 1 0 0 0 0 |
| 134 | 134 | |
| 135 | 135 | Fare l'unione o l'intersezione tra due insiemi diventa una semplice operazione bit-a-bit (OR, AND) a livello di processore. È istantaneo. |
| 136 | -Il limite? Se il tipo base fosse "Tutti i numeri interi a 32 bit". L'array dovrebbe avere 2^{32} bit (circa 512 Megabyte di memoria) per un singolo insieme, anche se contiene solo tre numeri! Uno spreco enorme. |
|
| 136 | +I l limite? Se il tipo base fosse "Tutti i numeri interi a 32 bit". L'array dovrebbe avere 2^{32} bit (circa 512 Megabyte di memoria) per un singolo insieme, anche se contiene solo tre numeri! Uno spreco enorme. |
|
| 137 | + |
|
| 138 | +Esempio con tabelle Hash (Il workaround moderno) |
|
| 139 | + |
|
| 140 | +Quando il tipo base è grande (come stringhe, o numeri interi generici), i linguaggi moderni (come Python, Java, C#) abbandonano l'array di bit e usano le Tabelle Hash. |
|
| 141 | + |
|
| 142 | +Una piccola correzione al tuo ultimo appunto: Non è che hai un "hash come tipo base", ma usi una Tabella Hash come struttura dati sottostante. |
|
| 143 | +In pratica, passi il tuo valore (es. la stringa "Ciao") a una funzione di hash, che lo trasforma in un numero. Quel numero diventa l'indirizzo di memoria dove salvare il dato. |
|
| 144 | + |
|
| 145 | + Il compromesso: Occupa un po' più di memoria rispetto all'array di bit puro ed è impercettibilmente più lenta nelle operazioni logiche, ma risolve il problema dello spreco di spazio, permettendoti di creare insiemi di qualsiasi tipo di dato senza far esplodere la RAM. |