Jump to content

Sobre Garantia de acerto.


Recommended Posts

Olá pessoal tudo bem, eu gostaria de uma orientação, qual é a melhor forma  para aplicar uma  buscar para garantir um  processamento eficiente para um fechamento sabendo das quantidades, se é  a "SOMA" e como fazer ou outra forma.

 

Vou  desenvolver em java. no nosso exemplo eu usei 5 numeros combinados de 3 em 3 que é igual 10 volantes está abaixo a lista. Aplicando uma redução para se ter uma garantia 2 acertos 100%, temos 4 volantes.  Se alguém pode mostra como fazer, seja como codigo ou excel agaradeço. Assim que terminar codigo posto aqui.

 

lista

1    2    3
1    2    4
1    2    5
1    3    4
1    3    5
1    4    5
2    3    4
2    3    5
2    4    5
3    4    5
        
resultado

1    2    3
1    4    5
2    3    4
2    3    5
 

Link to comment
Share on other sites

@Joelsonc3

 

 

Texto do @rockcavera

1) Gerar todas as combinações de V,K e vamos por em uma lista

2) Selecione aleatoriamente uma combinação de V,K, adicione-a a sua lista Matriz e delete ela da lista do passo 1)

3) Gerar todas as combinações de V,M, coloque em uma lista e delete aquelas que fazem T ou mais pontos com a combinação selecionada no passo 2)

4) Agora você sabe a quantidade de combinações que uma única combinação de V,K consegue eliminar de V,M. Esse número vamos chamar de "Comb_VK_reduz_VM" e você obtém ele assim: Combinações de V,M - Tamanho da Lista de V,M Após a Exclusão) [1]. Temos por enquanto 3 listas: combinações de V,K; combinações de V,M; e Matriz. Cada uma com respectivamente N itens: C(V,K) - 1; C(V,M) - Comb_VK_reduz_VM; e 1 [2].

5) Vamos obter o mínimo teórico, mas que nem sempre é alcançável. Fórmula: Ceil(C(V,M) / Comb_VK_reduz_VM) [3].

6) Agora, enquanto a lista de V,M possuir combinações (itens), você vai fazer:

6.1) Cruzar a lista de V,K contra a lista de V,M. Ou seja, pegar uma por uma das combinação da lista de V,K e contar quantas combinações de V,M fazem T ou mais pontos com cada uma.

6.2) Depois de passar a lista toda de V,K, você vai pegar aquela combinação de V,K que mais fez T ou mais pontos com a atual lista de V,M, adicionar ela na lista Matriz, deletar da lista V,K e deletar as combinações de V,M que fazem T ou mais pontos com ela [4].

6.3) Volte para 6)

7) Se a lista V,M não possui mais combinações, ou seja, não tem mais itens, a sua lista Matriz possui uma matriz de V,K,T,M 100% coberta.

 

Notas:

[1] É possível obter esse número de outra forma, usando calculo matemático, mas não vou ensinar aqui, sendo que é possível se obter ele no meio do caminho do algoritmo por uma simples subtração.

[2] A notação "C(n, k)" é para aplicar a formula da combinação de n,k.

[3] Ceil(n) é usado para especificar que um número deve ser arredondado para cima caso não seja um inteiro. Ou seja, 1,1 vai ser arredondado para 2. 1,9 vai ser arredondado para 2.

[4] Caso mais de uma combinação de V,K fizer os mesmos T ou mais pontos com a atual lista de V,M, você pode escolher aleatoriamente qualquer uma.

 

Como pode ver, o fato de o mesmo algoritmo criar matrizes com B de tamanhos distintos está relacionado ao fato da escolha aleatória nos passos 2) e passo 6.2) quando cai no caso da nota [4]. Também, você pode observar que algumas coisas foram postas para você aprender a como calcular o mínimo teórico, que as vezes pode ser a menor matriz possível. A menor matriz possível vai ser sempre maior ou igual ao mínimo teórico.

 

Outra coisa que posso passar aqui é o cálculo do mínimo teórico de matrizes V,K,T, onde T=M. Aqui é a fórmula de Schonheim.

 

A fórmula de Schonheim é diferente do mínimo teórico apresentado no meu algoritmo. A fórmula de Schonheim pode ser maior ou igual ao mínimo teórico.

 

Ainda existem dois outros algoritmos que conheço para redução, que são: recozimento simulado e o PDO (Problem Dependent Optimization). Aqui neste tópico você vai encontrar maiores informações.

 

 

  • Like 1
Link to comment
Share on other sites

