carlo23 ha scritto:Un buon algoritmo (ma solo per risolvere i sudoku, niente riguardo P vs NP) sarebbe di associare a ogni casella i possibili numeri che ci possono andare scritti (basandosi sulle caselle nello stesso quadrante, riga, colonna), scrivere un numero quando è l'unico possibile, usare un ciclo brute force tutte le volte che l'algoritmo va in stallo.
Eh sì, è un buon algoritmo in pratica, ma la cosa interessante risiede nelle seguenti osservazioni.
Cosa vuol dire, "scrivere un numero quando è l'unico possibile"? Qui sta il dilemma: come fai a dire se un numero è l'unico possibile? Chiaramente devi utilizzare risorse di calcolo, o uno schema di ragionamento preconfezionato che mostri che è davvero l'unico possibile. Ma a volte può succedere che sia possibile inserire un solo numero, ma che i tuoi criteri non siano abbastanza raffinati per accorgersene. Poi è chiaro che l'algoritmo funzionerà in pratica perché il problema è ridicolmente piccolo nelle dimensioni, ma sul fatto che sia un "buon algoritmo" ci sarebbe da discutere, perché magari usa la forza bruta in casi in cui un essere umano, con un ragionamento banale, verrebbe fuori in un battibaleno. E' questo il fascino del sudoku: sembra non esserci una strategia "intelligente", che eviti il ricorso alla forza bruta. Cioè, in un algoritmo, sembra sempre necessario inserire un ciclo "brute force", in cui vai alla cieca.