Analíse Combinatória

Sera q alguem tem uma classe implementada q calcula Analise Combinatorias ou q possa me informar onde posso achar?

obrigado
KenJiu

Não sei onde encontrar, mas é algo relativamente simples de ser implementado.

A única coisa mais chatinha para quem está começando é trabalhar com métodos recursivos, pois eles são usados no calcúlo do número fatorial. Depois disso trata-se apenas de um cálculo simples para ser feito com java. No Java Como Programar do Deitel há uma classe que calcula o fatorial…

Bom… mande-me um email se isto não lhe ajudou muito, tenho uma classe que faz isso…

Gustavo Guilherme BacK

Achei esse código de fatorial na net… se tiveres problemas com a parte da combinatória avise…

[code]public final class Fatorial1 {

static int fat(int n) {
if (n == 0) return 1;
else return n * fat(n-1);
}

public static void main(String argv[]) {
int n;
n = IO.readInt();
if (n >= 0) IO.writeln(fat(n));
else IO.writeln(“valor invalido”);
}

}[/code]

Gustavo Guilherme BacK[/code]

Obrigado pela ajuda, mas tipow, eu gostaria de gerar todas as combinacoes possiveis de 1 a 100 de 50 em 50, mas qnd vc faz recursivo por exemplo no c ou no pascal ele da memory overflow, dae pensei se alguem ja deve ter solucionado o problema, uma das formas q eu pensei seria usar uma base de dados, onde ficaria armazenado as combinacoes prontas, e o aplicativo recuperava o mais recente, gerava o proximo e guardava, deixando assim a memoria livre apesar de ser mais lento o processo, comecei o java nesse semestre dae nao tenho ainda conhecimento em acessar base com o java.

Acho que não há a necessidade de um database, no máximo você pode usar uma collection contendo os resultados.

Outra forma de fazer fatorial é usar iteração:

static int fat(int n) { int f = 1, i = 1; while (i < n) { i = i + 1; f = f * i; } return f; }

Mais uma vez, não vejo necessidade de um danco de dados… use uma estrutura um hashmap, ou um arraylist para armazenar os dados, no máximo de uma lida no tutorial aqui do guj sobre Properties.

Gustavo Guilherme BacK

so para tirar uma duvida, tenta fazer o fatorial de 100 com essas estruturas.

Com certeza dará 0…pois o limite de capacidade da var será estourado…
Mas isso se resolve!De uma olhada no pacote java.math nas classes
BigInteger e BigDecimal para cálculos cuja precisão foge aos limites
dos tipos primitivos em java.

Eu geralmente não faço a lição de casa dos outros, mas como eu tou num dia absurdamente feliz e não tinha nada melhor pra fazer, lá vai:

[code]public class Fatorial {

public static void main(String[] args) {
	for (int i = 0; i < 10; i++) {
		long start = System.currentTimeMillis();
		fat(new BigInteger("100000"));
		long end = System.currentTimeMillis();
		System.out.println("Took " + (end - start) + "ms!");
	}
}

public static BigInteger fat(final BigInteger n) {

	BigInteger f = BigInteger.ONE;
	BigInteger i = BigInteger.ONE;
	while (i.compareTo(n) < 0) {
		i = i.add(BigInteger.ONE);
		f = f.multiply(i);
	}
	return f;
}

}[/code]

ei Carlos…
Se vc tiver um dia de empolgação desse denovo até terça-feira que vem me da um toque que eu tenho um trabalho de Estrutura de Dados que eu não to com a mínima vontade de fazer :lol:

vlw pessoal pela dica, mas e para fazer um combinacao simples de 100 numeros de 50 em 50? melhor usar um array e jogo para um arquivo texto ou eh melhor jogar para um banco uma combinacao por vez?

KenJiu, hoje eu vim pro trabalho mais cedo, disposto a achar uma solução pro problema, pois gosto de matemática e o desafio pareceu interessante, agora, me desculpa a sinceridade, todo mundo no GUJ gosta de ajudar, mas até hoje, eu pelo menos, nunca recebi uma resposta pronta, e é exatamente isso que faz vir ao GUJ a cada 2 horas ver se há uma nova mensagem…

Vou, mais uma vez, tentar ajudar porque o problema me provocou, mas corra atrás do resultado também, pois o aprendizado e o desafio interessa mais a você do que a mim ou ao cv…

Use um arquivo simples, os Properties te ajudariam muito nisso, pois nele você consegue armazenar pares de valores, e assim para cada número que você quiser um fatorial terá um número com o resultado, como:

100 = XXXXXXX
200 = YYYYYYY

aqui no GUJ tem um ótimo tutorial do tema, dê uma olhada.

Gustavo Guilherme BacK

vlw, pela dica, vou dar uma olhada no tutorial

esse eh uma implementacao q fiz no segundo periodo da faculdade em pascal, agora quero transferir ele para java incluindo gravacao no arquivo ou base, e aumentar de 6 dezenas para 50, e combinar de 1 a 100. Qnd aumento essas variaveis o sistema nao suporta tantos for

program combinacao; uses crt; var num:array[1..100] of integer; i,tl,a,b,bb,c,cc,d,dd,e,ee,f,ff,x,numero:integer; sn:char; begin sn:='s'; while sn ='s' do begin clrscr; i:=0; writeln('gerador de combinacoes de 6 dezenas'); write('informe a quantidade de dezenas : '); readln(tl); for x:= 1 to tl do begin write('numero : '); readln(numero); num[x]:=numero; end; clrscr; for a:= 1 to tl do begin bb:=a+1; for b:= bb to tl do begin cc:=b+1; for c:= cc to tl do begin dd:=c+1; for d:= dd to tl do begin ee:= d+1; for e:= ee to tl do begin ff:= e+1; for f := ff to tl do begin inc(i); write('jogo ',i,' : '); writeln(num[a],' - ',num[b],' - ',num[c],' - ' ,num[d],' - ',num[e],' - ',num[f]); {if i mod 20 = 0 then begin writeln; writeln('tecle <ENTER> para continuar...'); readln; clrscr; end;} end; end; end; end; end; end; writeln; write('nova combinacao (s/n)? :'); readln(sn); end; end.

me desculpem por um codigo tao grosseiro.

De jeito nenhum. Pascal é uma ofensa! :smiley: :smiley: :smiley: :smiley: :smiley:

Que coisa bizarra bixo!!!

E pensar que eu passei 6meses programando em PASCAL