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

vitor_neves88

[Resolvido] Algoritmo de pesquisa

10 mensagens neste tópico

Boas tardes,

venho por este meio solicitar ajuda, para um problema que eu julgava fácil, mas que não estou a conseguir resolver.  :hmm:

Estou a desenvolver um projecto em MATLAB e o problema é o seguinte:

-tenho uma matriz (1*m) elementos

dentro dessa matriz podem estar valores aleatórios entre 0 e x (sempre positivos)

exemplo (para m=40 e x=9):

[0 5 7 2 5 8 8 8 3 9 7 3 9 5 1 9 8 8 7 6 9 1 6 1 8 5 7 7 1 8 3 2 0 1 1 4 6 7 0 2]

O que eu pretendo é percorrer a matriz e obter os números triplos duplos e simples (para cada valor entre 1 e x):

ou seja

para o exemplo anterior pretendia ter as 3 matrizes seguintes:

números triplos

1 0

2 0

3 0

4 0

5 0

6 0

7 0

8 1

9 0

números duplos

1 1

2 0

3 0

4 0

5 0

6 0

7 1

8 1

9 0

números simples

1 4

2 3

3 3

4 1

5 3

6 3

7 4

8 2

9 4

Estava a tentar resolver da seguinte maneira, mas não está a resultar.

for j=1:m
     for i=1:x

                 if (elemento(j)==i)&& (elemento(j+1)==i)&&(elemento(j+2)==i)&&((m-j)>1)
                     tempos_triplos(i)=tempos_triplos(i)+1;
                 elseif (elemento(j)==i)&& (elemento(j+1)==i)&&((m-j)>0)
                    tempos_duplos(i)=tempos_duplos(i)+1;
                elseif (elemento(j)==i)
                     tempos_simples(i)=tempos_simples(i)+1;
                 end
       
     end
end

Mas não está a funcionar, já tentei de outras maneiras, mas o problema está quando existe números iguais no final do array.

Espero que tenha conseguido expor o meu problema.

Aceito sugestões para resolução

CMPS,

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nem uma sugestão?

Já sei o pessoal foram todos de fds prolongado...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Acho q nao estou a entender muito bem o que queres dizer com Duplos e Triplos...

O que é um Duplo ?

E pq éq o 8 é triplo ?... :S

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Acho q nao estou a entender muito bem o que queres dizer com Duplos e Triplos...

O que é um Duplo ?

E pq éq o 8 é triplo ?... :S

vou tentar explicar melhor, atribuindo um exemplo:

Imagina que a matriz inicial é um horário em que cada índice corresponde a um tempo (no caso apresentado, um horário com 40 tempos), e cada valor dessa matriz corresponde ao código de uma disciplina (no caso apresentado 9 disciplinas).

- Os números simples são disciplinas com um tempo seguido (ou seja sem repetição imediatamente a seguir)

- Os números duplos são disciplinas com 2 tempos seguidos

- Os números triplos são disciplinas com 3 tempos seguido.

Então para o numero 8 (disciplina 8 por exemplo) temos:

1 numero triplo (pois aparece uma vez 3 vezes seguidas) o mesmo se aplica para o número duplo, e como aparece duas vezes sozinho números simples igual a 2.

Espero que se perceba melhor

CMPS,

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para:

M=40

X=9

Ficamos seguinte vector de numeros:

[0   5   7   2   5   8   8   8   3   9   7   3   9   5   1   9   8   8   7   6   9   1   6   1   8   5   7   7   1   8   3   2   0   1   1   4   6   7   0   2]

Queres 3 matrizes de 0 a X linhas, em que a coluna 1 seja o Indice de X e a coluna 2 o numero que aparece (1x, 2x, 3x)

[table]

0   0

1   0

2   0

3   0

4   0

5   0

6   0

7   0

8   1

9   0

[/td][td]||[/td][td]duplos

0   0

1   1

2   0

3   0

4   0

5   0

6   0

7   1

8   1

9   0

[/td][td]||[/td][td]simples

0   2

1   4

2   3

3   3

4   1

5   3

6   3

7   4

8   2

9   4

[/td]

[/table]

Não conheço a linguagem Matlab, mas em Java(por exemplo) é bastante simples:

int x = 9
int[] lista = {0,5,7,2,5,8,8,8,3,9,7,3,9,5,1,9,8,8,7,6,9,1,6,1,8,5,7,7,1,8,3,2,0,1,1,4,6,7,0,2};

int[][] matrizSimples = new int[x+1][2];
int[][] matrizDupla = new int[x+1][2];
int[][] matrizTripla = new int[x+1][2];

//inicializar Matrizes
for(int i = 0; i <=x; i++){
matrizSimples[i][0]=i;
matrizSimples [i][1]=0;
matrizDupla[i][0]=i;
matrizDupla [i][1]=0;
matrizTripla[i][0]=i;
matrizTripla [i][1]=0;
}

//Verificar a lista de numeros e incrementar valores nas Matrizes para o Index correspondente
for(int i=0;i<lista.lenght){
if(lista[i]==lista[i+1]){
	if(lista[i+1]==lista[i+2]){
		matrizTripla[i][1]++;
		i++;
		i++;
		i++;

	}else{
		matrizDupla[i][1]++;
		i++;
		i++;
	}

}else{
	matrizSimples[i][1]++;
	i++;
}
}

Espero que de para entender ... :S

Senão volto a tentar ajudar :confused:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É isso mesmo que eu pretendo se bem que os '0'são dispensáveis, mas isso é indiferente.

Agora vou tentar passar isso para matlab. (depois digo se consegui ou não)

Muito obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É isso mesmo que eu pretendo se bem que os '0'são dispensáveis, mas isso é indiferente.

Agora vou tentar passar isso para matlab. (depois digo se consegui ou não)

Muito obrigado

Não tenho mesmo noçoes nenhumas de matlab ..

Nem sei se realmente dá para criar matrizes, procurei pelas limitaçoes da lingugem na net .. mas nao encontrei nada :s

Qualquer duvida que tenhas, diz.. Pq eu achei mais facil por em Java doq em Pseudo-Codigo ..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim dá para criar matrizes e muito mais facilmente que em qualquer outra linguagem.

O MATLAB é uma programação virada para calculo numérico, por isso funciona muito bem com matrizes, aliás é uma das suas vantagens.

Em relação ao meu problema está resolvido, realmente era muito fácil e eu estava a complicar, segui o teu raciocínio, e acrescentei algumas restrições e já funciona.

Muito obrigado!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim dá para criar matrizes e muito mais facilmente que em qualquer outra linguagem.

O MATLAB é uma programação virada para calculo numérico, por isso funciona muito bem com matrizes, aliás é uma das suas vantagens.

Em relação ao meu problema está resolvido, realmente era muito fácil e eu estava a complicar, segui o teu raciocínio, e acrescentei algumas restrições e já funciona.

Muito obrigado!

Fico muito contente por te ter ajudado.

Se não te importares podes deixar feedback aqui: http://www.portugal-a-programar.pt/index.php?showtopic=23550

Como eu programo todos os dias, quero ter uma especie de racio, pq se mostrar q ajudo, sei que serei ajudado : )

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Como eu programo todos os dias, quero ter uma especie de racio, pq se mostrar q ajudo, sei que serei ajudado : )

Não precisas disso :confused:

Eu era para ter respondido a este tópico, mas não percebo nada de matlab e a dúvida parecia-me ser mais sobre programação em matlab do que o algoritmo utilizado..

0

Partilhar esta mensagem


Link 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