Em 13/01/2024 em 23:32, -W6- disse:

O @Substantivo escreveu um artigo muito interessante sobre redução:

aqui está o link:
 

 

Obrigado pelo exemplo, eu já tenho isso, no caso que você apresenta, se acerta 4 números, você só tem cartões com 3 acertos, se acerta as 5 sorteadas, você tem quadra no exemplo apresentado. neste exemplo sempre vai haver a dependência de uma dezena. iguais >= 4, eu pergunto resolver se for igual == 4,  ou seja se eu acerta apenas 4 quero encontra, por isso eu perguntei se existe alguma forma utilizando soma ou questão logica.

exemplo simples de código abaixo faz isso: 

 

package Quina;

import java.util.Scanner;

public class Quina {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        int[][] array = new int[999][5]; // matriz declaration
        int[] vetorA = new int[5]; // vetor declaration

        int qtde = 0, cont = 0, volantes = 0, reduzidos = 0;
        int n1, n2, n3, n4, n5;
        int Tamanho = 5;
        int iguais = 0;

        System.out.println("Qtde de dezenas a combinar:");
        qtde = scan.nextInt();

        for (n1 = 1; n1 <= qtde - 4; n1++) {
            vetorA[0] = n1;
            for (n2 = n1 + 1; n2 <= qtde - 3; n2++) {
                vetorA[1] = n2;
                for (n3 = n2 + 1; n3 <= qtde - 2; n3++) {
                    vetorA[2] = n3;
                    for (n4 = n3 + 1; n4 <= qtde - 1; n4++) {
                        vetorA[3] = n4;
                        for (n5 = n4 + 1; n5 <= qtde; n5++) {
                            vetorA[4] = n5;

                            volantes++; // count generated combinations

                            for (int k = 0; k <= cont; k++) {
                                 iguais = 0;
                                for (int i = 0; i < Tamanho; i++) {
                                    for (int j = 0; j < Tamanho; j++) {
                                        if (vetorA[i] == array[k][j]) {
                                            iguais++;
                                        }
                                    }
                                }
                                if (iguais >= 4) {
                                    break;
                                }
                            }

                            // if iguais is less than 4, store it in the matrix
                            if (iguais < 4) {
                                cont++;
                                for (int x = 0; x < Tamanho; x++) {
                                    array[cont][x] = vetorA[x];
                                }
                                System.out.println("cartoes " + cont + ": " + vetorA[0] + " " + vetorA[1] + " "
                                        + vetorA[2] + " " + vetorA[3] + " " + vetorA[4]);
                                reduzidos++;
                            }
                        }
                    }
                }
            }
        }
        System.out.println("total reduzidos:" + reduzidos);
        System.out.println("Total volantes:" + volantes);
    }
}

 

 

  

  • Like 1
Link to comment
Share on other sites

Em 13/01/2024 em 17:09, Ralf Jones disse:

@Joelsonc3

 

 

Texto do @rockcavera

1) Gerar todas as combinações de V,K e vamos por em uma lista

2) Selecione aleatoriamente uma combinação de V,K, adicione-a a sua lista Matriz e delete ela da lista do passo 1)

3) Gerar todas as combinações de V,M, coloque em uma lista e delete aquelas que fazem T ou mais pontos com a combinação selecionada no passo 2)

4) Agora você sabe a quantidade de combinações que uma única combinação de V,K consegue eliminar de V,M. Esse número vamos chamar de "Comb_VK_reduz_VM" e você obtém ele assim: Combinações de V,M - Tamanho da Lista de V,M Após a Exclusão) [1]. Temos por enquanto 3 listas: combinações de V,K; combinações de V,M; e Matriz. Cada uma com respectivamente N itens: C(V,K) - 1; C(V,M) - Comb_VK_reduz_VM; e 1 [2].

5) Vamos obter o mínimo teórico, mas que nem sempre é alcançável. Fórmula: Ceil(C(V,M) / Comb_VK_reduz_VM) [3].

6) Agora, enquanto a lista de V,M possuir combinações (itens), você vai fazer:

6.1) Cruzar a lista de V,K contra a lista de V,M. Ou seja, pegar uma por uma das combinação da lista de V,K e contar quantas combinações de V,M fazem T ou mais pontos com cada uma.

6.2) Depois de passar a lista toda de V,K, você vai pegar aquela combinação de V,K que mais fez T ou mais pontos com a atual lista de V,M, adicionar ela na lista Matriz, deletar da lista V,K e deletar as combinações de V,M que fazem T ou mais pontos com ela [4].

6.3) Volte para 6)

7) Se a lista V,M não possui mais combinações, ou seja, não tem mais itens, a sua lista Matriz possui uma matriz de V,K,T,M 100% coberta.

 

Notas:

[1] É possível obter esse número de outra forma, usando calculo matemático, mas não vou ensinar aqui, sendo que é possível se obter ele no meio do caminho do algoritmo por uma simples subtração.

[2] A notação "C(n, k)" é para aplicar a formula da combinação de n,k.

[3] Ceil(n) é usado para especificar que um número deve ser arredondado para cima caso não seja um inteiro. Ou seja, 1,1 vai ser arredondado para 2. 1,9 vai ser arredondado para 2.

[4] Caso mais de uma combinação de V,K fizer os mesmos T ou mais pontos com a atual lista de V,M, você pode escolher aleatoriamente qualquer uma.

 

Como pode ver, o fato de o mesmo algoritmo criar matrizes com B de tamanhos distintos está relacionado ao fato da escolha aleatória nos passos 2) e passo 6.2) quando cai no caso da nota [4]. Também, você pode observar que algumas coisas foram postas para você aprender a como calcular o mínimo teórico, que as vezes pode ser a menor matriz possível. A menor matriz possível vai ser sempre maior ou igual ao mínimo teórico.

 

Outra coisa que posso passar aqui é o cálculo do mínimo teórico de matrizes V,K,T, onde T=M. Aqui é a fórmula de Schonheim.

 

A fórmula de Schonheim é diferente do mínimo teórico apresentado no meu algoritmo. A fórmula de Schonheim pode ser maior ou igual ao mínimo teórico.

 

Ainda existem dois outros algoritmos que conheço para redução, que são: recozimento simulado e o PDO (Problem Dependent Optimization). Aqui neste tópico você vai encontrar maiores informações.

 

 

Eu fiz um algoritmo parecido, vou tomar como exemplo a mega sena, combinado 10 números em conjuntos 6 em 6 é igual 210 jogos,  se eu quero fazer um fechamento para garantir a quadra crio conjuntos 4 em 4 que da também 210. Aplicando a redução ou comparando as lista 1 e lista2, me retorna 23 volantes 100%. 4 acertos.

o meu grande problema que tenho que varrer duas lista e processo se torna lento. eu busco é forma de processo ser mais rápido por isso a minha pergunta.

segue abaixo:

1;2;3;4;5;6
1;2;3;4;8;10
1;2;3;5;7;10
1;2;3;7;8;9
1;2;4;6;7;9
1;2;5;6;7;8
1;2;5;6;9;10
1;2;6;8;9;10
1;3;4;5;7;9
1;3;5;6;8;9
1;3;6;7;9;10
1;4;5;6;9;10
1;4;5;7;8;10
1;4;6;8;9;10
2;3;4;5;7;10
2;3;4;5;8;9
2;3;4;6;7;8
2;3;4;6;9;10
2;4;6;7;9;10
2;5;7;8;9;10
3;5;6;7;8;10
3;5;6;8;9;10
4;5;6;7;8;9

Link to comment
Share on other sites

  • 2 weeks later...

@Joelsonc3

 

Tem o sistema de chaves dos italianos
https://wheels.forumcommunity.net/?t=47707480

 


https://ljcr.dmgordon.org/cover/table.html

https://ljcr.dmgordon.org/cover/show_cover.php?v=10&k=6&t=4
Method of Construction: random greedy covering
Lower Bound: Schonheim

 

C(10,6,4) = 20  |  C(10,06,04,04) = 20 linhas

2  3  5  6  7  8
1  3  7  8  9 10
1  2  4  6  8  9
1  2  3  4  5 10
4  5  6  7  9 10
2  3  4  6  7 10
1  3  4  5  7  9
2  3  4  8  9 10
1  2  5  7  8 10
3  5  6  8  9 10
1  2  3  6  7  9
2  4  5  7  8  9
1  3  4  5  6  8
1  2  5  6  9 10
1  4  6  7  8 10
2  3  4  5  6  9
1  5  6  7  8  9
1  2  3  6  8 10
3  4  5  7  8 10
1  2  4  7  9 10

Link to comment
Share on other sites

 @Joelsonc3

o meu grande problema que tenho que varrer duas lista e processo se torna lento. eu busco é forma de processo ser mais rápido por isso a minha pergunta.

 

Ok, eu não sei outra forma de fazer sem ter que varrer duas lista, mas e se usar um Parallel.For?

Bom desculpa por não poder ajudar.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...