Algoritmo analise combinatória

05/04/2011

0

Olá, será que você poderia me ajudar com este problema de algoritmo que preciso resolver?
aí vai o problema...

Uma conheida empresa do ramo da papelaria tem um campo de testes de anetas e lápis de cor, onde um robô faz testes de resistênia e tempo de uso das canetas.

O robô é programado da seguinte forma:
• Ele recebe um alfabeto com k símbolos diferentes. Por exemplo, 1, 2, 3 e 4.
• Ele recebe a informação de que deve esrever palavras com exatamente p símbolos.

Devido a um problema de projeto (o robô é um pouco antigo), o robô tem algumas restrições:
• O robô pode começar a escrever uma palavra usando qualquer símbolo dado;
• O robô só consegue escrever símbolos iguais ao último que foi escrito, ou algum símbolo que venha depois dele.
Por exempo, o robô consegue escrever 1111, 1223 e 3334, mas não pode escrever 1232. Você deve estudar a 
conguração do robô, receber informações sobre k e p e determinar quantas palavras podem ser escritas.

teria como me ajudar nesse problema?? please, peciso muito disso..pode ser em Java ou C#

obrigado
 
Ramiro Barcelos

Ramiro Barcelos

Responder

Posts

05/04/2011

Davi Costa

Precisamos de mais informações para ajudá-lo.
Por exemplo limite de caracteres... pq se ele puder escrever infinitos caracteres ele poderá ter infinitas palavras.
eria interessante se vc pudesse passar um exemplo prático do dia a dia de como realmente é executado esse teste.
para que possamos ajudá-lo nesse algoritmo.

Att Davi
Responder

05/04/2011

Ramiro Barcelos

Por exemplo, tenho como simbolos: A, B, C, D
quero saber qual o número de combinacões  possíveis posso montar com palavras de 3 ou 4, sendo que posso escrever apenas símbolos iguais ao último que foi escrito ou algum símbolo que venha depois, exemplo:com 3 palavras:A,A,AA,A,BA,A,CA,A,DA,B,BA,B,CB,B,BB,B,CB,C,C...até chegar na ultima possível: D,D,D
ou com 4 palavras: AAAAAAABABCD...CCDDCDDDDDDD
OBS: note que não pode formar a combinacão BBBA, onde A vem antes do B como mostra nos Simbolos
Responder

05/04/2011

Ramiro Barcelos

Alguem poderia me ajudar com este problema, porfavor??? preciso com urgência!!
Obrigado antecipadamente,
Ramiro
Responder

06/04/2011

Davi Costa

O interessante aqui seria dividir para conquistar,
vc deve  fazer uma iteração sobre essas possíveis letras e fazer uma soma das possibilidades de cada uma.
Comece por aí sua implementação a medida que for desenvolvendo posta aqui para facilitar a ajuda p vc.

Att Davi
Responder

06/04/2011

Ramiro Barcelos

Eu comecei a fazer apenas com palavras com 3 letras, mas apenas está trazendo as combinacões AAA, BBB, CCC. agora não sei como vou fazer para formar a combinacao, AAB, AAC, ABB, ABC.... e assim por diante.segue o início:
public static void main(String[] args) {               String[] simbolo = new String[3];        simbolo[0]= "A";        simbolo[1]= "B";        simbolo[2]= "C";
        int palavra=3;        Robo(simbolo,palavra);            }
 public static void Robo(String[] simb,int p){        String resultado[] = new String[3];        resultado[0]= "A";        resultado[1]= "A";        resultado[2]= "A";        int cont=1;        int i,j,l;                try{
            for(i=0;i<=2;i++){                for(j=0;j<=2;j++){                        resultado[j] = simb[i];                        System.out.print(resultado[j]);                }                                                                }                 }catch (Exception e) {}}

Alguma idéia aí???
Obrigado.
Responder

07/04/2011

Davi Costa

Ramiro,
nas experiências em dojos (http://pet.inf.ufsc.br/dojo/o-que-eh-dojo/      
http://cacomp.com.br/tag/programacao-dojo-desenvolvimento),
sempre pude notar que os melhores códigos surgem quando partimos do mais simples para o mais complexo.
Que tal fazer um loop inverso, começando do maior valor para o menor. Pois o maior caractere só tem uma possibilidade, devido a ser possível colocar somenete ele ao lado dele. Por exemplo A,B,C dispostos 3 a 3, pelo que entendi da sua regra iniciando com a letra C só temos essa possibilidade: CCC.



for(int i = lista.lenght(); i>=0;i--){
                //trabalha em cima de lista.get(i);
}

Att Davi
Responder

07/04/2011

Davi Costa

Só complementando, cria uma variável antes desse for e vai icrementando ela conforme as possibilidades de cada letra.
Por exemplo:

int aux =0

for(int i = lista.lenght(); i>=0;i--){
                aux += recuperarPossibilidades(lista.get(i));
}

Obviamente esse recuperarPossibilidades não existe, é o que vc vai ter que kebrar a cabeça para implementar, talvez precise de mais parâmetros, como quantidade de digitos que cada palavra pode conter... e por aí vai.

Espero ter ajudado.

Att Davi
Responder

12/04/2011

Dyego Carmo

Resolvido ?

Se sim favor fechar o seu post ;)

Valeu !


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar