Algoritmo analise combinatória
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
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
Curtidas 0
Respostas
Davi Costa
05/04/2011
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
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
GOSTEI 0
Ramiro Barcelos
05/04/2011
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
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
GOSTEI 0
Ramiro Barcelos
05/04/2011
Alguem poderia me ajudar com este problema, porfavor??? preciso com urgência!!
Obrigado antecipadamente,
Ramiro
Obrigado antecipadamente,
Ramiro
GOSTEI 0
Davi Costa
05/04/2011
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
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
GOSTEI 0
Ramiro Barcelos
05/04/2011
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.
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.
GOSTEI 0
Davi Costa
05/04/2011
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
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
GOSTEI 0
Davi Costa
05/04/2011
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
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
GOSTEI 0
Dyego Carmo
05/04/2011
Resolvido ?
Se sim favor fechar o seu post ;)
Valeu !
Se sim favor fechar o seu post ;)
Valeu !
GOSTEI 0