GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Gerar sequencias de numeros


#1

Olá pessoal blz?

Seguinte, eu estou querendo gerar sequencias numericas...

eu tenho 25 numeros, de 01 à 25 respectivamente, e quero gerar uma sequencia de 15 numeros, alias, todas as sequencias possíveis com esses 25 numeros, tipo assim:

1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - 15 - 16 - 17 - 18 - 19 - 20 - 21 - 22 - 23 - 24 - 25

dai gerar todas as sequencias possíveis só q com 15 numeros, por exemplo, dos 25 acima gerar uma sequencia assim

5 - 3 - 7 - 10 - 2 - 22 - 11 - 13 - 4 - 20 - 17 - 6 - 1 - 23 - 15 (uma sequencia com somente 15 numeros) só um exemplo...

entenderam? gerar todas as sequencias de 15 numeros possíveis com numeros de 01 à 25...

nao to conseguindo pensar em nd pra fazer isso, alguem aceita o desafio ??? hehehe

vlw pessoal t+


#2

Velho, esse assunto é muito batido. Procura no google que lá tem a doidado. procura por Random java.


#3

Faz algum tempo eu tive ques escrever um método que montava todas as combinações de nove números:

    public static void permuta(int v[], int k, int n) {
        int i;
        int aux;
        if (k == n - 1) {
            mostre(v, n);
        } else {
            permuta(v, k + 1, n);
            i = k + 1;
            while (i < n) {
                aux = v[k];
                v[k] = v[i];
                v[i] = aux;
                permuta(v, k + 1, n);
                aux = v[k];
                v[k] = v[i];
                v[i] = aux;
                i = i + 1;
            }
        }
    }

        int[] vet = new int[9];
        for (int i = 0; i < 9; i++) {
            vet[i] = i + 1;
        }
        permuta(vet, 0, 9);

talvez te ajude.

fw


#4

As permutações de 15 números sem repetição a partir de um conjunto de 25 números são, se não me engano,
25! / (25 - 15)! = 4.274.473.667.143.680.000 , um número um bocadinho grande (se você gerasse um milhão dessas permutações por segundo, você levaria um pouco mais de 135 mil e 453 anos para gerar todas). Você não quer gerar só algumas delas?


#5

:lol:

nem tinha parado para pensar na explosão combinatória...

vw.


#6

aff, desconsiderem este.


#7

Bom, eu nunca tinha parado pra pensar nisso...

que locura thingol !!! pra ser sincero eu neim intendi essa formula que vc falou ( 25! / (25 - 15)! ) o que significa esse ! após o número?
ja que vai demorar tanto tempo assim, teremos que gerar algumas somente :wink:

Dieval Guizelini, amanha vou dar uma olhada no codigo q vc postou, por hj chega, heheheh

vlw a ajuda t+


#8

Cara,

A formula que o thingol utilizou foi de arranjo.
A(n,s) = n! / (n-s)!
que serve para calcular o número de subconjuntos de s elementos que podemos produzir com um conjunto de n elementos.
O símbolo ! siginifica fatorial, ou seja:
5! = 5x4x3x2x1 = 120.

Agora que parei para ver a fórmula, não sei se neste caso não seria combinação, uma vez que não importa a ordem dos números...

fw


#9

afff, deveria ter esdudado mais matematica pra nao passar por essas, uiahiuhaiahiah

bom, ja que é assim, eu vou ver q q eu faço aqui, vlw pessoal pelas explicacões ai !!!
teh a próxima...


#10

Bom, se você quer as combinações de 15 elementos tomados em um conjunto de 25, temos um valor bem mais razoável, que é:

25! / 15! (25 - 15)!, que é 3.268.760, um valor bem menor e mais razoável. Mas pelo exemplo que o Cleiton nos mostrou (onde os elementos estão desordenados), eu achei que fossem permutações, não combinações.


#11

intaum...

bom, qual a diferença entre permutacoes e combinacoes?

é isso mesmo q eu quero, combinacoes de 15 numeros tomados em um (conjunto de 25, de 01 a 25 respectivamente), só q os elementos nao precisam estar ordenados, aliás, neim devem estar ordenados, como por exemplo: 1-1-1-1-1-1-1-1-1-1-1-1-1-1-1; 1-1-1-1-1-1-1-1-1-1-1-1-1-1-2; 1-1-1-1-1-1-1-1-1-1-1-1-1-1-3......, eu quero criar aleatoriamente essa sequencia se 15 numeros tomados em um conjunto de 25, ou seja, a sequencia deve estar desorndenada como eu demonstrei no primeiro post, e elas nao devem se repetir..., nao sei se fica inviavel fazer isso devido ao numero de combinacões possiveis como o thingol demonstrou acima...

