@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.