Náhodné čísla bez opakovania

Formulácia problému

Predpokladajme, že potrebujeme vytvoriť množinu celých náhodných čísel bez opakovaní v danom rozsahu hodnôt. Príklady na cestách:

  • generovanie jedinečných náhodných kódov pre produkty alebo používateľov
  • priraďovanie ľudí k úlohám (každý náhodne zo zoznamu)
  • permutácia slov vo vyhľadávacom dopyte (ahoj seo-shnikam)
  • hrať loto atď.

Metóda 1. Jednoduchá

Na začiatok zvážme jednoduchú možnosť: potrebujeme získať náhodnú množinu 10 celých čísel od 1 do 10. Pomocou funkcie zabudovanej v Exceli MEDZI PRÍPADOM (HRANA MEDZI) jedinečnosť nie je zaručená. Ak ho zadáte do bunky v hárku a skopírujete ho o 10 buniek, môže sa ľahko stať, že dôjde k opakovaniu:

Náhodné čísla bez opakovania

Preto pôjdeme inou cestou.

Všetky verzie Excelu majú funkciu RANK (RANG), určený na zoraďovanie alebo inak povedané určenie vrchnej pozície čísla v sade. Najväčšie číslo v zozname má poradie=1, druhé na vrchu má poradie=2 atď.

Zadáme funkciu do bunky A2 SLCHIS (RAND) bez argumentov a skopírujte vzorec o 10 buniek. Táto funkcia nám vygeneruje množinu 10 náhodných zlomkových čísel od 0 do 1:

Náhodné čísla bez opakovania

V ďalšom stĺpci predstavíme funkciu RANKna určenie pozície v rebríčku pre každé prijaté náhodné číslo:

Náhodné čísla bez opakovania

V stĺpci B dostaneme to, čo sme chceli – ľubovoľný požadovaný počet neopakujúcich sa náhodných celých čísel od 1 do 10.

Čisto teoreticky môže nastať situácia, kedy SLCHIS nám dá dve rovnaké náhodné čísla v stĺpci A, ich poradie sa bude zhodovať a dostaneme opakovanie v stĺpci B. Pravdepodobnosť takéhoto scenára je však extrémne malá, vzhľadom na skutočnosť, že presnosť je na 15 desatinných miest.

Metóda 2. Zložitá

Táto metóda je o niečo zložitejšia, ale používa iba jeden vzorec poľa. Povedzme, že potrebujeme na hárku vytvoriť zoznam 9 neopakujúcich sa náhodných celých čísel v rozsahu od 1 do 50.

Do bunky A2 zadajte nasledujúci vzorec a kliknite na koniec Ctrl + Shift + Enter (ak ho chcete zadať ako vzorec poľa!) a skopírujte vzorec nadol na požadovaný počet buniek:

Náhodné čísla bez opakovania

Metóda 3. Makro

A, samozrejme, problém môžete vyriešiť pomocou programovania vo Visual Basicu. V jednom zo starých článkov o náhodnom vzorkovaní som už citoval funkciu makra Lotto pole, ktorá produkuje požadovaný počet náhodných neopakujúcich sa čísel z daného intervalu.

  • Ako spočítať počet jedinečných hodnôt v rozsahu
  • Náhodný výber prvkov zo zoznamu

Nechaj odpoveď