Professional Documents
Culture Documents
PROYECTO
(JulioDE2016)
CasanovaS.1430032,gachetaS.0938596
{savacano_28@live.com
,sebastian.guacheta@correounivalle}
1.1ALGORITMOSPROBABILISTICOS
Los algoritmos probabilsticos o
probabilistas son aquellos que basan el
resultadodevueltoendecisionesaleatorias,
detalformaque,enpromedioseobtienen
unabuenasolucinalproblemaplanteado,
dadaunadistribucindedatosdeentrada.
AlgoritmosdeLasVegas,similaresalosde
Monte Carlo pero que nunca devuelven
unasolucinerrnea,conelinconveniente
de que pueden no terminar o devolver
solucin. Esto garantiza que la respuesta
sea la buena, pero no garantiza que el
algoritmo funcione. Como en los casos
anteriores, cuanto mayor es el tiempo
dedicado al clculo, ms fiable es la
solucin.Nodebeconfundirseestetipode
algoritmos con aquellos deterministas,
como el simplex en programacin lineal,
quesonmuyeficientesparalamayorade
los posibles datos de entrada pero
desastrosos para unos pocos. Ntese que
dichos algoritmos siempre devuelven una
solucincorrecta.
Proyecto:SuDominoku
1.1SUDOKUYSUDOMINOKU
El Sudoku es un rompecabezas que se
resuelve mediante lgica. La idea bsica
para completar los rompecabezas es
encontrar celdas para las en donde solo
cabe1candidato(nmerosdel1al9).
Larestriccionconsisteenqueslosepuede
usar cada nmero una sola vez en cada
fila, cada columna y cada uno de los
recuadrosde3x3.
Acontinuacinseexponenlastcnicasmas
comunesderesolucin.
disponiblealasiguienteceldadisponible.
Estocontinuarahastaquesedescubriera
unaduplicacin,encuyocaso,elsiguiente
valoralternativosecolocaraenelprimer
campoalterado.Enelcasodequeningn
valor cumpliera la restriccin se
retrocedera hasta la casilla anterior y se
probaranlossiguientesnmeros.
Aunque lejos de la eficiencia
computacional,estemtodoencontrarla
solucinsisepermiteelsuficientetiempo
de computacin. Un programa ms
eficientepodradejarunahuelladevalores
potenciales para las celdas, eliminando
valoresimposibleshastaqueslounvalor
quedase para una celda determinada.
Entoncesserellenaraesaceldayseusara
esainformacinparamseliminacionesy
as, sucesivamente hasta el final. Esto
emulara ms exactamente lo que un
agente humano hara sin el mtodo de
ensayoyerror.
EstrategiasdeResolucin
Tcnicasfciles
La mayor parte de Sudokus se pueden
resolvercondossencillastcnicas:
Tcnica1:Posicinnica
Tcnica2:Candidatosnicos
TcnicasMedias
Otrastcnicasqueinvolucranmasqueuna
obsrevacinsencilla,son:
Tcnica3:LneasdeCandidatos
Tcnica4:Parejasdobles
Tcnica5:Lneasmltiples
TcnicasAvanzadas
Siguiendolaprogresin,setiene:
Tcnica 6: Parejas o Tripletas
Desnudas
Tcnica 7: Parejas o Tripletas
Escondidas
TcnicasdeMaestro
Unavezdominadaslasanteriorestcnicas,
se pueden aplicar tcnicas ms
complicadas.
Tcnica8:XWing
Tcnica9:Swordfish
Tcnica10:ForcingChains
Resolucinporordenador
Para los programadores es relativamente
sencillo construir una bsqueda por el
mtodo de backtracking o "vuelta atrs".
sta asignara, tpicamente, un valor a la
primera celda disponible y entonces
continuar asignando el siguiente valor
Codificarlabsquedaparaimposibilidades
basadas en contingencias e incluso
mltiples contingencias (como sera
requeridoparalosSudokumsdifciles)es
bastantecomplejodeconstruiramano.De
cualquier modo, tales complicaciones son
innecesariassitodoloqueelprogramador
desea hacer es encontrar una solucin
eficientemente.
SudominoKu
El juego tiene la forma de un Sudoku
normal,esdecir,unagrillade99quedebe
serllenadausandosololosdgitosdel1al
9.Enunasolucinexitosa:
Cadafilatienequecontenertodoslosdel
1al9.
Cada columna tiene que contener todos
losdigitosdel1al9.
Cadareginde3x3tienequecontener
todoslosdgitosdel1al9.
Proyecto:SuDominoku
PeroparaunSuDominoku,nueveceldas
soninicializadasconlosnmerosdel1al
9.Estodeja72celdassininicializar.Ellas
son lenadas usando un conjunto de 36
piezasdedomin.Elconjuntoincluyeun
dominparacadaposiblepardenmeros
nicosdesdeel1hastael9(Ejemplo:1+
2,1+3,1+4,1+5,1+6,1+7,1+
8,1+9,2+3,2+4,2+5).
2SUDOMINOKU
2.1 Problema
EL proyecto SudominoKu consiste en
desarrollar un algoritmo que siguiendo la
naturaleza de un algoritmo de las Vegas genere
resultados eficientes, es decir, que los
resultados cuenten con una probabilidad de
xito superior a un valor deseado y el consumo
de recursos sea mnimo.
Proyecto:SuDominoku
}
}
nia=false;
printf("luego row %d col %d \n",row,col);
}
print(board);
}
----------------------------------int main() {
vector <int> numero;
if (board[r][c] != 0) {
canUse |= (1 << board[r][c]-1);
}
}
}
int cuenta=0;
for (int l = 0; l < 9; l++) {
if ((canUse >> l) & 1) {
cuenta++;
}}
// printf("cuenta %d \n",cuenta);
for(int y=0;y<1;y++){
for (int i = 0; i < 9; i++)
for (int j = 0; j < 9; j++)
board[i][j] = 0; //Crea la matriz
numero=lecturaFichero("input1.txt");
// read in the numbers
for (int i = 0; i < 9; i++) {
int row = numero[i]/9;
int col = numero[i]%9;
board[row][col] = i+1;
}
mInfo[row][col]=cuenta;
mCanUse[row][col]=canUse;
}}}
int maxValor = mInfo[0][0]; //obtengo la
casilla con mas informacion
for (int i = 0; i < 9; i++) {
for(int j=0;j<9;j++)
{
if (mInfo[i][j] > maxValor) {
maxValor = mInfo[i][j];
// printf("maxvalor %d \n",maxValor);
row=i;
col=j; }
}
}
canUse=mCanUse[row][col];
printf(" row %d col %d max
%d\n",row,col,maxValor);
srand (time(NULL));
while (!lugar){
int v= rand() % 8 + 0;
if (((canUse >> v) & 1) == 0) {
lugar=true;
board[row][col] = v+1;
4
Proyecto:SuDominoku
N Prue
N Aciertos /10
Input.txt
10
Input1.txt
Input2.txt
10
Input3.txt
Input4.txt
10
Promedio
Proyecto:SuDominoku
(Julio202016)
[1]http://dis.um.es/~domingo/apuntes/A
lgProPar/0607/AlgoritmosProbabilistas.
pdf
[2]Guia de Proyecto Simulacin
Computacional, Universidad del Valle,
2016