espero ter explicado melhor agora :wink:

vlw pessoal t+


#12

Vou dar um exemplo mais fácil. Digamos que você faça um sorteio da Mega-Sena (6 números escolhidos entre 60 números).

O que aparece no site da Caixa são os números, tais como sorteados pela ordem de sorteio - nesse caso seriam as permutações. Por exemplo, 1 2 3 4 5 6 é diferente de 3 1 4 5 6 2.

Mas quando você vai pegar seu prêmio na Caixa, você aparece com uma combinação desses números, tais como aparecem no seu canhoto do sorteio - ou seja, para receber o prêmio, tanto faz se é 1 2 3 4 5 6 quanto 3 1 4 5 6 2. Na combinação, não importa a ordem, e sim apenas os números.

As permutações de 6 elementos escolhidos entre 60 são: 60 ! / (60 - 6)! = 36.045.979.200 possibilidades. Mas as combinações são apenas
60! / 6! (60 - 6)! = 50.063.860. Isso quer dizer que você tem uma chance a cada 50.063.860 apostas de ganhar na Mega-Sena.


#13

ah blz, entendi !!

agora eu sei o q eu quero, hahiuahiuhaa, eu quero "só" as combinações....
mas continuo sem saber como programar essa formula...
se alguem quizer me dar uma ajudinha, será muito bem vinda !!!

vlw t+


#14

http://camino.rutgers.edu/ut/utsa/cs3343/lecture25.html
O algoritmo está em C mas pode ser portado para Java com muita faclidade.


#15

blz thingol, vou dar uma olhada e passar pra java, ou melhor, ja q eu to dando uma estudada em c de vez enquando, vou estudar o algoritmo em c mesmo...

vlw a ajuda de tds teh a próxima !!!


#16

Você poderia usar o seguinte código VBA Excel 2010.

Sub pSequencia15()
Dim vl1 As Double
Dim vl2 As Double
Dim vl3 As Double
Dim vl4 As Double
Dim vl5 As Double
Dim vl6 As Double
Dim vl7 As Double
Dim vl8 As Double
Dim vl9 As Double
Dim vl10 As Double
Dim vl11 As Double
Dim vl12 As Double
Dim vl13 As Double
Dim vl14 As Double
Dim vl15 As Double
Dim vlLinha As Double
Dim vlColuna As Double
vlLinha = 1
vlColuna = 1

For vl1 = 1 To 25
    For vl2 = vl1 + 1 To 25
        For vl3 = vl2 + 1 To 25
            For vl4 = vl3 + 1 To 25
                For vl5 = vl4 + 1 To 25
                    For vl6 = vl5 + 1 To 25
                        For vl7 = vl6 + 1 To 25
                            For vl8 = vl7 + 1 To 25
                                For vl9 = vl8 + 1 To 25
                                    For vl10 = vl9 + 1 To 25
                                        For vl11 = vl10 + 1 To 25
                                            For vl12 = vl11 + 1 To 25
                                                For vl13 = vl12 + 1 To 25
                                                    For vl14 = vl13 + 1 To 25
                                                        For vl15 = vl14 + 1 To 25
                                                            Cells(vlLinha, vlColuna) = vl1 & ", " & vl2 & ", " & vl3 & ", " & vl4 & ", " & vl5 & ", " & vl6 & ", " & vl7 & ", " & vl8 & ", " & vl9 & ", " & vl10 & ", " & vl11 & ", " & vl12 & ", " & vl13 & ", " & vl14 & ", " & vl15

                                                            vlColuna = vlColuna + 1

                                                            If vlColuna = 16384 Then
                                                                vlLinha = vlLinha + 1

' vlColuna=1
End If

                                                        Next vl15
                                                    Next vl14
                                                Next vl13
                                            Next vl12
                                        Next vl11
                                    Next vl10
                                Next vl9
                            Next vl8
                        Next vl7
                    Next vl6
                Next vl5
            Next vl4
        Next vl3
    Next vl2
Next vl1

End Sub