Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

xDarkLink

Dúvida Matrizes de Padrões Equivalentes

Mensagens Recomendadas

xDarkLink

Boa noite pessoal, precisava imenso da vossa ajuda, não estou a ver como posso equiparar matrizes de modo a saber se elas têm o mesmo padrão de uma maneira dinâmica, porque eu nunca vou saber o conteúdo.

Talvez seja mais fácil eu explicar aqui com um exemplo:

Imaginem estas duas matrizes

Matriz 1:

A | B

p | c

Matriz 2:

B | C

c | x

Estas duas matrizes seriam equivalentes porque seguem o padrão, o padrão está sempre na primeira linha da matriz, e nas linhas de baixo o "dito" conteúdo.

O complicado aqui é, quando existem letras repetidas (neste caso aqui B) o conteúdo (linhas de baixo) têm de ser iguais, mas nos outros casos (A e C) diferente de todas as outras..

Fazer isto com performance, têm alguma ideia?

Obrigado desde já ;)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
xDarkLink

Quero desde já agradecer por te disponibilizares a responder.

Posso pois, a questão é a seguinte, imagina uma acção com uma série de pré-condições necessárias para a sua execução.

Exemplo:

acção: andar A B C (que siginifica andar o objecto A de B para C).

pré-condições da acção de cima: corpoAndante A e parado A e movimento B C (que significa que A é um corpo andante, que o mesmo está parado, e B para C é um movimento válido).

A questão aqui é que eu vou ter numa "base de dados" as mesmas condições mas para a acção ser possível tem que verificar aquelas condições todas conforme as variáveis, imagina esta "base de dados".

corpoAndante X

parado Y

movimento P Q

Eu aqui não posso executar a acção porque não esta conforme o padrão, neste caso o que está a falhar no padrão, é apenas a variável de parado, tinha que ser igual à variável em corpoAndante, ou então existir um corpoAndante Y.

Eu pensei em usar matrizes e depois verificar os padrões, mas não serão tantas condições a verificar? é que existem várias relações, por exemplo, neste caso, as váriaveis em movimento têm que ser diferentes das usadas em corpoAndante e parado.

Eu não sei se já trabalhaste com prolog, mas isto em prolog era bastante fácil, porque existe o mecanismo de emparelhamento de variáveis para que um determinado predicado seja válido.

Obrigado desde já novamente, espero ter sido claro :)

Editado por xDarkLink

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

sim, já programei em prolog, mas foi p'rai à uma década, no entanto a resolução em prolog e a de java são completamente diferentes

primeiro de tudo, esquece matrizes para resolver isso, é complicar tudo.

a melhor solução seria teres uma lista de adjacências das posições, no entanto, parece que é exactamente isso que tens na base de dados. só necessitas de pesquisar se existe a aresta que pretendes (de A para B)

nota : para a próxima, tenta ser mais claro no que escreves porque continua a ser muito abstracto para se perceber correctamente


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
xDarkLink

Lista de adjacências? Tu estás a dizer algo do género: para cada acção ter por exemplo uma lista com as respectivas relações entre as variáveis das pré-condições. E depois verificar se para um certo par de condições fazer a lista de relações para esse par e verificar se a lista de relações é a mesma.

Acho que já tenho uma vaga ideia de como me orientar.

Obrigado ;)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
xDarkLink

Ei já agora, aproveitar o tópico, sabes se já existe alguma classe do java implementada de modo a que receba um conjunto de objectos e faça todas as combinações possíveis?

Tenho andado de volta deste problema deste ontem e também não estou a chegar lá.

Imagina que quero todas as combinações da conjunção ( carro ? e aviao ? ) onde o ponto de interrogação significa que pode ser qualquer um.

Imaginando que tenho esta base de dados:

carro A

carro B

aviao C

As combinações possíveis seriam: ( carro A e aviao C ) e ( carro B e aviao C ).

Mas isto para uma base de dados pequena é fácil, agora para uma base de dados grande, é mais complexo o algoritmo. Talvez exista algo do java já feito, e eu tenha só que implementar alguma interface?

Alguma ajuda aqui ?

Obrigado desde já HappyHippyHippo ;)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
xDarkLink

Não, nada disso. Eu disse base de dados num sentido lado, não tem nada a ver com uma base dados.

É uma lista de literais. e cada literal tem dois atributos um nome (que neste caso é carro, ou aviao) e um vector de string que são são os argumentos ( [a, b] )

No exemplo que te dei são três objectos, três literais.

carro A (nome = "carro" , vars [] = {A} )

carro B (nome = "carro" , vars [] = {B} )

aviao C (nome = "aviao" , vars [] = {C} )

Estás a ver a coisa? Obrigado novamente ;)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

então a única coisa que necessitas é percorrer a lista de argumentos verificando se existe a pretendida ({A,B} => de A para B), isto sobre o objecto (carroA/carroB/aviaoC) afactado


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.