Anteprima
Vedrai una selezione di 10 pagine su 137
Algoritmi e Strutture Dati Pag. 1 Algoritmi e Strutture Dati Pag. 2
Anteprima di 10 pagg. su 137.
Scarica il documento per vederlo tutto.
Algoritmi e Strutture Dati Pag. 6
Anteprima di 10 pagg. su 137.
Scarica il documento per vederlo tutto.
Algoritmi e Strutture Dati Pag. 11
Anteprima di 10 pagg. su 137.
Scarica il documento per vederlo tutto.
Algoritmi e Strutture Dati Pag. 16
Anteprima di 10 pagg. su 137.
Scarica il documento per vederlo tutto.
Algoritmi e Strutture Dati Pag. 21
Anteprima di 10 pagg. su 137.
Scarica il documento per vederlo tutto.
Algoritmi e Strutture Dati Pag. 26
Anteprima di 10 pagg. su 137.
Scarica il documento per vederlo tutto.
Algoritmi e Strutture Dati Pag. 31
Anteprima di 10 pagg. su 137.
Scarica il documento per vederlo tutto.
Algoritmi e Strutture Dati Pag. 36
Anteprima di 10 pagg. su 137.
Scarica il documento per vederlo tutto.
Algoritmi e Strutture Dati Pag. 41
1 su 137
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

Algoritmi e Strutture Dati

Appunti

Algoritmi e Strutture dati. Lezione n°1

Introduzione:

  • Al Khuwarizmi: Algoritmi (matematico persiano)
  • Knutth: calcolo della complessità degli algoritmi

Principio di "inclusione aritmetica" a p.esim:

n = ∑n = (n (n + 1)) / 2 K=1         2

somma intera da 1 ad n

Logaritmi:

Proprietà: b = base, x ed y numeri

  • logb (x ∙ y) = logb x + logb y
  • logb (x / y) = logb x - logb y
  • logb (xn) = n logb x
  • logb (b) = 1
  • logb (1) = 0
  • logb (bn) = n

Proprietà del cambiamento di base dei Logaritmi:

con a > 0 e a ≠ 1

  • logb x = loga x
  • logb a

(loga b va al denominatore) posto che il reciproco è una costante: 1/k è una costante, e lo posso definire con la lettera C:

  • loga b = C
  • anche essere un elevante
  • alla fine del calcolo

deleteMax per code di priorita in heap binario

prendo l'elemento piu a destra dell'ultimo livello e lo scambio con la radice (che se ne va)

scelgo la chiave massima tra quelle dei tre figli

N.B.

Altrimenti non rimarrebbe l'integrita dell'heap binario

Risultato finale:

La complessità dunque e log2 n una volta e occorre una simile a proviera trovare la livello 2

n da tempestare per risultato che isficamente

  • Promemoria domande nella complessità di una operazione nell'heap binario
  • firstMAX (pq)=elem
  • l2 det: maggior l'elemento nella radice dell'T
  • L'elemento m trova in posizione s
  • Complesso temporale O(1)

Insert(ei, ki, pq)=pq

  • si inserisce la coppia chiave-valore come ultimo elemento dello heap.
  • Ora bisogna verificare m è nella posizione giusta (ogni nodo deve avere una chiave maggiore da quella dei miei figli).

Ammetti insert(ei, ki, pq)

  • crea un nuovo nodo v nello heap pq, inserendolo in posizione ms dell'array [v contiene (ki, ei)]
  • muovi Alto(v, pq)

