Permutazioni e Gioco del 15. Dott.ssa Giovanna Rosone

Documenti analoghi
Permutazioni. 1 Introduzione

Vettori e Matrici (array)

Lezione 6 programmazione in Java

Probabilità e numeri casuali Teoria e programmazione Pascal e C++

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

Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di

Progetto Lauree Scientifiche Liceo Classico L.Ariosto, Ferrara Dipartimento di Matematica Università di Ferrara 24 Gennaio 2012

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

Vettori e Matrici (array)

Ordinamenti per confronto: albero di decisione

Esercitazione 5: Sistemi a risoluzione immediata.

Algoritmi, Strutture Dati e Programmi. UD 2.b: Programmazione in Pascal

La simulazione con DERIVE Marcello Pedone LE SIMULAZIONI DEL LANCIO DI DADI CON DERIVE

Cognome e Nome : Corso e Anno di Immatricolazione: Modalità di Laboratorio (Progetto/Prova) :

Programmazione I - Laboratorio

Esercizi di riepilogo (Fondamenti di Informatica 1 Walter Didimo)

Informatica B. Facoltà di Ingegneria Industriale Laurea in Ingegneria Energetica, Meccanica e dei Trasporti. Prof. Marco Masseroli

ESERCIZI SULLA TECNICA BACKTRACKING e BRANCH & BOUND

Esercizi 2. Marco Anisetti

Laboratorio di Python

Array Tipi di dato semplici e strutturati strutturati array elementi omogenei numero d ordine indice lunghezza dimensione

Almerico Murli - Le variabili strutturate (array) VARIABILI STRUTTURATE (ARRAY)

PASCAL standard. Il linguaggio PASCAL nasce come evoluzione del linguaggio ALGOL60 (ALGOrithmic Language) nel 1968 ad opera di N. Wirth.

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Il codice di Sarngadeva

Esercizi. y = x 2 1 (t x). Essa interseca la parabola quando y = t 2 cioé. 1, t = x. (t + x) = 1. x 2 1 2x (t x) = t2, (t x)(t + x) = 1.

11.4 Chiusura transitiva

A m n B n p = P m p. 0 1 a b c d. a b. 0 a 0 c Il risultato e lo stesso solo nel caso in cui c = 0 e a = d.

Laboratorio Progettazione Web Il linguaggio PHP Lezione 6. Andrea Marchetti IIT-CNR 2011/2012

UD 3.2b: Programmazione in Pascal (1)

Richiami di algebra lineare

Fondamenti di Informatica T-1 Modulo 2

Lezione 21 e 22. Valentina Ciriani ( ) Laboratorio di programmazione. Laboratorio di programmazione. Lezione 21 e 22

Fondamenti di Informatica

Esempi. non. orientato. orientato

Algoritmi e Strutture Dati. Capitolo 4 Ordinamento: Selection e Insertion Sort

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

ARRAY E TYPEDEF. A volte è utile definire un nuovo tipo di dato come array. Si usa la solita sintassi del linguaggio C

Calcolare x n = x x x (n volte)

Multidimensionali. Array Multidimensionali. Tipi di array. Matrice: array bidimensionale. Array multidimensionale. Dichiarazione di una matrice

Scuola di Calcolo Scientifico con MATLAB (SCSM) 2017

Corso di Matematica per la Chimica

Esempio: Tombola! Vogliamo progettare una applicazione che realizza il gioco della tombola Versione semplificata: un banco, un

Fondamenti di Informatica T-1 Modulo 2

Cicli annidati ed Array multidimensionali

Capitolo 10 - Strutture

Algoritmi e Strutture Dati

Cicli annidati e matrici di variabili

Introduzione ai grafi. Introduzione ai grafi p. 1/2

Università degli Studi di Brescia. Vettori di variabili. ! Sono variabili aggregate in grado di memorizzare una collezione (organizzata) di oggetti

Algoritmi e Strutture Dati. Capitolo 4 Ordinamento

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

( ) TEORIA DELLE MATRICI. A. Scimone a.s pag 1

PON Liceo Scientifico Leonardo da Vinci. Vallo della Lucania

Introduzione al MATLAB c Parte 3 Script e function

Algebra Lineare ed Elementi di Geometria Corso di Laurea in Matematica Applicata MODULO 1

Fondamenti di Programmazione

Quadrato Magico. Fondamenti di Programmazione

