presentazione corso di formazione · etimologia della parola: algoritmo •la parola algoritmo ha...
Post on 16-Feb-2019
221 Views
Preview:
TRANSCRIPT
Fondamenti dell’Informatica
Prof.ssa E. Gentile Informatica e Comunicazione Digitale - sede di Taranto
a.a. 2015-2016
Etimologia della parola: Algoritmo
• La parola algoritmo ha origine nel Medio
Oriente. Proviene dall’ultima parte del
nome dello studioso persiano
Abu Jàfar Mohammed Ibn Musa Al-Knowarizmi
• Il suo testo di aritmetica (825 DC circa)
esercitò una grande influenza nei secoli
successivi
Fondamenti dell'Informatica 2
Fondamenti dell'Informatica 3
Definizione di Algoritmo
• Def.: Per Algoritmo si intende un elenco
di istruzioni che specificano una serie di
operazioni con le quali è possibile
risolvere ogni problema di un dato tipo.
Fondamenti dell'Informatica 4
Algoritmo Euclideo
• Dati due numeri positivi a e b, trovare il
loro massimo comune divisore.
• Il Massimo Comune Divisore di due (o
più) numeri è il numero naturale più
grande per il quale possono entrambi
essere divisi.
Fondamenti dell'Informatica 5
Istruzioni
1. Considerare la coppia di numeri a, b.
2. Confrontare i due numeri considerati (determinare se il
primo è uguale, maggiore o minore del secondo).
3. Se i due numeri sono uguali, ognuno di essi fornisce il
risultato richiesto; il calcolo si arresta. Altrimenti
continua.
4. Se il primo numero è minore del secondo, scambiare i
due numeri.
5. Sottrarre il secondo numero dal primo e rimpiazzare i due
numeri considerati rispettivamente col sottraendo e con
la differenza. Ritornare alla istruzione 2.
Fondamenti dell'Informatica 6
Algoritmo numerico
•Un algoritmo per risolvere un sistema di
equazioni lineari in due incognite:
222
111
cybxa
cybxa
Fondamenti dell'Informatica 7
Soluzioni
1221
1221
baba
cacay
1221
1221
baba
bcbcx
Fondamenti dell'Informatica 8
Soluzioni possibili
• Per qualsiasi scelta dei coefficienti:
• Ammesso che:
212121 ,,,,, ccbbaa
01221 baba
Fondamenti dell'Informatica 9
Algoritmo come funzione
• Un algoritmo definisce implicitamente una funzione
dall’insieme dei dati di ingresso all’insieme dei dati di
uscita. Al tempo stesso indica un procedimento
effettivo che permette di determinare, per ogni
possibile configurazione in ingresso, i corrispondenti
valori in uscita.
• Def.: Dato un algoritmo A, indichiamo con la
funzione che associa ad ogni valore in ingresso il
corrispondente valore in uscita .
Af
xfA
Fondamenti dell'Informatica 10
Problema Def.:
• Un Problema è una funzione
definita su un insieme di elementi
che chiamiamo istanze, ed a valori su un
insieme di soluzioni.
• Diciamo che un algoritmo A risolve un
problema P se , per ogni
istanza .
SI DDP :
ID
SD
xfxP A
x
Fondamenti dell'Informatica 11
Programma
• «Un programma è l’esposizione di un algoritmo in un
linguaggio accuratamente definito. Quindi, il
programma di un calcolatore rappresenta un
algoritmo, per quanto l’algoritmo stesso sia un
costrutto intelligente che esiste indipendentemente
da qualsiasi rappresentazione. Allo stesso modo, il
concetto di “numero 2” esiste nella nostra mente
anche quando non sia espresso graficamente.»
(D.E. Knuth – Fundamental Algorithms vol I,
The Art of Computer Programming, 1968)
Fondamenti dell'Informatica 12
Costo di calcolo
• Def.: Il costo relativo all’esecuzione di
un programma viene definito come la
quantità di risorse di calcolo che il
programma utilizza durante
l’esecuzione.
Fondamenti dell'Informatica 13
Risorse di calcolo
• Le risorse di calcolo a disposizione del
programma sono:
1. Il Tempo utilizzato per eseguire l’algoritmo;
2. Lo Spazio di lavoro utilizzato per memorizzare i risultati intermedi; (memoria)
3. Il Numero degli esecutori, se più esecutori collaborano per risolvere lo stesso problema (processori).
Fondamenti dell'Informatica 14
Efficienza dell’algoritmo
• Def.: Un algoritmo è efficiente se fa un
uso contenuto delle risorse di calcolo a
sua disposizione.
Fondamenti dell'Informatica 15
Modelli di calcolo
• Def.: Un modello di calcolo è
semplicemente una astrazione di un
esecutore reale, in cui si omettono
dettagli irrilevanti allo studio di un
algoritmo per risolvere un problema.
Fondamenti dell'Informatica 16
Scelta del modello di calcolo
1. Capacità espressiva del modello in
relazione al problema assegnato;
2. Livello di astrazione;
3. Generalità.
Fondamenti dell'Informatica 17
Irrisolubilità
• Def.: Un problema è non risolubile
algoritmicamente se nessun
procedimento di calcolo è in grado di
fornire la soluzione in tempo finito.
Fondamenti dell'Informatica 18
Problemi risolubili
• Si considera “risolti” una classe di
problemi quando si è trovato un
algoritmo per risolverli.
• In alcuni casi se non è possibile risolvere
problemi di un dato tipo è possibile
individuare dei casi particolari nei quali
ciò invece è possibile.
Fondamenti dell'Informatica 19
Intrattabilità
• Def.: Un problema è intrattabile se
qualunque algoritmo che lo risolva
richieda una quantità molto elevata di
risorse.
• Per esempio, alcuni giochi sono
considerati intrattabili
Fondamenti dell'Informatica 20
Algoritmi Deterministici
• Un algoritmo deve essere dato sotto forma di
una lista finita di istruzioni che specificano il
procedimento esatto da eseguire in ogni passo
del calcolo. In altri termini, il calcolo non
dipende da chi lo esegue; esso è un processo
deterministico che può essere ripetuto con
successo da chiunque in qualunque momento.
Fondamenti dell'Informatica 21
Generalità degli Algoritmi
• Un algoritmo è un’unica lista di istruzioni le
quali definiscono il calcolo che può essere
eseguito su un insieme qualunque di dati
iniziali, e che in ogni caso fornisce il risultato
corretto. In altre parole, un algoritmo indica
come risolvere non un solo problema
particolare, ma un’intera classe di problemi
simili.
Fondamenti dell'Informatica 22
Definizione di Knuth
• L’Algoritmo è un insieme di regole (o
istruzioni) avente le seguenti
caratteristiche:
− Finito
− Non Ambiguo
− Dati di ingresso precisi
− Fornisce un risultato
− Eseguibile
Algoritmi dei giochi
Fondamenti dell'Informatica 24
Algoritmi per giochi
• Un gioco è la descrizione di una situazione in cui un
certo numero di giocatori ha bisogno di prendere
decisioni che si influenzano vicendevolmente.
• Una soluzione è la descrizione formale delle azioni
che i giocatori possono o devono intraprendere e delle
situazioni in cui si vengono a trovare dopo aver
eseguito una particolare azione.
Fondamenti dell'Informatica 25
Il gioco dell’undici
• Undici oggetti sono su una tavola. I due
giocatori si alternano nel raccogliere 1,
2 o 3 oggetti finché non restano più
oggetti sul tavolo.
• Il giocatore costretto a raccogliere
l’ultimo oggetto perde.
Fondamenti dell'Informatica 26
Strategia vincente
1. A raccoglie 2 oggetti.
2. B raccoglie K oggetti (k ≤ 3)
3. A raccoglie 4–K oggetti
Fondamenti dell'Informatica 27
Gioco del pari
• Il gioco comincia con 27 oggetti su una
tavola. Alternandosi, i giocatori
raccolgono ogni volta da 1 a 4
fiammiferi. Vince chi ha in mano un
numero pari di oggetti quando questi
sono stati tutti raccolti.
Fondamenti dell'Informatica 28
Strategia vincente
1. A raccoglie 2 oggetti
2. Sia r il resto ottenuto dividendo per 6 il numero di
oggetti ancora da raccogliere.
3. Se B ha un numero pari di oggetti: 1. Se r = 2, 3, 4 o 5 allora A raccoglie, rispettivamente 1, 2, 3
o 4 oggetti
4. Se B ha un numero dispari di oggetti: 1. Se r = 0, 1, 2 o 3 e se sulla tavola restano ancora almeno 4
oggetti, allora A raccoglie, rispettivamente 1, 2, 3 o 4 oggetti
2. Se r = 4 allora A raccoglie 4 oggetti
3. Se sulla tavola restano 1 o 3 oggetti allora A li raccoglie tutti
La Dama Unidimensionale
Regole di gioco:
• I due giocatori dispongono di una pedina (bianca o nera) ciascuno, che sono collocate nelle
caselle estreme della scacchiera (una sola riga di sei caselle).
• I giocatori muovono i pezzi alternativamente. Inizia il bianco.
• Con la prima mossa il giocatore può spostare la sua pedina di una o due caselle; in tutte le
mosse che seguono può spostarla di una sola casella.
• Se la casella successiva è occupata dalla pedina dell’avversario, il giocatore deve scavalcarla.
• Vince chi riesce a collocare per primo la sua pedina all’altra estremità della scacchiera,
purché il suo avversario non lo faccia alla mossa successiva. In quest’ultimo caso infatti la
partita termina con un pareggio.
Fondamenti dell'Informatica 29
Albero della dama unidimensionale
Fondamenti dell'Informatica 30
Esapedina
• L’esapedina si gioca su una scacchiera 3x3 con tre pedine da
entrambe le parti disposte sulla prima e sull’ultima fila della
scacchiera.
• Sono permessi solamente due tipi di mossa:
− 1. Una pedina può avanzare di un quadrato fino a un
quadrato vuoto.
− 2. Una pedina può catturare una pedina nemica
muovendosi diagonalmente di un quadrato, a destra o a
sinistra. Il pezzo catturato viene tolto dalla scacchiera.
• Si vince la partita in uno dei seguenti modi:
− 1. facendo avanzare una pedina fino alla terza riga;
− 2. catturando tutti i pezzi avversari;
− 3. arrivando ad una situazione in cui l’avversario non può
muovere (negli scacchi si avrebbe patta per stallo).
• Le mosse dei giocatori si alternano e ognuno muove un pezzo
alla volta.
• Il primo a muovere è il nero.
Fondamenti dell'Informatica 31
Primo caso
Fondamenti dell'Informatica 32
Secondo caso
Fondamenti dell'Informatica 33
Fondamenti dell'Informatica 34
Proprietà dei giochi
1. Il gioco è condotto da due giocatori che
eseguono alternativamente una mossa
2. Il gioco termina con esattamente uno di due
possibili risultati: 1. O vince A il giocatore che gioca per primo
2. O vince B l’avversario
3. Ogni mossa consiste in una scelta da parte
del giocatore di una mossa tra un insieme di
mosse possibili
Fondamenti dell'Informatica 35
Proprietà dei giochi
4. Ad ogni istante del gioco, i giocatori
sono informati completamente su tutte
le mosse già compiute e su tutte quelle
che potranno venir fatte
5. Esiste un limite superiore per il numero
di mosse in una partita
Fondamenti dell'Informatica 36
Teorema: Strategia vincente
• In ogni gioco che soddisfi le proprietà
da 1 a 5 già definite, esiste una
strategia vincente per uno dei
giocatori.
Classificazione dei giochi
• Cooperazione
− Giochi non cooperativi
− Giochi cooperativi
• Informazione
− Giochi ad informazione perfetta
− Giochi ad informazione imperfetta
• Tempo
− Giochi strategici normali
− Giochi strategici a conoscenza successiva
Fondamenti dell'Informatica 37
Fondamenti dell'Informatica 38
Giochi combinatori
• Sono giochi a 2 giocatori
• I giocatori alternano le proprie mosse
• Somma zero: un giocatore vince nella misura in cui
l’altro perde
• Informazione perfetta: i due giocatori conoscono
completamente lo stato del gioco ogni volta che
muovono; nessuna informazione è nascosta ad uno dei
due giocatori
• Deterministici: nessun elemento di casualità
• Finiti: il numero di scelte possibili ad ogni mossa è
finito, e il gioco dura un numero finito di mosse
Fondamenti dell'Informatica 39
Come giocare
• Un possibile approccio ad un gioco combinatorio:
− Considera tutte le mosse ammissibili nello stato iniziale
− Calcola la nuova posizione risultante da ogni mossa
− Valuta ogni posizione risultante e determina la migliore
− Gioca la mossa corrispondente
− Attendi la mossa dell’avversario e ricomincia
• Difficoltà
− Rappresentazione della base di gioco
− Generazione di tutte le posizioni risultanti
− Valutazione di una posizione
Fondamenti dell'Informatica 40
Funzione di valutazione
• Una funzione di valutazione viene usata per
stimare la bontà di una situazione di gioco
• Per l’assunzione di somma nulla, una singola
funzione è sufficiente a valutare la situazione
di entrambi i giocatori
− f(s)>0: la posizione s è buona per il primo giocatore e cattiva per il secondo
− f(s)<0: la posizione s è cattiva per il primo giocatore e buona per il secondo
− f(s)=0: la posizione s è neutra
Fondamenti dell'Informatica 41
Albero di un gioco
x x x
x x x x x x
x x x O O O
O O O
O
O
O
O O
O O
O
O
x
x x x
x
x
x x
x
x x
x x
x
x x
x x
… … … …
…
…
…
f(s) =+1 se la posizione è vincente per X
f(s) =-1 se la posizione è vincente per O
f(s) = 0 se la posizione è patta
Fondamenti dell'Informatica 42
Albero del gioco
• I vertici rappresentano le diverse
situazioni che si possono presentare in
una partita
• I rami rappresentano le possibili scelte
che un giocatore può fare
Fondamenti dell'Informatica 43
Potatura alfa-beta
• Possiamo migliorare l’efficienza
dell’albero con una potatura
• Idea di base:
− Se hai un’idea che di certo non è buona non
perdere tempo per capire quanto sia cattiva
• Non valutiamo dei nodi che non è
necessario valutare
Fondamenti dell'Informatica 44
Gioco del sei
• Su una tavola ci sono 6 oggetti
• Ogni giocatore, a turno, ne sceglie uno o
due.
• Perde il giocatore che raccoglie l’ultimo
oggetto
Fondamenti dell'Informatica 45
B
A A A A A A
B B B B B
A
1 2
2
3
3 3 4
4 4
4
4 5 5 5 6
6 6 6 6 6 6 5 5 5 5
5 6 6 6 6 6
6
A
B
A
B
A
B
A
Albero del gioco del sei
Fondamenti dell'Informatica 46
Regole
• Il massimo livello in un albero viene
detto ordine. È uguale alla massima
lunghezza di una partita.
• I vertici di livello dispari corrispondono
alle mosse di A, quelli di livello pari alle
mosse di B.
Fondamenti dell'Informatica 47
Dimostrazione
• L’algoritmo è costruito per induzione
sulla lunghezza v della più lunga partita
possibile nel gioco (v è l’ordine
dell’albero)
• v=0: nessuna mossa.
• Se è vero per gli ordini ≤v dimostriamo
che è vero per v+1
Fondamenti dell'Informatica 48
Storia della Teoria dei Giochi
• 1912 Bermelo - gioco degli scacchi
• 1921 Borel – poker
• 1928 Von Neumann – giochi combinatori
• 1950 Nash – equilibrio nei giochi non a
somma zero
• 1966 Rapoport – giochi a 2 giocatori
Fondamenti dell'Informatica 49
Dilemma del prigioniero
• Due prigionieri accusati dello stesso
crimine hanno queste possibilità:
− Se solo uno dei due confessa, chi ha confessato evita la pena; l’altro però viene condannato a 7 anni di carcere;
− Se entrambi confessano, vengono entrambi condannati a 6 anni di carcere;
− Se nessuno dei due confessa, vengono entrambi condannati a 1 anno di carcere.
Fondamenti dell'Informatica 50
Dilemma del prigioniero
confessa non confessa
confessa (6,6) (0,7)
non confessa (7,0) (1,1)
• Se Confessa:
− Caso migliore 0 anni
− Caso peggiore 6 anni
• Se Non Confessa:
− Caso migliore 1 anno
− Casso peggiore 7 anni
Fondamenti dell'Informatica 51
Gioco del pollo
• Basato sulla sfida automobilistica del
film “Gioventù Bruciata”.
− se entrambi sterzano fanno entrambi una magra figura con gli amici
− Se uno sterza per primo e l’altro continua per un tratto di strada: uno fa la figura del pollo e l’altro guadagna il rispetto degli amici
− Se entrambi continuano, moriranno
Fondamenti dell'Informatica 52
Gioco del pollo
sterza continua
sterza (pari,pari) (pollo,vince)
continua (vince,pollo) (muore,muore)
• Il problema sta nel convincere l’altro che non si è disposti a
sterzare nonostante l’alto rischio implicito di questa scelta.
• La cooperazione in questo gioco è la soluzione migliore
Fondamenti dell'Informatica 53
Gioco dell’eroe
•L’eroe cerca il gesto eclatante
•Nessun altro deve compiere lo stesso gesto
coopera defeziona
coopera (1,1) (3,4)
defeziona (4,3) (2,2)
•La cooperazione ha il minimo vantaggio
Fondamenti dell'Informatica 54
Gioco del leader
•Uno sceglie il conflitto, l’altro si allea
coopera defeziona
coopera (2,2) (3,4)
defeziona (4,3) (1,1)
•Uno deve imporre la propria volontà all’altro
•La cooperazione è ottimale
Fondamenti dell'Informatica 55
Teorema di Nash
• Estendeva la teoria dei giochi ad un numero arbitrario
di partecipanti e dimostrava che, in certe condizioni,
esiste sempre una situazione di equilibrio che si
ottiene quando ciascun individuo sceglie la sua mossa
strategica in modo da massimizzare la sua funzione di
retribuzione.
• Tutti i giocatori possono così operare una scelta dalla
quale ciascuno trae un vantaggio o limita il suo
svantaggio al minimo
Fondamenti dell'Informatica 56
Equilibrio
• Equilibrio in Strategia dominante
− Io faccio meglio che posso
indipendentemente da ciò che fai tu
− Tu fai meglio che puoi indipendentemente da
ciò che faccio io
• Equilibrio di Nash
− Io faccio meglio che posso dato ciò che fai tu
− Tu fai meglio che puoi dato ciò che faccio io
Fondamenti dell'Informatica 57
Dilemma del viaggiatore
• Una compagnia aerea ha danneggiato due oggetti
preziosi identici che due viaggiatori avevano
acquistato durante un viaggio di piacere.
• Il comandante chiede ad ognuno di loro di indicare il
valore dell’oggetto compreso tra € 2,00 e € 100,00
precisando che:
− Rimborserà ad entrambi la cifra più bassa
− Premierà con € 2,00 chi ha espresso il valore più basso
− Ridurrà il rimborso di € 2,00 all’altro viaggiatore
Fondamenti dell'Informatica 58
Problema del commesso viaggiatore
• Un rappresentante deve consegnare della merce in
diversi paesi
• Attraverso il navigatore satellitare conosce
esattamente le distanze effettive presenti tra i paesi
• Si vuole minimizzare la distanza totale che occorre
percorrere per effettuare il giro completo dei clienti,
senza passare due volte per lo stesso paese e ritornare
alla località di partenza
Fondamenti dell'Informatica 59
Labirinto
• Possiamo immaginare un labirinto come
un sistema finito di nodi dai quali si
dipartono dei corridoi.
• Ogni corridoio congiunge due nodi che
vengono detti adiacenti.
• I nodi morti sono quelli da cui si diparte
un solo corridoio.
Fondamenti dell'Informatica 60
Rappresentazione grafica
A
B
C
D
F
E
H
I
K
N
M
L
Fondamenti dell'Informatica 61
Regola
• Diciamo che un nodo Y è accessibile da un
nodo X se esiste un cammino che conduce da X
a Y attraverso qualche successione di corridoi
intermedi.
• Se Y è accessibile da X allora esiste un
cammino semplice tra i due nodi, cioè un
cammino che non attraversa più di una volta
ciascun nodo.
Fondamenti dell'Informatica 62
Algoritmo del labirinto
• Corridoio:
− Verde: non è mai passato
− Giallo: è passato una volta
− Rosso: è passato due volte
• Modalità di passaggio:
− Svolgendo il filo (passa da verde a giallo)
− Riavvolgendo il filo (passa da giallo a rosso)
• Non è possibile passare in un corridoio rosso
Fondamenti dell'Informatica 63
Condizione dei Nodi
• Arrivo: si è raggiunta la meta
• Ciclo: esistono almeno due altri corridoi gialli
che si dipartono dal nodo
• Verde: Esiste almeno un corridoio verde che si
diparte dal nodo
• Partenza: Ci troviamo nel nodo iniziale
• Quinto caso: Non si verifica nessuna delle
condizioni precedenti
Fondamenti dell'Informatica 64
Metodo di ricerca
Condizione
1. Arrivo
2. Ciclo
3. Verde
4. Partenza
5. Quinto caso
Mossa
1. Stop
2. Riavvolgere il filo
3. Svolgere il filo
4. Stop
5. Riavvolgere il filo
Fondamenti dell'Informatica 65
Motivazioni del metodo
1. Qualunque sia la posizione di Partenza e di Arrivo
nel labirinto, alla fine, dopo un numero finito di
mosse, si deve raggiungere un ordine di Stop.
2. Se l’ordine di Stop giunge in Arrivo, il punto è
accessibile. Inoltre, siamo giunti attraverso un
cammino semplice e riavvolgendo il filo possiamo
tornare alla Partenza.
3. Se l’ordine di Stop giunge in Partenza, vuol dire che
l’Arrivo è inaccessibile.
Fondamenti dell'Informatica 66
Esempio 1
Numero della
mossa
Condizione
trovata
Mossa Corridoio scelto Stato dopo la
mossa
1 Verde Svolge AB Giallo
2 Verde Svolge BC Giallo
3 Verde Svolge CD Giallo
4 Verde Svolge DH Giallo
5 Verde Svolge HI Giallo
6 Quinto caso Riavvolge IH Rosso
7 Quinto caso Riavvolge HD Rosso
8 Verde Svolge DB Giallo
9 Ciclo Riavvolge BD Rosso
10 Verde Svolge DF Giallo
11 Arrivo Stop Stop Stop
Fondamenti dell'Informatica 67
Esempio 2
Numero della
mossa
Condizione
trovata
Mossa Corridoio scelto Stato dopo la
mossa
1 Verde Svolge KN Giallo
2 Verde Svolge NL Giallo
3 Verde Svolge LM Giallo
4 Verde Svolge MN Giallo
5 Ciclo Riavvolge NM Rosso
6 Quinto caso Riavvolge ML Rosso
7 Quinto caso Riavvolge LN Rosso
8 Quinto caso Riavvolge NK Rosso
9 Partenza Stop Stop Stop
Fondamenti dell'Informatica 68
La regola della destra
• Entra nel labirinto. Quando ti trovi a un nodo prendi il
ramo più a destra. Se arrivi a un vicolo cieco, ritorna
sui tuoi passi fino all'ultimo nodo e prendi il ramo più
a destra tra quelli ancora inesplorati.
• Il modo migliore per visualizzare questo algoritmo è
toccare con la mano destra il muro alla propria destra
per tutto il labirinto, senza saltare mai un ramo
situato alla propria destra.
• Naturalmente la "regola della sinistra" funziona
altrettanto bene. È solo necessario essere coerenti
una volta entrati nel labirinto.
Fondamenti dell'Informatica 69
Il metodo di Tremaux
• Entra nel labirinto. Dapprima vai dove ti pare, contrassegnando il
sentiero con un filo, o con sassolini, o molliche di pane, o con
qualsiasi cosa tu abbia a disposizione. Continua così finché arrivi:
− alla meta (se hai fortuna),
− oppure a un vicolo cieco,
− oppure a un nodo che avevi già attraversato in precedenza.
• Se arrivi a un vicolo cieco, ritorna al nodo precedente,
assicurandoti di contrassegnare il percorso anche a ritroso: in tal
modo, se entri ed esci da un vicolo cieco, questo avrà due piste
di briciole di pane. Ciò ti permetterà di evitarlo in futuro.
Nell'algoritmo di Tremaux non si esplora mai un ramo più di due
volte.
Fondamenti dell'Informatica 70
Il metodo di Tremaux
• Se arrivi a un nodo già attraversato, fai così: − se sei arrivato da un ramo fino ad allora inesplorato (una sola
pista di briciole di pane dietro di te) ripercorri quello stesso ramo fino al nodo precedente, altrimenti
− se c'è un ramo ancora inesplorato a partire dal nodo, prendi questa direzione, altrimenti:
− prendi qualsiasi ramo che sia stato percorso una sola volta.
• Queste regole esauriscono l'algoritmo di Tremaux.
Seguendole scrupolosamente farai un giro completo
del labirinto, attraversando ogni ramo due volte, in
ciascuna direzione. Ovviamente, puoi anche fermarti
quando raggiungi la meta, se non è necessario
percorrere l'intero labirinto.
Fondamenti dell'Informatica 71
Il metodo di Ore
• Entra nel labirinto. Se non sei già a un nodo, raggiungi
quello più vicino. Se non sai quale direzione conduca a
quello più vicino, vai a caso fino a incontrare un nodo.
Poi contrassegna in qualche maniera questo nodo: sarà
la tua casa base.
• Partendo dal nodo base, esplora ogni ramo che si
diparte da questo. Metti un contrassegno (ad esempio
un ciottolo) all'entrata di ciascun ramo quando
cominci a percorrerlo. Esplora ciascun ramo solo fino
al nodo successivo. Poi metti un ciottolo all'estremità
lontana del ramo e ritorna sui tuoi passi fino alla casa
base.
Fondamenti dell'Informatica 72
Il metodo di Ore – Prima fase
• Identifica i vicoli ciechi (ad es. con un ciottolo rosso, o
chiudendoli con uno spago). Una volta contrassegnato in questo
modo, un ramo potrà essere ignorato in futuro. Se un ramo gira
su se stesso e ritorna al nodo originario, contrassegnalo come un
vicolo cieco: è altrettanto privo di utilità.
• A te interessa individuare quei rami che conducono a nodi con
rami nuovi. Alla fine dell'esplorazione preliminare ciascun
percorso potenziale verso la meta ha un ciottolo a ciascuna
estremità, e tu ti trovi di nuovo al nodo base.
• Adesso esplora fino a una profondità di due nodi. Cammina lungo
ciascun ramo che non sia un vicolo cieco fino al nuovo nodo, ed
esplora allo stesso modo ciascun ramo che si diparte da questo.
Fondamenti dell'Informatica 73
Il metodo di Ore – Seconda fase
• Aggiungi un ciottolo a ciascuna estremità dei rami primari,
cosicché adesso avranno due ciottoli su ciascuna estremità, e
metti un ciottolo su ciascuna estremità dei nuovi rami secondari.
Ciò ti consentirà di ritrovare la strada fino al nodo base: il ramo
che conduce a quest'ultimo ha un ciottolo in più rispetto agli
altri.
• Come in precedenza, contrassegna le entrate dei vicoli ciechi e
dei percorsi circolari. Se un ramo conduce a un nodo già
esplorato (con almeno un ciottolo segnaletico) contrassegna
anche questo sentiero a entrambe le estremità. Alla fine sarai
tornato sui tuoi passi e ti ritroverai di nuovo al nodo base.
Fondamenti dell'Informatica 74
Il metodo di Ore – Terza fase
• Nella terza fase di esplorazione, spingiti fino a una
distanza di tre nodi dal nodo base, aggiungendo un
ciottolo a ciascuna estremità di ogni ramo esplorato.
• Prosegui l'esplorazione sempre più in profondità, fino
a raggiungere la meta.
• L'algoritmo di Ore ti permetterà di individuare la via
più breve verso la meta. Ovviamente l'andamento
dell'esplorazione non seguirà questa via più breve, ma
se, ad es., la via più breve attraversa cinque nodi
allora la troverai nella quinta fase dell'esplorazione, e
saprai che quella è la via più breve.
top related