Efficienza algoritmi. Esempi

Documenti analoghi
Algoritmo di ordinamento sul posto che ha tempo di esecuzione :

Gli algoritmi ricorsivi di ordinamento. Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino

Complessità algoritmi su strutture dati (riassunto)

Algoritmi di ricerca. Per ricerca si intende qui il procedimento di localizzare una particolare informazione in un elenco di dati.

A. Ferrari Algoritmi notevoli

Linked Lists. Liste linkate (1) Progettazione: struct. Liste linkate (2)

ALGORITMI DI ORDINAMENTO E RICERCA BINARIA. Docente: Giorgio Giacinto AA 2008/2009. problema dell ordinamento in modi diversi

Ricerca in Array/Lista. Dato un array o lista di n elementi, vogliamo trovarne uno (e.g., un numero x in un array di interi)

Complessità algoritmi su strutture dati

Algoritmi di ordinamento

Algoritmi di Ordinamento

Algoritmi di ordinamento

Linked Lists. Liste linkate (1) liste linkate ( stack, queues ), trees. Liste linkate come strutture

Strutture dati dinamiche

Hash Table. Hash Table

Dizionari. Corso di Programmazione 3 - Ingegneria dell Informazione e dell Organizzazione 5 dicembre, Gino Perna

Corso di Tecniche di Programmazione

Algoritmi di Ordinamento Corso di Informatica Laurea in Fisica. prof. ing. Corrado Santoro

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

Laboratorio di Algoritmi e Strutture Dati Ingegneria e Scienze Informatiche - Cesena A.A

Algoritmi e Strutture Dati 2/ed Quiz a risposta multipla

La ricerca. Sequenziale Binaria L ordinamento. Selection Sort Appendice: Quick Sort. Sommario FONDAMENTI DI INFORMATICA 1. Ricapitolando un po

Tabelle Hash! Presentare le tabelle hash e la nozione di funzione di hashing Discutere la complessità di questa realizzazione per le Tavole

Algoritmi di Ordinamento

COMPLESSITÀ COMPUTAZIONALE. Fondamenti di Informatica A - Massimo Bertozzi

Algoritmi di ordinamento (I parte)

Sommario. Le strutture dati elementari per implementare sequenze: Vettori Liste

Dispense per i corsi di Informatica generale Corso di laurea in Matematica e. Introduzione agli Algoritmi Corso di laurea in Informatica

UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Algoritmi

Algoritmi di ordinamento

Progetto Corda. Alberto Ferrari. Alberto Ferrari Ingegneria dell'informazione, UniPR. 18/12/2017 Progetto Corda

Indice PARTE A. Prefazione Gli Autori Ringraziamenti dell Editore La storia del C. Capitolo 1 Computer 1. Capitolo 2 Sistemi operativi 21 XVII XXIX

Corso di Fondamenti di Informatica e Laboratorio

Linguaggio C. Problemi di Ricerca e Ordinamento: Algoritmi e Complessità.

Algoritmi di ordinamento

IL CONCETTO DI LISTA!

Algoritmi e Strutture Dati

Algoritmo di ordinamento sul posto che ha tempo di esecuzione :

Lezione 6: 12 Novembre 2013

Algoritmi e Strutture di Dati I 1. Algoritmi e Strutture di Dati I Massimo Franceschet francesc

Algoritmi di ordinamento

COMPLESSITA COMPUTAZIONALE (II PARTE) Tutor: Francesca Piersigilli

A. Ferrari. algoritmi notevoli. Python. Alberto Ferrari Informatica

Albero di Riscorsione

MERGESORT. Abstract. In questo articolo ci proponiamo di analizzare le due tipologie ricorsive mergesort

Informatica 1. Corso di Laurea Triennale in Matematica. Gianluca Rossi

Titolo presentazione INFORMATICA. sottotitolo A.A Milano, XX mese 20XX Laboratorio n 6 Ing. Gian Enrico Conti Dott.

Algoritmi e Strutture Dati

