Problema das N-Rainhas

Slides:



Advertisements
Apresentações semelhantes
Programação em Java Prof. Maurício Braga
Advertisements

Método Simplex Resolução Algébrica
ESTRUTURA DE DADOS EXERCÍCIOS e MATRIZES
N Rainhas Descrição do Problema Satisfação de Restrições (CSP)
TÉCNICAS DE PROGRAMAÇÃO I
Exercício Exercício. Considere um algoritmo sequencial que busca um elemento em uma lista não ordenada a) Qual é a complexidade de tempo deste algoritmo.
Sistemas Lineares A X = B A 11 A 12 A A 1N X 1 =B 1 A 21 A 22 A A 2N X 2 B A N1 A N2 A N3... A.
CÁLCULO DA INVERSA DA BASE
Busca em Profundidade Para encontrar um caminho de solução Sol, de um dado nó para algum nó objetivo Se N é um nó objetivo, então Sol=[N] Se há um nó N1.
Segmentação de Escrita
Projeto e Análise de Algoritmos
SISTEMAS LINEARES Métodos Diretos: Método de Eliminação de Gauss
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Linguagem PHP Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
VI SBAI - Bauru Set/2003 APLICAÇÃO DE REDES NEURAIS DE
Transformação de Imagens
Computer Vision Transformação de Imagens Paulo Sérgio Rodrigues PEL205.
Capítulo 3 - Russell e Norvig
Missionários e Canibais
7 - Funções pré-definidas
Backtracking Katia Guimarães.
Programação Básica de Computadores 1
MATRIZES REAIS ( 2ª AULA ).
INF 1771 – Inteligência Artificial
1 Estruturas de Programação Estruturas Condicionais Aula 5 IF (expressão teste) then ou IF (expressão teste) then ELSE END IF SELECT CASE (exp_select)
Algoritmos e Estruturas de Dados I – Estruturas de Dados
Vinicius Ponte Machado
1 Introdução aos Agentes Inteligentes Flávia Barros.
Aula prática 6 Vetores e Matrizes
Introdução à Álgebra Linear Turma B1 Profa. Ana Maria Luz
Professora: Ana Cristina G. e Silva Natal-RN
Linguagem de Programação I Parte II
UNIVERSIDADE FEDERAL DE UBERLÂNDIA ENGENHARIA CIVIL INTRODUÇÃO À ALGORITMOS Professora: Fabíola Gonçalves.
Estrutura de dados, pseudocódigo
Ordenação em memória primária
Algoritmos 1º Semestre Materia: Informática Profº: Cristiano.
Fase de Elaboração: Fluxo de Análise Análise de Sistemas de Software Prof. Rodrigo Ribeiro.
Aprendizagem de Máquina “Learning a Neural Tree” Paulo Amorim - prfa.
Vetores Imagine que você tem que receber o nome e a nota de 50 alunos de uma escola, e depois listar o nome de cada um e a média final de cada aluno e.
ALGORITMOS E TECNICAS DE PROGRAMACAO II
Fundamentos de Programação
Dependência e Independência Linear - L.D. e L.I.
CONSIDERAÇÕES SOBRE BOMBAS DE FLUXO
Algoritmos e Estruturas de Dados I – Recursão
Algoritmos e Estruturas de Dados I – Recursão
PROBLEMA DO EMPACOTAMENTO
Construção e Análise de Algoritmos
Resolução de Problemas
Algoritmos e Estruturas de Dados I – Estruturas de Dados
Busca Combinatorial e Métodos de Heurística
Linguagem de Programação JAVA
1 Introdução aos Agentes Inteligentes Inventando Funções Heurísticas Flávia Barros.
Resolução de Problemas de Busca
Algoritmos e Estruturas de Dados I – Estruturas de Dados
1 Introdução aos Agentes Inteligentes Resolução de Problemas de Busca Flávia Barros.
Trabalho Prático 1 Estudo de Algoritmos de Busca de Soluções em Prolog
EXERCÍCIOS DE REVISÃO POTENCIAÇÃO
Exercícios de Fluxo em Redes
Teste.
Sistemas de Controle III N8SC3
INE5408 Estruturas de Dados Listas Encadeadas Simples.
1Unidade 06 - Matriz Algoritmos e Linguagens de Programação Matriz Prof.: Guilherme Baião S. Silva Adaptações Prof. Edwar Saliba Júnior Março de 2007.
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
Disciplina: Estrutura de dados e Algoritmos Docentes: MSc. Manuel Zunguze.
Teste.
Teste.
Teste.
Teste\. testes.
Algoritmos e Estruturas de Dados I
Transcrição da apresentação:

