Números aleatórios sem repetições

Formulação do problema

Vamos supor que precisamos criar um conjunto de números aleatórios inteiros sem repetições em um determinado intervalo de valores. Exemplos em movimento:

  • gerando códigos aleatórios exclusivos para produtos ou usuários
  • atribuir pessoas a tarefas (cada uma aleatoriamente da lista)
  • permutação de palavras na consulta de pesquisa (olá seo-shnikam)
  • jogando na loteria etc

Método 1. Simples

Para começar, vamos considerar uma opção simples: precisamos obter um conjunto aleatório de 10 inteiros de 1 a 10. Usando a função incorporada ao Excel ENTRE O CASO (BORDA ENTRE) a exclusividade não é garantida. Se você inseri-lo em uma célula da planilha e copiá-lo em 10 células, as repetições podem acontecer facilmente:

Números aleatórios sem repetições

Portanto, iremos por outro caminho.

Todas as versões do Excel têm uma função RANK (TOCOU), destinado a classificar ou, em outras palavras, determinar a posição superior de um número em um conjunto. O maior número na lista tem rank=1, o segundo no topo tem rank=2 e assim por diante.

Vamos inserir a função na célula A2 SLCHIS (RAND) sem argumentos e copie a fórmula em 10 células. Esta função nos gerará um conjunto de 10 números fracionários aleatórios de 0 a 1:

Números aleatórios sem repetições

Na próxima coluna introduzimos a função RANKpara determinar a posição no ranking para cada número aleatório recebido:

Números aleatórios sem repetições

Obtemos na coluna B o que queríamos – qualquer número desejado de inteiros aleatórios não repetidos de 1 a 10.

Puramente teoricamente, uma situação pode surgir quando SLCHIS nos dará dois números aleatórios idênticos na coluna A, seus ranks serão iguais e teremos uma repetição na coluna B. No entanto, a probabilidade de tal cenário é extremamente pequena, dado que a precisão é de 15 casas decimais.

Método 2. Complicado

Esse método é um pouco mais complicado, mas usa apenas uma fórmula de matriz. Digamos que precisamos criar uma lista de 9 inteiros aleatórios não repetidos no intervalo de 1 a 50 em uma folha.

Digite a seguinte fórmula na célula A2, clique no final Ctrl + Shift + Enter (para inseri-lo como uma fórmula de matriz!) e copie a fórmula para o número desejado de células:

Números aleatórios sem repetições

Método 3. Macro

E, claro, você pode resolver o problema usando programação em Visual Basic. Em um dos artigos antigos sobre amostragem aleatória, já citei a função macro Lotto array, que produz o número necessário de números aleatórios não repetidos a partir de um determinado intervalo.

  • Como contar o número de valores únicos em um intervalo
  • Seleção aleatória de elementos de uma lista

Deixe um comentário