Costruzione dell insieme dei Follow

Esercitazione 11. Liste semplici

Lab 10 Passaggio per riferimento

Argomenti della lezione. Introduzione agli Algoritmi e alle Strutture Dati. Lista Lineare. Lista Lineare come Tipo di Dato Astratto

Unità Didattica 4 Linguaggio C. Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo.

Laboratorio di Python

Appunti di informatica. Lezione 10 anno accademico Mario Verdicchio

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

Polinomio di secondo grado: Calcolo delle soluzioni di una equazione di secondo grado: import GraphicIO.*; public class Polinomio2 {

3. Matrici e algebra lineare in MATLAB

Problemi, algoritmi e oggetti

Laboratorio 8. Programmazione - CdS Matematica. Mirko Polato 15 Dicembre 2015

Introduzione all ambiente MATLAB. Richiami II. Calcolo Numerico - A.A. 2008/09

Algoritmi, Strutture Dati e Programmi. UD 1.d: Dati e Tipi di Dato

Problema. Vettori e matrici. Vettori. Vettori

Calcolo delle Probabilità Soluzioni 2. Calcolo combinatorio

ARRAY E STRINGHE. ESERCIZIO 2 Scrivere un programma che calcola il numero di doppie e di dittonghi (2 vocali vicine) presenti in una stringa.

AL220 - Gruppi, Anelli e Campi

Strutture di controllo iterative

Laboratorio 8. Programmazione - CdS Matematica. Marco Virgulin 13 Gennaio 2015

STRUTTURE DI CONTROLLO DEL C++

Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale

I S T I T U T O T E C N I C O I N D U S T R I A L E S T A T A L E

3 Costrutti while, for e switch

Laboratorio Progettazione Web Il linguaggio PHP Le Istruzioni. Andrea Marchetti IIT-CNR AA 2014/2015

PREPARAZIONE PER SECONDA PROVA IN ITINERE Esercizio 1 SULLA MODELLAZIONE DEI DATI

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

18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Errori frequenti Cicli iterativi Array. Cicli e array. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A.

MATLAB (II parte) Commenti. Input/Output (I/O) Istruzioni di Input/Output (I/O)

= < < < < < Matematica 1

Laboratorio di Programmazione: Linguaggio C Lezione 9 del 27 novembre 2013

Esercizi Capitolo 7 - Hash

Strutture di Controllo

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

Il tipo Text. N. Del Buono

LEZIONE 1 C =

RISOLUZIONE DI SISTEMI LINEARI

Array in Fortran 90. Ing. Luca De Santis. Anno accademico 2006/2007. DIS - Dipartimento di informatica e sistemistica

Gli Array. Dichiarazione di un array

Problema: dati i voti di tutti gli studenti di una classe determinare il voto medio della classe.

- Esercitazione IV Programmazione C Funzioni Alessandro Saetti

Transcript:

Permutazioni e Gioco del 15 Dott.ssa Giovanna Rosone

Permutazione Una permutazione è un modo di combinare n oggetti distinti scambiandoli di posizione Ci sono essenzialmente due notazioni per scrivere una permutazione. Possono essere descritte in forma esplicita elencando su due righe le lettere (in ordine) e le lettere loro associate: in forma di cicli. Un ciclo è una lista di indici fra parentesi e conveniamo che rappresenti la permutazione che associa ad ogni indice nel ciclo quello successivo. Ad esempio: 1 2 1 5 5 3 2 4 4 3 1 4 3 1 2 5 2 2 5 3 4 4 3 5 1

Generare una permutazione random Dato un numero n generare una permutazione random dei numeri da 1 ad n. In pascal, la fuzione Random(n) restituisce un numero compreso tra 0 e n-1, scelto in modo casuale. Perché è necessaria la procedura Randomize, che resetta il generatore di numeri casuali? Che significa?

Generatore di numeri Pseudo-Casuali Genera una sequenza che appare casuale, ma che in realtà non lo è perchè scaturisce da un processo deterministico. Le sequenze di numeri pseudo-casuali vengono solitamente generate da un computer.

Matrice vettore 13 10 11 6 16 7 4 8 1 12 14 9 3 15 2 5 Matrice N x N 13 10 11 6 16 7 4 8 1 12 14 9 3 15 2 5 13 10 11 6 16 7 4 8 1 12 14 9 3 15 2 5 Vettore con N x N elementi

In generale: Matrice vettore 1 2 j n-1 n 1 2 i 1 2 k n*m m-1 m For i:=1 to m do for j:=1 to n do begin k:=(i-1)*n + j; vett[k] := mat[i,j]; end;

In generale: vettore 1 2 Matrice 1 2 j n-1 n 1 2 k n*m Soluzione 1: For i:=1 to m do for j:=1 to n do begin k:=(i-1)*n + j; vett[k] := mat[i,j]; end; i m-1 m Soluzione 2: For k:=1 to n*m do begin i:=(k-1) div m + 1; j:=(k-1) mod m + 1; mat[i,j] := vett[k] ; end;

Gioco del 15 Generare un vettore con numeri distinti casuali da 1 ad n*n, dove n=4 6 10 8 7 12 1 13 9 4 14 5 15 11 2 3 16 Come possiamo fare?

Prima strategia non funzionante Estraiamo un numero con la funziona random e lo mettiamo nel vettore. Esempio estraiamo il 13. Vettore di interi: V Siccome voglio numeri distinti, uso un vettore ausiliare a valori booleani, per tenere traccia dei numeri già inseriti nel vettore V. Vettore di booleani: B 13 Se B[i]=0, inserisco il numero estratto in V Se B[i]=1, non lo inserisco in V ed estraggo un altro numero. 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 Perché non funziona nel nostro caso?

2 Strategia: Procediamo per scambi Partiamo dall array ordinato ed effettuiamo degli scambi. Scambiamo ogni elemento in posizione i del vettore con un elemento nella posizione x scelta casualmente (x i). for i:=n*n downto 2 do //Per ogni elemento begin x:= random(i)+1; //Generare 1 <= x <= i scambia (v[i], v[x]); end;

Esempio for i:=n*n downto 2 do begin x:= random(i)+1; scambia (v[i], v[x]); end; //Per ogni elemento //Generare 1 <= x <= i i=16 x:=random(16)+1. Esempio x:=3+1=4 Scambia v[16] con v[4] 1 2 3 16 5 6 7 8 9 10 11 12 13 14 15 4 i=15 x:=random(15)+1. Esempio x:=13+1=14 Scambia v[15] con v[14] 1 2 3 16 5 6 7 8 9 10 11 12 13 15 14 4 Finché i=2 x:=random(2)+1. Esempio x può essere 1 o 2 Scambia v[2] con v[x]

Schema: Introduzione al Gioco del 15 Creare un vettore di 4x4=16 elementi contenente i numeri da 1 a 16 ripetuti una e una sola volta in ordine casuale (partire da un vettore ordinato); Sistemare gli elementi di tale vettore in una matrice 4x4; Visualizzare la matrice. Verifica se la matrice è ordinata.

//Inizializzazione del vettore ordinato Procedure creavettoreordinato(var vettord: vettore); Var i: integer; begin End; for i:=1 to n*n do vettord[i]:=i; Procedure creavettorerandom(var vettrand: vettore); Var i: integer; Begin End; creavettoreordinato (vettrand); for i:=n*n downto 2 do begin x:= random(i)+1; //Deve generare 1 <= x <= i end; scambia (v[i], v[x]); Procedure creamatricerandom(vettrand: vettore; var mat: matrice); Var i,j: integer; Begin End; for i:=1 to n do for j:=1 to n do //Main mat[i,j]:= vettrand[(i-1)*n + j]; //Sistema la permutazione nella matrice Begin creavettoreramdom(a); creamatriceramdom(m); visualizzamatrice (M); end;.

Gioco del 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Non tutte le permutazioni portano ad una soluzione del gioco. Il gioco è risolubile solo per le permutazioni pari.

Parità della permutazione Se la cella contenente il numero i compare prima di k numeri minori di i allora chiamiamo questa situazione un inversione di ordine k e la chiamiamo k_i. I numeri vanno letti da destra a sinistra e dall'alto in basso come se fossero in un unica striscia. Se la somma dei k_i è pari, il gioco è risolvibile, altrimenti non lo è.

Esempio 13 10 11 6 5 7 4 8 1 12 14 9 3 15 2 16 Le inversioni per ogni numero sono rispettivamente: 12, 9, 9, 5, 4, 4, 3, 3, 0, 3, 3, 2, 1, 1, e 0. La loro somma N = 59, dispari. Dunque il gioco non può essere risolto.