Procedura muoviAlto(v, pq)

  • While (v ≠ radice(pq) and t=(chiave(v))>chiave(padre(v)), allora scambia v e padre(v) in pq nell'array H

Esempio: insert((Giona-lions), 7-26, pq)

Risultato Finale:

Albero di Ricoprimento del Grafo G

Visita in profondità:

  • Procedura visita DFS Ricorsiva
    • marca e visita il vertice v
    • for each (arco (v, w)) do
      • if (w non è marcato) then
      • per ogni vertice adiacente a w
      • questo w non deve essere marcato
      • aggiungi l’arco (v, w) all'albero T
      • visita DFS Ricorsiva (w, T)
  • Algoritmo visita DFS (vertice s) -> albero
    • T ← albero vuoto / rimuovi tutti i vertici non marcati
    • visita DFS Ricorsiva (s, T)
    • return T

Dovrà anche modificare la struttura delle R(M) in aggiungendo il dato che deve tenere conto del vertici da cui proviene e all'etichetta corrispondente della lista di adiacenza.

struct halfEdgeVertex {

int label label;

};

Non ci sono più posizioni Vertices < Vertex.pipe, raggiungibile da c Vertices < 1/2 posizione di vertice informatica Weight weights;

List(Vertex => label) multi EdgeVertex * next;

Es.: Esempio:

Manchester Nottingham Norwich London

Liste di Adiacenza

ASD LEZIONE n.25

Al p.v.a. di essere un array, da un puntatore le liste di adiacenza è una lista collegata. Questo ci consuma meno bites ma più difficile ad accedere perché dobbiamo scorrere le liste mentre prima bastava fare a [ ] e accedavamo ad un vertice.

Gli archi possono avere dei "pes... Esempio: RAPPRESENTANDO

Manchester -> Nottingham, 7 Nottingham -> London, 420

Strutture dati per grafi più diffuse

  • Liste di Adiacenza:
    • Ogni vertice memorizza inc. in un array oppure in una lista
  • Le matrici di Adiacenza

Liste di Adiacenza occupano spazio

Ogni nodo acc. al nodo i

In un grafo non orientato un arco è rappresentato due volte.

In un grafo Orientato

Ogni arco è descritto da:

  1. Un elemento nella lista di adiacenza se il grafo è orientato
  2. Due elementi se il grafo non è orientato

(2 x m blocchi) [n + 2m blocchi ... totale]

Grafi orientati: connesso

  • Definizione: Un grafo orientato G è fortemente connesso se e solo se esiste un cammino da ogni vertice v di G ad ogni vertice w di G con v ≠ w.

Un grafo orientato, fortemente connesso

Un grafo orientato, non fortemente connesso (esempio: cammino da B, C, D a A)

Albero libero:

  • Definizione: Un albero libero è un grafo non orientato, connesso e senza cicli.

  • Osservazione: Un albero libero si ottiene da un albero radicato in quanto un albero libero non sente la radice.

Comb. se aggiungiamo un arco

È un albero connesso minimale in cui se si toglie la connessione

Teorema:

Se rimuoviamo un arco da un albero libero perdo la connessione su quest'ultimo.

Teorema:

Se n è il numero di vertici di un albero libero H, allora H ha esattamente n-1 archi.

Errore:

deleteElemR(const Label L, Tree &T) {

  • parte l'rumore sicure rumore chiamato
  • non si deve sbagliare ridurre
  • con righelli molto cancellazione sulla radice
  • se l'etichetta c'è la stessa
  • se non sono in quel ramo allora devo
  • rimuovere una funzione anch'essa
  • deleteElemAux allora tra sicuramente;
  • che ne vo con trovare quella delle
  • cancellazione della radice che ho
  • trattato prima

return deleteElemAux(L, T);

}

Errore deleteElemAux(const Label L, Tree &T) {

  • caso 1: se t'è vuot non c'è nulla da
  • cancellare : return FAIL
  • caso 2: se t'fra un figlio con etichetta L
  • lo rimuovo tenendo conto di
  • "aggiuntare" i produttori di dove
  • era che prenunciato questo nostra
  • rispetto ai fratelli (primo figlio e l'ultima)
  • return OK
  • caso 3: se siamo arrivati qui i nodi che ho
  • trovato non avevano quell’etichetta
  • ma loro successori osservar mi.
  • ancora offerta ho rimanuto rimuovi
  • vol deleteElemAux ma fighe che
  • che è ancora esplatava
  • return OK se trovato, FAIL altrimenti.
Dettagli
A.A. 2019-2020
137 pagine
1 download
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher Giacomo_Pedemonte di informazioni apprese con la frequenza delle lezioni di Algoritmi e strutture dati e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli studi di Genova o del prof Mascardi Viviana.