Tecniche di Ordinamento dei Vettori

Laboratorio di Programmazione Appunti sulla lezione 4: Divide et impera e algoritmi di ordinamento

PREFAZIONE... IX Lo scopo di questo libro... ix La metodologia di insegnamento... ix Panoramica sul libro... xiii

Algoritmi e Strutture Dati

Silvia Rossi. Cenni sulla complessità. Informatica. Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Programmazione I

Algoritmi e Strutture Dati

Bubble Sort. Bubble Sort

Laboratorio di Programmazione

ALGORITMI E STRUTTURE DATI

Algoritmi e Strutture di Dati

Memorizzazione di una relazione

Algoritmi di ordinamento: Array e ricorsione

Lezione 8 Struct e qsort

Trasformare array paralleli in array di record

Ordinamento per inserzione e per fusione

Laboratorio di Algoritmi e Strutture Dati. Aniello Murano. people.na.infn.it/~murano/ Murano Aniello - Lab. di ASD Terza Lezione

Laboratorio di Algoritmi e Strutture Dati

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari

Trasformare array paralleli in array di record

Mergesort (cont.) 2018/ Lezione 16. Venerdì, 16 Novembre 2018

Dispense per i corsi di Informatica generale Corso di laurea in Matematica e. Introduzione agli Algoritmi Corso di laurea in Informatica

Criteri da tenere a mente

Appunti sul C: le liste

TIPO DI DATO ASTRATTO

Allora v = v2 =

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano. Usa la tecnica del divide et impera:

Lezione 8 Liste. Rossano Venturini. Pagina web del corso.

Alberi binari e alberi binari di ricerca

Laboratorio di Programmazione Appunti sulla lezione 4: Divide et impera e algoritmi di ordinamento

Lezione 10 Liste. Rossano Venturini. Pagina web del corso.

Capitolo 5. Algoritmi. Mauro Giacomini Pearson Addison-Wesley. All rights reserved

Algoritmi e Strutture di Dati I 1. Algoritmi e Strutture di Dati I Massimo Franceschet francesc

Università di Roma Tor Vergata L16-1. Ricerca: esaminare una collezione di dati, cercando un particolare valore. nome e cognome

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari

Liste singolarmente linkate

QuickSort Università degli Studi di Milano

Costo di esecuzione e complessità. Modello di costo e complessità di un algoritmo

Strutture dati. Le liste

Algoritmi e Strutture di Dati A.A Esempio di prova scritta del 19 gennaio 2018 D.M CFU Libri e appunti chiusi Tempo = 2:00h

Lezione 6 Struct e qsort

Sommario PREFAZIONE...XI CAPITOLO 1: INTRODUZIONE AI COMPUTER, A INTERNET E AL WEB... 1 CAPITOLO 2: INTRODUZIONE ALLA PROGRAMMAZIONE IN C...

Algoritmi e Strutture Dati. Lezione 2

Complessità degli algoritmi. Obiettivi: Calcolare (valutare) la complessità di un algoritmo Confrontare algoritmi risolutivi del medesimo problema

Fondamenti di Informatica II

Linguaggio C. Operazione sui vettori

Gianpiero Cabodi e Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino

Il computer. Il case e l'unità di elaborazione. Il computer, una macchina aggiornabile.

Fondamenti di Informatica 1 - Compito A

Prova scritta di Fondamenti di Informatica - 4 aprile Fila A

Fondamenti di Informatica

Transcript:

