Gerar palavras sobre o alfabeto E={0,1}*

1 resposta
psyhclo

Estou tentando fazer um exercíco de Linguagens Formais e Autômatos, que é assim:

Implementar uma função recursiva que dado um inteiro n, determina a palavra w em Ʃ={0,1}*. (n indica a posição de w).

Um exemplo de como seria isso, é da seguinte forma.

Ele gera palavras assim:

Digamos que n=8, então as palavras geradas a partir de 0 e 1 é:

{Ɛ, 0,1,00,01,10,11,000,001}

e se eu perguntasse qual é a palavra na posicao 5, ele retornaria 01.

Pois bem, eu estou implementando da seguinte forma:

public class Q01 {

	public static void main(String args[]){			
			
			System.out.print(gera(8, "0", "1"));
	
	}
	
	
	private static ArrayList<String> gera(int n, String p, String s){
		
		ArrayList<String> vet = new ArrayList<String>();
		
		vet.add(p);
		vet.add(s);
		vet.add("");
		vet.add("");
		int i = vet.size() -1;
		int r = 0;
		while(r<=n){
		//System.out.print(i);
			for(int j=0; j<=vet.size();j++){
				for(int k=1;k<=vet.size();k++){
					vet.set(i, String.valueOf(j) + String.valueOf(k));
					vet.add("");
                                        i++;
				}			
			}	
		}		
		return vet;
		
	}
}

Sendo que o 8 passado é o valor de n, e as strings 0 e 1, são os valores iniciais para se derivar as palavras. As palavras são derivadas a partir da concatenação dos zeros e uns. Só que quando eu tento executar ele não está gerando as palavras nem imprimindo, ele simplesmente imprime as palavras passadas na chamada e pronto. Acho que nao esta entrando no for. O que pode estar dando errado?

Obrigado.

1 Resposta

davidbuzatto

Olá,

Primeiramente, vc tem alguns errinhos conceituais.
A letra Sigma ( Ʃ ) indica o alfabeto. Então vc tem Ʃ={0,1}.
Você quer gerar a linguagem que representa o fecho de sigma (Ʃ). Então L={0,1}

Agora vamos aos problemas.
O que te garante que na posição 2 do seu conjunto (linguagem) vc tem a palavra “1” ao invés de palavra “0”?
Ou mesmo qualquer outra palavra? Lembre-se, sua linguagem é um conjunto! Em um conjunto dessa natueza (fecho sobre um alfabeto), não há como prever a posição dos elementos.
Agora, se vc (ou seu professor) estipularam a ordem do dos elementos para poder fazer o exercício, tudo bem, sem problemas, mas vc precisa então estipular a regra para gerar as palavras, ou seja, qual a ordem que os zeros e os uns aparecem nas palavras de comprimento “x”?

Por exemplo, para palavras de comprimento 3, vc poderia ter esses conjuntos:
000, 001, 010, 100, 011, 101, 110, 111 ou
000, 100, 010, 001, 110, 101, 011, 111 ou
111, 110, 101, 011, 100, 010, 001, 000 ou
111, 011, 101, 110, 001, 010, 100, 000 ou …

Perceba como é difícil generalizar uma regra para a montagem das palavras.
Se sua regra for diferente de a de um colega, o programa vai retornar valores diferentes para entradas iguais quando comparadas as saídas do seu programa com o do seu colega.

Será que é isso mesmo que o exercício pede? Algo me diz que tem alguma coisa errada…
Dê uma revisada no enunciado e verifique se é isso mesmo.

[]´s

Criado 29 de agosto de 2010
Ultima resposta 30 de ago. de 2010
Respostas 1
Participantes 2