Il problemsolving Gianpiero Cabodi e Paolo Camurati Dip
Il problem-solving Gianpiero Cabodi e Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino A. A. 2004/2005 14 Il problem-solving
LIFE: il gioco della vita Evoluzione di una colonia di microorganismi in una coltura (griglia di celle) n Generazione: configurazione di microorganismi nelle celle n Evoluzione: regole per la nascita e la morte di microorganismi: da una generazione a quella successiva n Terminazione: generazione stabile o raggiunto numero massimo di generazioni. n A. A. 2004/2005 14 Il problem-solving 2
Regole di evoluzione Se una cella alla i-esima generazione è piena, alla i+1 -esima sarà: A. vuota se nelle 8 celle adiacenti ci sono meno di 3 microorganismi alla generazione iesima (morte per isolamento) B. vuota se nelle 8 celle adiacenti ci sono più di 4 microorganismi alla generazione iesima (morte per sovraffollamento) n piena se nelle 8 celle adiacenti ci sono o 3 o 4 microorganismi alla generazione i-esima (sopravvivenza). A. A. 2004/2005 14 Il problem-solving 3
Se una cella alla i-esima generazione è vuota, alla i+1 -esima sarà: n piena se nelle 8 celle adiacenti ci sono esattamente 3 microorganismi (nascita) n vuota altrimenti. A. A. 2004/2005 14 Il problem-solving 4
Esempio generazione i-esima generazione i+1 -esima morte per isolamento A. A. 2004/2005 14 Il problem-solving 5
generazione i-esima generazione i+1 -esima morte per sovraffollamento A. A. 2004/2005 14 Il problem-solving 6
generazione i-esima generazione i+1 -esima sopravvivenza A. A. 2004/2005 14 Il problem-solving 7
generazione i-esima generazione i+1 -esima nascita A. A. 2004/2005 14 Il problem-solving 8
generazione i-esima stabilità A. A. 2004/2005 generazione i+1 -esima generazione i-esima = generazione i+1 -esima 14 Il problem-solving 9
Algoritmo while (continua) /* calcola una nuova generazione */ cancella penultima generazione scambia ultima e penultima generazione per tutte le righe i per tutte le colonne j applica le regole del gioco alla casella (i, j) A. A. 2004/2005 14 Il problem-solving 10
Strutture dati Concettualmente: struttura matriciale in grado di ricordare la generazione i-esima e quella i+1 -esima. n Soluzione 1: matrice non sparsa n matrice 2* MAXR * MAXC di informazioni 0/1 (assenza/presenza di organismo) per generazione i-esima e i+1 -esima n occupazione di memoria S(n) = O(MAXR*MAXC) = O(n 2) n complessità delle operazioni: accesso alla generica casella (i, j) T(n) = O(1) A. A. 2004/2005 14 Il problem-solving 11
n Soluzione 2: matrice sparsa: n array di liste, una per riga di informazioni 0/1 (assenza/presenza di organismo), generazione i-esima e i+1 -esima n occupazione di memoria: definendo un fattore di riempimento 1 S(n) = O(MAXR + *MAXR*MAXC) vantaggioso per pochi microorganismi n complessità delle operazioni: accesso alla generica casella (i, j) T(n) = O( *MAXC) A. A. 2004/2005 14 Il problem-solving 12
Complessità T(n) = O(n_generazioni * MAXR * MAXC * costo applicazione regola) Il costo dell’applicazione regola è O(1) con la matrice non sparsa, O( *MAXC) per la matrice sparsa. A. A. 2004/2005 14 Il problem-solving 13
Conteggio dei vicini Conteggio delle caselle adiacenti mediante due vettori a e b che contengono offset precalcolati: -1, -1 -1, 0 -1, 1 0, -1 i, j 0, 1 1, -1 1, 0 1, 1 A. A. 2004/2005 a 0 1 1 1 0 -1 -1 -1 b 1 1 0 -1 -1 -1 0 1 14 Il problem-solving 14
Alternativa: for (dx = -1; dx<=1; dx++) for (dy = -1; dy<=1; dy++) if (dx!=0 || dy!=0) { xx = x+dx; yy = y+dy; accedi a casella (xx, yy) } A. A. 2004/2005 14 Il problem-solving 15
Soluzione 1 A. A. 2004/2005 14 Il problem-solving 16
Soluzione 2 E’ noto che le inserzioni su una riga vengono fatte per colonne crescenti. Anziché inserire in lista ordinata, si inserisce in coda e si garantisce l’ordinamento delle liste. Si potrebbero considerare solo le caselle vive o adiacenti ad almeno una casella viva. Complessità ridotta di fattore , ma codice più complicato. A. A. 2004/2005 14 Il problem-solving 17
- Slides: 17