Un vettore è una struttura dati che permette di memorizzare sequenze di dati omogeneii (sequenze di interi, di valori booleani,...

Documenti analoghi
Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007

1.1 Concetti base dell Informatica: Algoritmi

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento

Algoritmi di ordinamento: Array e ricorsione

Ordinamento per inserzione e per fusione

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

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

Si può fare di meglio?

Prova di Laboratorio del [ Corso A-B di Programmazione (A.A. 2004/05) Esempio: Media Modalità di consegna:

Esercizi C su array e matrici

PROVETTE D ESAME. Algoritmi e Strutture Dati

Array e Oggetti. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 12. A. Miola Dicembre 2006

5. DIVIDE AND CONQUER I

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

RICERCA IN UN VETTORE

Scopo: ordinare una sequenza di elementi in base a una certa relazione d ordine. Ipotesi: gli elementi siano memorizzati in un array.

in termini informali: un algoritmo è una sequenza ordinata di operazioni che risolve un problema specifico

Appunti di informatica. Lezione 10 anno accademico Mario Verdicchio

Corso di Informatica di Base

Array ( vettore/matrice Un dato strutturato. indice Accesso diretto

Anche se due variabili vettore sono dello stesso tipo, NON è possibile l assegnamento diretto:

Esercitazione 3. Heapsort

ESERCIZIO: Lettura/Scrittura Array

Problemi e algoritmi. Il che cosa ed il come. Il che cosa ed il come. Il che cosa e il come

n deve essere maggiore di 0, altrimenti il metodo restituisce null.

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

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

Diagrammi di flusso. Un metodo per rappresentare graficamente gli algoritmi. sotto programma. Input/ Output. Start. predicato Elaborazione Stop

Algoritmi di Ricerca. Esempi di programmi Java

Fondamenti di Programmazione

Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti

Sapendo che il vettore è ordinato, la ricerca può essere ottimizzata Vettore ordinato in senso non decrescente: Vettore ordinato in senso crescente:

Problema: calcolare il massimo tra K numeri

Introduzione agli Algoritmi 4. Problemi. Dal Problema alla Soluzione

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

ESERCITAZIONE MICROECONOMIA (CORSO B) ESEMPI DI ESERCIZI DI TEORIA DEI GIOCHI

Programmazione dinamica

Dal Problema all Algoritmo. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Programmazione a blocchi. Algobuild Prof. Sergio Roselli

Il Problema dell Ordinamento

Fondamenti di Informatica

Tecniche di Ordinamento dei Vettori

Esercizi Capitolo 12 - Divide-et-Impera

Dall algoritmo al programma

Esercizi su Python. 14 maggio Scrivere una procedura che generi una stringa di 100 interi casuali tra 1 e 1000 e che:

Laboratorio di Python

DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA. INFORMATICA B Ingegneria Elettrica. La ricorsione

Algoritmi di Ricerca. Esempi di programmi Java

Permutazioni. 1 Introduzione

Programmazione I - Laboratorio

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale

Algoritmi e Strutture Dati

Esercizi Capitolo 6 - Alberi binari di ricerca

A.S Classe III H Informatica. Programma didattico finale e indicazioni per il recupero estivo relativi all'insegnamento di Informatica

Lezione 8 Struct e qsort

Sviluppo di programmi

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

Distanza di Edit. Speaker: Antinisca Di Marco Data:

Capitolo 3 L elaborazione e la strutturazione dell informazione

A lezione sono stati presentati i seguenti passi per risolvere un problema:

Fondamenti di Informatica e Laboratorio T-AB Ingegneria Elettronica e Telecomunicazioni. Lab 06 Array" Lab06 1

Esercizio 1: calcolo insieme intersezione

Sommario. Ordinamento. Selection Sort Bubble Sort/ Shaker Sort Shell Sort

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

La principale modalità di calcolo è l applicazione di funzioni

Linguaggio C - Array. Array: tipo nome_array[num_elementi]

Divide et impera. Divide et impera. Divide et impera. Divide et impera

Dal problema a un programma comprensibile dal calcolatore. Il Progetto degli Algoritmi. Dall analisi del problema all esecuzione

Fondamenti di Informatica T-1 Modulo 2

Una breve introduzione all implementazione in C di algoritmi su grafo

Corso di Fondamenti di Informatica

Tipi di dati fondamentali. Tipi di dati fondamentali. Utilità dei tipi di dati nelle dichiarazioni. Il tipo di dati char. Codice ASCII.

Codifica di canale. (dalle dispense e dalle fotocopie) Trasmissione dell Informazione

Analisi dei metodi per individuare le strategie miste nei giochi 2 x 2

Sistemi lineari - Parte Seconda - Esercizi

Linguaggio C++ 8. Matrici

Corso di Laurea in Informatica Modulo di Laboratorio di Programmazione I (a.a ) Docente: Prof. M. Nesi

Esercizi vari. Alberto Montresor. 19 Agosto, 2014

Pr1: determinare il maggiore di n numeri interi n. Fondamenti di Informatica Prof. Vittoria de Nitto Personè

Strutture dati e loro organizzazione. Gabriella Trucco

Dati e Algoritmi I (Pietracaprina) Esercizi sulle Nozioni di Base

Laboratorio di Programmazione

Algoritmi e strutture di dati 2

Corso di Informatica. Problemi ed algoritmi. Ing Pasquale Rota

Array multidimensionali e stringhe

Esercizi d esame. Elena Tundo

Algoritmi e strutture di dati 2

Capitolo 3 Elaborazione e Strutturazione dell Informazione. (Introduzione ai Sistemi Informatici Sciuto et alii)

Introduzione agli algoritmi e le stru1ure da2

Capitolo 2 Fondamenti di Informatica - Esercizi

3.4 Metodo di Branch and Bound

MODULO 1. Prof. Onofrio Greco. Prof. Greco Onofrio

ALGORITMI E STRUTTURE DATI

Esercizi per il corso di Algoritmi e Strutture Dati

Algoritmi greedy. Gli algoritmi che risolvono problemi di ottimizzazione devono in genere operare una sequenza di scelte per arrivare alla soluzione

UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Matlab: esempi ed esercizi

Note per la Lezione 6 Ugo Vaccaro

15 Riepilogo di esercizi in MATLAB

Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE. Francesco Tura. F. Tura

Transcript:

Vettori (array) Un vettore è una struttura dati che permette di memorizzare sequenze di dati omogeneii (sequenze di interi, di valori booleani,...) I vettori sono caratterizzati da dimensione tipo Es. v[10] v= 3 5 7 9 0 0 2 1 3 4 0 1 2 3 4 5 6 7 8 9 I singoli elementi di un vettore possono essere riferiti mediante un indice. notazione: v[i]= i-esimo elemento del vettore v

Operazioni sui vettori Possiamo scrivere e leggere una singola cella di un vettore. Esempi di istruzioni di input/output su vettori - leggi v[i] - scrivi v[i] Esempi di istruzioni di assegnamento su vettori - v[i]! exp - X! v[i] - w[j]! v[i]

Alcuni esercizi sui vettori

Problema: Dato un vettore di interi w di dimensione m, calcolare l elemento minimo di w. sottoprogramma minvet(in:w,m;out: min) 1. min!w[0] 2. i!1 3. mentre (i<m) fai 3.1. se w[i]<min allora 3.1.1. min! w[i] 3.2 i!i+1

Problema: dati due vettori di interi v1 e v2 di dimensioni n1 e n2, verificare se v1 e v2 sono uguali. sottoprogramma vett=(in:v1,n1,v2,n2: out: uguali) 1. se (n1<>n2) allora 1.1 uguali!falso altrimenti 1.2 uguali!vero 1.3 i!0 1.4 mentre (i<n1) e (uguali=vero) fai 1.4.1 se v1[i]<>v2[i] allora 2.4.1.1 uguali!falso 1.4.2 i!i+1

Problema: Dato un vettore di caratteri v di dimensione n, verificare se la parola o frase contenuta è palindroma. Esempi di palindrome: Onorarono Avida di vita, desiai ogni amore vero, ma ingoiai sedativi da diva "O mordo tua nuora o aro un autodromo" Was it a cat I saw? (L. Carroll - Alice; inoltre lo dice Titti quando vede Gatto Silvestro)

Soluzione sottoprogramma palindroma?(in:v,n:out:pal) 1. I!0 2. J!n-1 3. pal!vero 4. mentre (I<n/2) e (pal=vero) fai 4.1. se (v[i]<>v[j]) allora 4.1.2. pal!falso 4.2. I!I+1 4.3. J!J-1

Algoritmi di ricerca Problema: dato un vettore v di dimensione n e un elemento X, determinare se X è contenuto in v. Soluzioni possibili: ricerca lineare ricerca binaria

Ricerca lineare Soluzione: scorrere tutto il vettore v da posizione 0 a posizione (n-1) e controllare ogni singolo elemento. Fermarsi nel caso in cui v[i]=x, per qualche i=1,...,n.

L algoritmo sottoprogramma ricerca-lineare (in:v,n,x;out: trovato) trovato! falso i! 0 mentre ((i<n) and (not trovato)) fai se (v[i]=x) allora trovato! vero i! i+1 Nel caso pessimo (elemento non trovato): dovrò scorrere tutta la lista di elementi

Indovina chi? Gioco: Un giocatore A sceglie una persona in un'aula di 80 persone. Un giocatore B deve indovinare di chi si tratta ponendo ad A al massimo 7 domande.

Ricerca binaria Nel caso in cui il vettore fosse ordinato possiamo utilizzare un metodo piu efficiente per ricercare un elemento in un vettore. Metodo Determino il valore v[m] che sta nella posizione centrale del vettore Se v[m]=x, allora ho trovato l elemento cercato, altrimenti... Se x<v[m], cerco l elemento nella prima metà del vettore, altrimenti lo cerco nella seconda metà. Il metodo mi permette sempre di scartare metà degli elementi senza doverli leggere.

Esempio Cerco il valore 7 3 4 5 7 9 10 12 13 14 24 7<9 3 4 5 7 7>4 5 7 7 7>5

L algoritmo sottoprogramma RicercaBinaria(in:v,n,x;out:trovato) trovato! falso max! n-1 min! 0 mentre (min <= max) and (not trovato) fai m! (max+min)/2 se (x = v[m]) allora trovato! vero altrimenti se (x < v[m]) allora max! m-1 altrimenti min! m+1

Ordinamento Problema dato un vettore v di lunghezza n contenente una sequenza disordinata di interi, ordinare la sequenza in senso crescente (o decrescente). Esempio input output 3 5 7 9 0 0 2 1 3 4 0 0 1 2 3 3 4 5 7 9

Durante l esecuzione dell algoritmo gli elementi più grandi (piu piccoli, nel caso di ordinamento decrescente) tendono a spostarsi (come bolle!) verso la fine del vettore. Bubble sort È l algoritmo di ordinamento più vecchio e anche il più lento! Metodo: si scandisce il vettore confrontando elementi adiacenti, nel caso sia necessario si scambiano gli elementi. L algoritmo ripete tale operazione finché non ci sono più posizioni da scambiare (vettore ordinato).

Esempio Ordiniamo con bubble sort il vettore 3 2 0 1 3 2 0 1 2 0 1 3 0 1 2 3 0 1 2 3 2 3 0 1 0 2 1 3 0 1 2 3 2 0 3 1 0 1 2 3 2 0 1 3

L algoritmo sottoprogramma bubblesort(in:v,n;out:v) i! 0 mentre (i < n-1) fai j! 0 mentre (j < n-i-1) fai se (v[j+1] > v[j]) allora scambia(in:v[j],v[j+1];out:v[j],v[j+1]); j! j+1 i! i+1

Merge sort È un algoritmo di ordinamento ricorsivo basato sull approccio divide and conquer dividi il problema in sottoproblemi conquista i sottoproblemi, risolvendoli ricorsivamente combina le soluzioni dei sottoproblemi per ottenere la soluzione del problema originale Algoritmo di merge sort DIVIDE: dividi il vettore di n elementi in due sottovettori di n/2 elementi CONQUER: ordina i due sottovettori COMBINE: fondi assieme i due sottovettori ordinati in un unico vettore ordinato

Esempio 3 2 0 1 3 2 0 1 3 2 0 1 Merge 2 3 0 1 Merge 0 1 2 3

Merge Problema: fondere assieme due sottovettori (v[p...q], v[q+1..r]) ordinati ottenendo un unico vettore ordinato v. p q r 3 7 8 1 5 1 3 5 7 8

Merge - l algoritmo sottoprogramma merge(in:v,p,q,r: out v) i! p j! q+1 k! 0 mentre (i<=q) and (j<=r) fai se v[i]<=v[j] allora aux[k]! v[i] k! k+1 i! i+1 altrimenti aux[k]! v[j] k! k+1 j! j+1 mentre (i<=q) fai aux[k]! v[i] k! k+1 i! i+1 mentre (j<=r) fai aux[k]! v[j] k! k+1 j! j+1 copia(in aux; out v)

Merge sort l algoritmo sottoprogramma mergesort(in: v,p,r;out: v) se (p<r) allora q! (p+r/2) mergesort(in: v,p,q; out: v) mergesort(in: v,q+1,r; out v) merge(in:v,p,q,r)

Matrici Una matrice è un vettore multidimensionale, in cui gli elementi memorizzati sono riferiti attraverso delle n-uple di indici. Ci limiteremo ad usare matrici di dimensione 2. Nel caso di dimensione 2, una matrice può essere interpretata come una griglia di valori (vettore di vettori). Ogni elemento di una matrice di dimensione 2 è indicizzato mediante una coppia di indici (numero di riga, numero di colonna). 0 1 2 0 1 2 5 1 0 1 3 7 10 9 8 elemento 7 identificato dalla coppia di indici (1,2)

Notazione matrici L elemento di riga I e colonna J di una matrice di nome M è identificato mediante la notazione M[I][J] Es. M[0][0] elemento di riga 0 e colonna 0 di M (i.e. elemento corrispondente alla cella nell angolo superiore sx della matrice)