Joelsonc3
-
Posts
7 -
Joined
-
Last visited
Content Type
Profiles
Forums
Downloads
Posts posted by Joelsonc3
-
-
Em 13/01/2024 em 17:09, Ralf Jones disse:
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 -
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 declarationint 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);
}
}- 1
-
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
resultado1 2 3
1 4 5
2 3 4
2 3 5
-
Bem o algoritmos pelo eu entendi, você tá querendo dessa forma:
1 2 3 4 vai ate 15
1 2
1 3
1 4 assim até 15
Depois com
1 2 3 4 5 6 ate 15
1 2 3
1 2 4
1 2 5 assim ate 15
Trabalhando conjunto 2, depois 3, depois 4, 5, 6, 7 isso não é difícil de fazer, o meu problema está justamente no padrão v k t m =b
Se alguém poder me enviar como fazer essa rotação, posto a matriz completa.
- 2
-
Em 29/05/2019 em 01:45, Wata disse:
Vou deixar algo aqui caso interesse a alguém que possa desenvolver, ou queira comentar...
A questão é encontrar um desdobramento que dê lucro se acertar 15 em 23 dezenas na Lotofácil (mas poderia ser qualquer outra coisa semelhante, já que é uma ideia bem genérica......);
Segue meu “algoritmo”:
1° gerar todas as linhas de 15dz. possíveis entre 23dz. totais;
C23,15 = 490.314 (linhas de 15dz.)
2° Combinar todas essas 490.314 linhas de 2 em 2 linhas (vai dar um valor grande o suficiente para eu não querer escrevê-lo aqui......);
3° Testar cada um desses grupos (desdobramentos) de 2 linhas contra todas as 490.314 linhas, até encontrar (se possível) um deles que dê lucro em todas as 490.314 linhas (que são todos os resultados possíveis SE 15 em 23);
4° Caso exista algum desses desdobramentos (gerados no passo 2°) que dê lucro em qualquer um dos 490.314 resultados possíveis, então está finalizado a tarefa e teremos nosso desejado desdobramento com 100% lucro SE 15 em 23......;
5° Caso não encontrado nenhum desdobramento de 2 linhas com 100% lucro SE 15 em 23 , gerar todas as combinações de 490.314 linhas de 3 em 3 linhas (vai dar um valor grande o suficiente para eu não querer escrevê-lo aqui[2]......) e testar contra os 490.314 resultados possíveis até encontrar (se possível) algum que seja 100% lucro SE 15 em 23;
6° E assim sucessivamente (com desdobramentos de 4 linhas, 5 linhas, 6 linhas...) até que seja encontrado (se é que existe......) o tal desdobramento que dê 100% lucro SE 15 em 23 (isso se seu equipamento não queimou ou vc ainda não desistiu......);
Bom, isso me leva a pensar que muitas coisas em loterias são, na teoria, simples... a questão são os recursos necessários para executá-las...
E isso me leva a pensar outra coisa: Será que no futuro, com “computadores mágicos” (que podem fazer aquilo que vc pensar, mesmo vc não entendendo p**** nenhuma de como ele faz aquilo), as loterias (nos modelos que temos hoje...) poderão ser “facilmente” vencidas?
...
-
Bom dia
Pessoal talvez esse assunto já seja muito batido na net, mais eu não achei uma solução, eu estou querendo uma luz.
Fechamento para acerto de terno na quina.
o objetivo e acertar a logica do fechamento.
Combinando 8 dezenas de grupos de 5 é igual 56 volantes, dentro desses 56 volantes a vários ternos repetidos, gostaria de remover esses ternos repetidos.
detalhe não se preocupem com gerador ou quantidade para combinar.
minha duvida:
no código abaixo ele me apresenta a seguinte matriz.
onde está o meu erro de logica, pois tem conjunto de três iguais
que não encontro no fechamento na matriz abaixo.está na matriz abaixo, tem:
123, 124, 125,134,135,145,234,234,345,
126,127,128,267,267,278,345,346,347,356,357,367.não está na matriz abaixo, não tem:
1 3 6; 1 3 7; 1 3 8; 1 4 6; 1 4 7; 1 4 8; 1 5 6; 1 5 7; 1 5 8;
2 3 6; 2 3 7; 2 3 8; 2 4 5; 2 4 6; 2 4 7; 2 4 8; 2 5 6; 2 5 7;
2 5 8; 2 6 7; 2 6 8; 2 7 8; 3 4 8; 3 5 6; 3 5 7; 3 5 8; 3 6 7;
3 6 8; 3 7 8; 4 5 8; 4 6 7; 4 6 8; 4 7 8; 5 6 8; 5 7 8; 6 7 8;matriz do código:
1 2 3 4 5
1 2 6 7 8
3 4 5 6 7como a matriz deve ficar:
1 2 3 4 6;
1 2 3 5 8;
1 2 4 7 8;
1 3 6 7 8;
1 4 5 6 7;
2 3 4 5 7;
2 5 6 7 8;
3 4 5 6 8;package br.Exercicio;
import java.util.Scanner;
public class CombinaReduzido {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int[] vetA = new int[5];
int[][] array = new int[99999][5];
int num = 0, iguais = 0,cont = 0, total = 0;System.out.println("Digite numero Comb:");
num = scan.nextInt();for (int n1 = 1; n1 <= num; n1++) {
vetA[0] = n1;
for (int n2 =n1 + 1;n2 <= num; n2++) {
vetA[1] = n2;
for (int n3 =n2 + 1;n3 <= num; n3++) {
vetA[2] = n3;
for (int n4 =n3 + 1;n4 <= num; n4++) {
vetA[3] = n4;
for (int n5 =n4 + 1;n5 <= num; n5++) {
vetA[4] = n5;total++;
for (int t = 0; t <= cont; t++) {
iguais = 0;
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (vetA == array[t][j]) {
iguais = iguais + 1;
}
}
}
if (iguais > 3) {
break;
}
}
if (iguais < 3) {
cont = cont + 1;
for (int x = 0; x < 5; x++) {
array[cont][x] = vetA[x];
}
System.out.println(" "+vetA[0]+" "+vetA[1]+" "+ vetA[2]+" "+ vetA[3]+" "+vetA[4]);
}}
}
}
}
}
System.out.println("reduzidos:"+ cont);
System.out.println("total gerados:"+ total);
}
}
COMO SE MONTA UMA MATRIZ OTIMIZADA ! ! !
in LotoFacil
Posted
pelo que eu entendi do seu exemplo eu simplifique
veja tenho a seguinte combinação 5 numeros de 2 a 2 é igual 10.
quero forma grupos de 3.
temos as combinações 2 a 2:
1;2
1;3
1;4
1;5
2;3
2;4
2;5
3;4
3;5
4;5
queremos montar os grupos baseados na lista acima de 3.
primeiro grupo a ser montado é 1;2 1;3 temos = 1;1;2;3
removendo o duplicado o grupo é 1;2;3
proximo grupo a ser montado é 1;4 1;5 temos = 1;1;4;5
removendo o duplicado o grupo é 1;4;5
proximo grupo a ser montado é 2;3 2;4 temos = 2;2;3;4
removendo o duplicado o grupo é 2;3;4
aqui temos uma inconcistencia. se você pudesse explicar melhor
para uma resolução.
proximo grupo a ser montado é 2;5 3;4 temos = 2;3;4;5
grupo é maior do que 3.
reservamos 3;4
proximo grupo a ser montado preservamos do anterior 2;5 com proximo 3,5 temos = 2;3;5;5
removendo o duplicado o grupo é 2;3;5
proximo grupo a ser montado preservamos 3;4 4,5 temos = 3;4;4;5
removendo o duplicado o grupo é 3;4;5
os grupos:
1;2;3
1;4;5
2;3;4
2;3;5
3;4;5
aguardo sua resposta.