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
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 3
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 4
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 5
Algoritmo numerico Un algoritmo per risolvere un sistema di equazioni lineari in due incognite: a a 1 2 x x b 1 b 2 y y c 1 c 2 Fondamenti dell'informatica 6
Soluzioni x c b 1 2 c 2 b 1 a b 1 2 a 2 b 1 y a c 1 2 a 2 c 1 a b 1 2 a 2 b 1 Fondamenti dell'informatica 7
Soluzioni possibili Per qualsiasi scelta dei coefficienti: a,,,, 1 2 1 2 1, a b b c c 2 Ammesso che: a b a b 1 2 2 1 0 Fondamenti dell'informatica 8
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. f A x f A Fondamenti dell'informatica 9
Problema Def.: Un Problema è una funzione P : definita su un insieme D I di elementi che chiamiamo istanze, ed a valori su un insieme di soluzioni. D S D I D S Diciamo che un algoritmo A risolve un problema P se P x f x, per ogni A istanza. x Fondamenti dell'informatica 10
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 11
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 12
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 13
Efficienza dell algoritmo Def.: Un algoritmo è efficiente se fa un uso contenuto delle risorse di calcolo a sua disposizione. Fondamenti dell'informatica 14
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 15
Scelta del modello di calcolo 1. Capacità espressiva del modello in relazione al problema assegnato; 2. Livello di astrazione; 3. Generalità. Fondamenti dell'informatica 16
Irrisolubilità Def.: Un problema è non risolubile algoritmicamente se nessun procedimento di calcolo è in grado di fornire la soluzione in tempo finito. Fondamenti dell'informatica 17
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 18
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 19
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 20
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 21
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 Fondamenti dell'informatica 22
Algoritmi dei giochi
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 24
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 25
Strategia vincente 1. A raccoglie 2 oggetti. 2. B raccoglie K oggetti (k 3) 3. A raccoglie 4 K oggetti Fondamenti dell'informatica 26
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 27
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 Fondamenti dell'informatica 28
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
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 34
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 35
Teorema: Strategia vincente In ogni gioco che soddisfi le proprietà da 1 a 5 già definite, esiste una strategia vincente per uno dei giocatori. Fondamenti dell'informatica 36
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
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 38
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 39
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 40
Albero di un gioco x x x x x x x x x x O x O x O x O x x O x O x x x O O O x x x O O O x x x x x O x x x O O 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 41
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 42
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 43
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 44
Albero del gioco del sei 6 A B B B B B 5 6 6 6 6 6 4 3 2 A A A 6 6 6 5 5 5 5 4 4 5 4 5 5 6 A 1 2 A A 3 3 4 6 6 6 B A B A B A B A Fondamenti dell'informatica 45
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 46
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 47
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 48
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 49
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 50
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 51
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 52
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 53
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 54
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 55
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 56
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 57
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 58
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 59
Rappresentazione grafica H C E I M B D N L A F K Fondamenti dell'informatica 60
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 61
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 62
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 63
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 64
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 65
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 66
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 67
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 68
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 69
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 70
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 71
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 72
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 73
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. Fondamenti dell'informatica 74