Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
xDarkLink

Dúvida Matrizes de Padrões Equivalentes

Recommended Posts

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á ;)

Share this post


Link to post
Share on other 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 :)

Edited by xDarkLink

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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 ;)

Share this post


Link to post
Share on other 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 ;)

Share this post


Link to post
Share on other 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 ;)

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites
xDarkLink

Exacto é isso, obrigado Happy por te teres disponibilizado a ajudar ;)

Fico muito grato, abraço ;)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.