Случайни числа без повторения

Формулиране на проблема

Да приемем, че трябва да създадем набор от цели числа произволни числа без повторения в даден диапазон от стойности. Примери в движение:

  • генериране на уникални случайни кодове за продукти или потребители
  • възлагане на хора на задачи (всеки произволен от списъка)
  • пермутация на думи в заявката за търсене (здравей seo-shnikam)
  • игра на тото и др.

Метод 1. Прост

Като начало, нека разгледаме една проста опция: трябва да получим случаен набор от 10 цели числа от 1 до 10. Използване на функцията, вградена в Excel МЕЖДУ СЛУЧАЯ (РАБ МЕЖДУ) уникалността не е гарантирана. Ако го въведете в клетка на лист и го копирате надолу 10 клетки, тогава лесно могат да се случат повторения:

Случайни числа без повторения

Затова ще тръгнем по обратния път.

Всички версии на Excel имат функция RANK (ЗВЪННА), предназначени за класиране или с други думи определяне на горна позиция на число в набор. Най-големият номер в списъка е с ранг=1, вторият отгоре е с ранг=2 и т.н.

Нека въведем функцията в клетка A2 СЛЧИС (РАНД) без аргументи и копирайте формулата 10 клетки надолу. Тази функция ще ни генерира набор от 10 произволни дробни числа от 0 до 1:

Случайни числа без повторения

В следващата колона представяме функцията RANKза определяне на позицията в класирането за всяко получено произволно число:

Случайни числа без повторения

Получаваме в колона B това, което искахме – произволен брой неповтарящи се случайни цели числа от 1 до 10.

Чисто теоретично може да възникне ситуация, когато СЛЧИС ще ни даде две еднакви произволни числа в колона A, ранговете им ще съвпаднат и ще получим повторение в колона B. Вероятността за такъв сценарий обаче е изключително малка, предвид факта, че точността е 15 знака след десетичната запетая.

Метод 2. Сложен

Този метод е малко по-сложен, но използва само една формула за масив. Да кажем, че трябва да създадем списък от 9 неповтарящи се случайни цели числа в диапазона от 1 до 50 на лист.

Въведете следната формула в клетка A2, щракнете в края Ctrl + Shift + Enter (за да го въведете като формула за масив!) и копирайте формулата до желания брой клетки:

Случайни числа без повторения

Метод 3. Макро

И, разбира се, можете да разрешите проблема с помощта на програмиране на Visual Basic. В една от старите статии за произволна извадка вече цитирах макро функцията Lotto array, която произвежда необходимия брой произволни неповтарящи се числа от даден интервал.

  • Как да преброим броя на уникалните стойности в диапазон
  • Произволен избор на елементи от списък

Оставете коментар