public Automato determinizaAutomato(Automato automato) {

		Automato determinizado = new Automato(automato.getNome(), automato.getDescricao());
		List<Estado> allEstados = automato.getEstados();

		if (isAutomatoDeterministico(automato)) {
			return automato;
		}

		for (Estado estado : allEstados) {
			if (estado.isNaoDeterminismo()) {
				Estado gerado = geraEstadoDeterministico(estado);
				estadosGerados.add(gerado);
			} else {
				estadosGerados.add(estado);
			}
		}

		boolean alldone = true;
		while (alldone) {
			alldone = false;
			List<Estado> alldones = new ArrayList<Estado>();
			alldones.addAll(estadosGerados);
			for (Estado estadox : alldones) {
				if (estadox.isNaoDeterminismo()) {
					Estado estadoy = geraEstadoDeterministico(estadox);
					if (estadox.equals(estadoy)) {
						estadox.setTransicoes(estadoy.getTransicoes());
					}
					alldone = true;
					break;
				}
			}
		}

		determinizado.setEstados(estadosGerados);
		
		List<Estado> ests = determinizado.getEstados();
		Estado inicial = determinizado.getEstadoInicial();
		
		ests.remove(inicial);
		ests.add(0, inicial);

		return determinizado;
	}