Problema das N-Rainhas Definição Colocar N rainhas em um tabuleiro N x N de forma que nenhuma seja atacada pelas outras. A forma geral de uma solução é uma permutação de um vetor de inteiros [1, . . . , N]. A solução para o problema de 8 rainhas mostrada abaixo é representada pelo vetor [4, 2, 7, 3, 6, 8, 5, 1].

Histórico

Complexidade

Testes em PROLOG Não é permitido abrir um nó que represente uma posição em uma linha já preenchida. Algoritmo 1: Teste das diagonais utilizando operador =\=. Eliminação automática de linhas e colunas já preenchidas. Algoritmo 2: Teste das diagonais utilizando operador abs. Eliminação automática de linhas e colunas já preenchidas. Algoritmo 3: Eliminação de linhas, colunas e diagonais já preenchidas. Não há teste de diagonais. Algoritmo 4: Inversão da lista de linhas candidatas.

Resultados

Conclusões O PROLOG conseguiu resolver instâncias de até 25 rainhas em menos de 1000 segundos (Amzi 3.4 - Pentium II 266 MHz - 128 Mb) Quando o número de rainhas é impar, a busca é bem mais rápida do que quando temos um número par de rainhas. A implementação em PROLOG é dependente dos operadores utilizados. O uso do operador abs, no lugar do =\= se mostrou vantajoso, sendo que a estrutura do programa permanece a mesma.

Programas Algoritmo 1 time(N):- timer(X), solve_Queens(N), timer(Y), Z is Y-X, write(Z). Queens(N,S):- make_list(N,L), move_safe(L,[],S). make_list(0,[]). make_list(N,[N|T]):- N>0, M is N-1, make_list(M,T). move_safe([],S,S). move_safe(L,Qs,S):- select(Q,L,R), safe(Q,1,Qs), move_safe(R,[Q|Qs],S). select(X,[X|T],T). select(X,[H|T],[H|T1]):- select(X,T,T1). safe(_,_,[]). safe(Q,D,[Q1|Qs]):- Q+D=\=Q1, Q-D=\=Q1, D1 is D+1, safe(Q,D1,Qs). solve_Queens(N):- Queens(N,S), print_sol(S,1,N). print_sol(S,M,N):- M>N. print_sol(S,M,N):- M=<N, print_row(M,S), M1 is M+1, print_sol(S,M1,N). print_row(_,[]):- nl. print_row(M,[Q|Qs]):- (M=Q, write(' Q '); M \= Q, write(' . ')), print_row(M,Qs).

Programas (cont.) Algoritmo 2 Algoritmo 3 safe(_,_,[]). safe(Q,D,[Q1|Qs]):- abs(Q+D-Q1)>0, abs(Q-D-Q1)>0, D1 is D+1, safe(Q,D1,Qs). Algoritmo 3 Queens(N,S):- gen(1,N,Dxy), Nu1 is 1-N, Nu2 is N-1, gen(Nu1,Nu2,Du), Nv2 is N+N, gen(2,Nv2,Dv), sol(S,Dxy,Dxy,Du,Dv). gen(N,N,[N]). gen(N1,N2,[N1|List]):- N1<N2, M is N1+1, gen(M,N2,List). sol([],[],Dy,Du,Dv). sol([Y|Ylist],[X|Dx1],Dy,Du,Dv):- del(Y,Dy,Dy1), U is X-Y, del(U,Du,Du1), V is X+Y, del(V,Dv,Dv1), sol(Ylist, Dx1, Dy1, Du1, Dv1). del(Item,[Item|List],List). del(Item,[First|List],[First|List1]):- del(Item,List,List1).

Programas (cont.) Algoritmo 4 move_safe([],S,S). move_safe(L,Qs,S):- select(Q,L,R), safe(Q,1,Qs), reverse(R,R1), move_safe(R1,[Q|Qs],S). reverse([],[]). reverse([First|Rest],Reversed):- reverse(Rest,ReversedRest),conc(ReversedRest,[First],Reversed). conc([],L,L). conc([X|L1],L2,[X|L3]):- conc(L1,L2,L3).

Exemplo ?- tempo(10). . . . . . . . . Q . . . . . . Q . . . . . . . Q . . . . . . . . . . . . Q . . . Q . . . . . . . . . . . . . . . . Q . . . Q . . . . . . . . . . . . Q . . . . . . . Q . . . . . . . . . . . . . . . . Q 0.330002 yes ?- queens(10,S). S = [5,7,9,3,8,2,4,6,1,10]