Efficienza algoritmi indipendente dal tipo di computer e dati stima del numero di operazioni necessarie es. stampa di una lista linkata es. un doppio loop stima caso peggiore caso medio programmazione ad oggetti 1 stampa lista linkata doppio loop Esempi lp = head; while(lp){ cout << Contenuto lista : <<lp->data; lp = lp->next; for(i=0,i<n,i++) { for (j=i+1,j<n;j++) {do something (N+1)a + Nc + Nw ο(ν) N(N+1)/2 ο(ν 2 ) programmazione ad oggetti 2

Ordine di grandezza programmazione ad oggetti 3 Valutazione caso peggiore/medio ricerca in una lista linkata key = dato_da_cercare; lp = head; while(lp->data!= key){ lp = lp->next; caso peggiore -> caso medio -> (N+1)a + Nc ο(ν) (N+1)a/2 + Nc/2 ο(ν) programmazione ad oggetti 4

Altri parametri da considerare velocità dipende dalla grandezza del problema. se N=25 o(n) oppure o(logn) sono simili occupazione memoria l estrazione dell elemento I-esimo in un vettore è sempre di ordine o(1), mentre in una lista linkata è di ordine o(n) l allocazione della memoria è migliore per le liste linkate programmazione ad oggetti 5 Efficienza di algoritmi di ricerca ricerca sequenziale di un vettore caso peggiore (N) e caso medio(n/2) o(n) ricerca binaria (di un vettore ordinato) se N=2 k confronta l elemento mediano di un vettore N, confronta l elemento mediano di un vettore N/2, confronto l elemento mediano di un vettore N/2 k caso peggiore: tutte k le divisioni -> o(log 2 N) se N= 1.000.000 -> log 2 (1.000.000) 19 MA il vettore deve essere ordinato programmazione ad oggetti 6

Algoritmi di ordinamento ordinamento interno (in main memory) o ordinamento esterno (su file) chiave di ordinamento (sort key) nelle strutture posso avere diversi campi di dati posso ordinare a seconda di una scelta su uno di questi campi programmazione ad oggetti 7 Selection Sort selection sort (esempio dati in un vettore) si cerca l elemento maggiore (minore) e lo si posizione nell ultimo (primo) posto del vettore scambiando di posizione si continua con un vettore di ordine N-1 N(N-1)/2 + 3(N-1) ο(ν 2 ) programmazione ad oggetti 8

Insertion Sort insertion sort (inserimento ordinato) meglio in una lista linkata, ma anche in un vettore (overhead degli spostamenti dei valori nel vettore) ο(ν 2 ) nel caso peggiore programmazione ad oggetti 9 Quicksort algoritmo ricorsivo -> divide et impera partizionare il vettore rispetto ad un pivot ripetere per i due vettori creati fino a quando si arriva al vettore di dimensione 1 programmazione ad oggetti 10

Valutazione quicksort caso peggiore -> vettore già ordinato ο(ν 2 ) nel caso peggiore se N= 1.000.000 -> N 2 1 * 10 12 caso medio -> ο( Ν log 2 Ν ) nel caso medio se N= 1.000.000 -> Nlog 2 (1.000.000) 19 * 10 6 programmazione ad oggetti 11 Dizionari dizionari : strutture dati che supportano i metodi di inserimento, ricerca e cancellazione Testa Es. dizionario con lista linkata ordinata aaa bbb ccc ddd programmazione ad oggetti 12

Un dizionario migliore.. A a1 a2 a3 a4 B b1 b2.. E e1.. N n1 n2 n3.... programmazione ad oggetti 13 Un dizionario migliore.. Generalizzazione: Hash Table: tabelle tritatutto per ogni tipo di dato (alfanumerico, numerico ) Indice_tabella = funzione (key) Diversi metodi, a secondo del tipo di key Division Method: un indice compreso tra 0 e SIZE viene creato dividendo la key(numerica) per SIZE e prendendo il Resto Aritmetico (modulo-n) int indice = key % SIZE programmazione ad oggetti 14

Con le stringhe.. #define SIZE 256 typedef unsigned short int indextype; indextype f(char * str) { indextype h = 0; while (*str) { h = h + *str; h += *str++; str++; return h%size; programmazione ad oggetti 15 Hash table + Liste Linkate Hash Table di grandezza (SIZE) = 1 -> Lista Linkata con N nodi Hash Table di grandezza = 2 -> 2 liste linkate con N/2 nodi Hash Table di grandezza = 100 -> 100 liste linkate con N/100 nodi programmazione ad oggetti 16