Considera che TicTacToe ha 9 possibili mosse per il primo giocatore, 8 per il secondo e così via. In teoria sarebbero quindi 9! mosse, ma nella pratica termina prima (non tutte le partite richiedono 9 mosse). Le simulazioni sono molte per noi , per rappresentarle su carta, ma non sono così tante. Quindi la potatura avrà un impatto inferiore.
Questo è ciò che intendeva dire rctimelines presumo.
Tornando all'algoritmo,
ed andando molto OT, diciamo semplificando che se ti trovi a dover valutare un nodo MIN allora è importante che il valore beta del primo figlio
non sia minore di alpha; se lo è, è inutile verificare l'altro nodo.
Immagina, semplificando molto la struttura, un albero di questo tipo:
B è un nodo MAX, mentre C e D sono MIN.
Si può quindi dire che al livello di MAX lo scopo è considerare il figlio (C o D) con valore maggiore. I valori di alpha e beta sono rispettivamente -inf e +inf.
Ipotizziamo di essere alla foglia C, e di trovare il valore 4. E' necessario considerare max(-inf, 4) che restituirà ovviamente 4.
Ora la scelta: è necessario guardare l'altro figlio, ovvero D? Per saperlo si deve testare questo valore, ed ovviamente beta < alpha torna falso (beta è ancora +inf, mentre alpha è ora 4).
Si valuta quindi D, e si scopre il valore 7. A questo punto max(4, 7) restituisce 7, e questo è il valore del nodo B.
Immagina una situazione analoga, ma più in profondità nell'albero. Quando il valore di B verrebbe restituito, questo diventerebbe il nuovo valore di beta del nodo padre. Supponi quindi - scoprendo un altra parte di albero - di avere:
Codice:
A
/ \
B E
/ \ / \
C D F G
A questo punto A ha quindi beta = 7, e di conseguenza passa questo valore ad E, che vedrà beta=7 ed alpha = -inf.
Prendiamo quindi i figli, iniziando da F; supponiamo di trovare il valore 10. Discorso analogo a prima alpha = max(-inf, 10), che restituirà 10. Adesso E avrà un beta = 7 e alpha = 10. La condizione valutata sul nodo B, in questo caso diventa vera e ci fa ignorare il valore di G (potando quindi il ramo che porta a G).
Il valore che viene quindi restituito ad A è beta=10. Il nodo A avrà di conseguenza beta=10 e alpha = 7 ed il valore di A è quindi min(7, 10), ovvero 7.
P.S. se hai altre domande apri un altro topic, quotando anche il contenuto ed eventualmente linkando questo; ti rispondo volentieri, ma qui si sta andando parecchio OT. ;)
pps. dovrebbero vedersi decentemente gli "alberi", spero...