Skip to content

Commit

Permalink
Lezione XII Algoritmi e Strutture Dati
Browse files Browse the repository at this point in the history
  • Loading branch information
sleepy-goth committed Nov 13, 2024
1 parent 2def4ee commit 09a30f1
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 2 deletions.
45 changes: 45 additions & 0 deletions 2° Anno/Algoritmi/Appunti Corso/Algoritmi e Strutture Dati.md
Original file line number Diff line number Diff line change
Expand Up @@ -1122,5 +1122,50 @@ alg(A)
j*=max[i+1]
delta=A[i*]-A[j*]
```
## Lezione XII (Strutture dati elementari)
### Tipo di Dato e Struttura di Dati
### Struttura dati Dizionario
Riceve un insieme S di coppie (e, k), cioè valore-chiave, e supporta le seguenti **operazioni**:
- **Insert**, aggiungere ad S una nuova coppia (e, k).
- **Delete**, cancella da S l'elemento con chiave k.
- **Search**, fornisce l'elemento nel dizionario con chiave k, se non esiste restituisce null.
#### Implementazione
Vi sono diverse tipologie di implementazioni, a seconda di come viene strutturata la lista delle chiavi
### Struttura dati Pila
Riceve una sequenza S di *n elementi* e supporta le seguenti operazioni:
- **isEmpty() -> result**, restituisce *true* se S è vuota e *false* altrimenti.
- **push(elem e)**, aggiunge *e* come ultimo elemento di S.
- **pop() -> elem**, toglie l'ultimo elemento di S e lo restituisce.
- **top() -> elem**, restituisce l'ultimo elemento di S senza toglierlo.
### Struttura dati Coda
Riceve una sequenza S di *n elementi* e supporta le seguenti operazioni:
- **isEmpty() -> result**, restituisce *true* se S è vuota e *false* altrimenti.
- **enqueue(elem e)**, aggiunge e come ultimo elemento di S.
- **dequeue() -> elem**, toglie da S il primo elemento e lo restituisce.
- **first() -> elem**, restituisce il primo elemento da S, senza toglierlo.
### Rappresentazione dei dati
Esistono due tipologie fondamentali di rappresentazione dei dati:
- **Rappresentazioni indicizzate**, che usano array e matrici e sfruttano l'indicizzazione di essi. Possiede vantaggi e svantaggi:
- Gli indici delle celle di un array sono numeri consecutivi.
- Non è possibile aggiungere nuove celle ad un array.
- **Rappresentazione collegate**, che usano i record (costituenti di base) collegati fra loro tramite puntatori. I record possono essere distrutti e creati dinamicamente. Anche questo possiede vantaggi e svantaggi:
- Possiamo aggiungere e togliere un record a una struttura collegata
- Gli indirizzi dei record non sono necessariamente consecutivi.

### Organizzazione gerarchica dei dati
Consiste nell'organizzazione dei dati in una gerarchia e delle relazioni tramite gli alberi. Ci sono diverse definizioni aggiuntive per gli [[|alberi]]:
- Il grado di un nodo è il numero dei suoi figli.
- u antenato di v se u è raggiungibile da v risalendo di padre in padre v discendente di u se u è un antenato di v.
![[l121.png]]

Come possiamo rappresentare un albero in maniera indicizzata? (Quindi con array)
##### Vettore dei padri
L'idea è di associare ad ogni cella l'informazione di un nodo e la posizione del padre, in un vettore almeno di dimensione n. Quindi una generica cella contiene l'informazione (info, parent) dove:
- Info è il contenuto informativo del nodo i
- Parent è l'indice nell'array del padre.

Quindi le operazioni di ricerca hanno i seguenti costi:
- Ricerca di un padre **O(1)** mentre ricerca di un figlio **O(n)**.
##### Vettore posizionale (da fare)
## To Do List
- Aggiungere esempi per il [[#^5d7100|metodo della sostituzione]].
Binary file added 2° Anno/Algoritmi/Appunti Corso/Assets/l121.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 4 additions & 1 deletion 2° Anno/Algoritmi/Appunti Corso/Esercizi.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,7 @@ temporale (nel caso peggiore):
- Ad una festa ci sono n persone, una di queste è una celebrità. La celebrità non conosce nessuno ma è conosciuta da tutti. Individua la celebrità facendo poche domande alle persone (tipo "conosci questa persona?").
- Dati n dischi di diametro diverso e 3 pali, spostare i dischi da un palo ad un altro facendo meno spostamenti possibili. Si può spostare un disco alla volta e non si può mettere un disco di diametro più grande sopra uno di diametro più piccolo.
### Lezione VI
Scrivere lo pseudo-codice del [[Algoritmi e Strutture Dati#^0a2155|Bubble Sort]] e dell'[[Algoritmi e Strutture Dati#^fccf0b|InsertionSort]] e fare l'analisi della complessità temporale nel caso peggiore.
Scrivere lo pseudo-codice del [[Algoritmi e Strutture Dati#^0a2155|Bubble Sort]] e dell'[[Algoritmi e Strutture Dati#^fccf0b|InsertionSort]] e fare l'analisi della complessità temporale nel caso peggiore.
### Lezione XII
- Progettare una struttura dati indicizzata che implementi il tipo di dato Pila e il tipo di dato Coda. Le operazioni devo avere complessità temporale costante.
- Progettare una struttura dati collegata che implementi il tipo di dato Pila e il tipo di dato Coda. Le operazioni devo avere complessità temporale costante.
7 changes: 6 additions & 1 deletion 2° Anno/Algoritmi/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,9 @@
- [ ] Lezione VIII
- [ ] Lezione IX
- [ ] Lezione X
- [ ] Lezione XI
- [ ] Lezione XI
- [ ] Lezione XII
- [ ] Possibile riorganizzazione
- [ ] Finire implementazione Dizionario
- [ ] Inserire link alla spiegazione degli albero nell'organizzazione gerarchica dei dati
- [ ] Vettore posizionale

0 comments on commit 09a30f1

Please sign in to comment.