Shuffle() vs random_shuffle() v C++

Shuffle Vs Random Shuffle V C



V C++ štandardná knižnica poskytuje dve funkcie, zamiešať () a random_shuffle() ktoré sa používajú na preusporiadanie prvkov kontajnera. Hoci obe funkcie slúžia na rovnaký účel, líšia sa vo svojej implementácii a v spôsobe, akým generujú náhodné čísla.

V tomto článku nájdete rozdiely medzi týmito dvoma funkciami a pochopíte, ako fungujú.

shuffle() v C++

The zamiešať () funkcia je vstavaná funkcia C++ používaná na náhodné premiešanie alebo preusporiadanie prvkov v danom rozsahu. Funkcia je deklarovaná v hlavičkového súboru a má dva argumenty: začiatočná pozícia rozsahu je prvý argument a druhý argument predstavuje koncovú pozíciu.







Okrem toho má aj voliteľný tretí parameter, ktorým je funkčný objekt, ktorý generuje náhodné čísla, ktoré sa použijú na premiešanie prvkov v rozsahu.



Keď zamiešať () Ak sa zavolá funkcia, náhodne zmení poradie prvkov v zadanom rozsahu pomocou poskytnutého generátora náhodných čísel. Výsledok miešania nie je predvídateľný a každá možná permutácia prvkov je rovnako pravdepodobná.



Príklad

Zvážte nižšie uvedený príklad použitia funkcia shuffle(). v C++. V tomto programe sme vytvorili vektor vec s celočíselnými hodnotami 0 až 10. Potom vygenerujeme generátor náhodných čísel, ktorý sa potom spolu s rozsahom vektora odovzdá zamiešať () funkciu. The zamiešať () funkcia vezme číslo a vymení prvky na základe tohto čísla. Potom sme vytlačili preusporiadanú vektorovú sekvenciu pomocou cyklu for





#include

#include

#include

#include

#include

pomocou menného priestoru std ;

int Hlavná ( )

{

vektor < int > vec { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 } ;

nepodpísané semeno = chrono :: systémové_hodiny :: teraz ( ) . čas_od_epochy ( ) . počítať ( ) ;

zamiešať ( vec. začať ( ) , vec. koniec ( ) , default_random_engine ( semeno ) ) ;

cout << 'zamiešané prvky sú:' ;

pre ( int & i : vec )

cout << ' ' << i ;

cout << endl ;

vrátiť 0 ;

}

random_shuffle() v C++

The random_shuffle() funkcia tiež náhodne preusporiada prvky v danom rozsahu pomocou nejakého náhodne vybraného čísla. Používa generátor náhodných čísel na generovanie postupnosti náhodných čísel a potom tieto čísla používa na premiešanie prvkov v rozsahu, takže postupnosť programu bude pri každom spustení programu iná.



Na to sú potrebné dva parametre random_shuffle() : počiatočná pozícia rozsahu je prvý parameter a druhý parameter je koncová pozícia. okrem toho random_shuffle() môže mať voliteľný tretí parameter, ktorým je funkčný objekt, ktorý možno použiť na generovanie náhodných čísel na miešanie prvkov.

Príklad

Nasledujúci príklad ilustruje fungovanie random_shuffle() v C++. V tomto kóde sme vytvorili a vector vec s celočíselnými hodnotami od 1 do 10 a potom sa použil pre slučku ak chcete vytlačiť náhodne zamiešanú sekvenciu:

#include

#include

pomocou menného priestoru std ;

int Hlavná ( )

{

vektor < int > vec { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 } ;

srand ( static_cast < nepodpísané int > ( čas ( nullptr ) ) ) ;

náhodné_zamiešať ( vec. začať ( ) , vec. koniec ( ) ) ;

pre ( int i : vec ) {

cout << i << '' ;

}

cout << ' \n ' ;



vrátiť 0 ;

}

Rozdiel medzi shuffle() a random_shuffle()

Tu sú kľúčové rozdiely medzi zamiešať () a random_shuffle() funkcie v C++.

1: random_shuffle() berie dvojicu iterátorov reprezentujúcich rozsah prvkov, ktoré sa majú zamiešať, zatiaľ čo zamiešať () berie dvojicu iterátorov reprezentujúcich rozsah prvkov, ktoré sa majú zamiešať, ako aj generátor náhodných čísel, ktorý sa má použiť na miešanie.

2: random_shuffle() je vo všeobecnosti menej efektívny ako zamiešať () , pretože musí generovať postupnosť náhodných čísel, ktoré sa majú použiť na miešanie.

3: random_shuffle() používa internú implementáciu generátora náhodných čísel štandardnej knižnice C++ na premiešanie prvkov zamiešať () vám umožňuje určiť vlastný generátor náhodných čísel, ktorý sa má použiť na miešanie, čo vám dáva väčšiu kontrolu nad náhodnosťou miešania.

4: random_shuffle() bolo predstavené v C++98 a je podporovaný všetkými verziami štandardnej knižnice C++ zamiešať () bol predstavený v C++ 11 a je podporovaný iba kompilátormi, ktoré implementujú túto verziu štandardu.

Záverečné myšlienky

Voľba medzi zamiešať () a random_shuffle() závisí od vášho konkrétneho prípadu použitia a požiadaviek. Ak potrebujete väčšiu kontrolu nad náhodnosťou miešania alebo ak chcete použiť vlastný generátor náhodných čísel, potom zamiešať () by bola lepšia voľba. Na druhej strane, ak nepotrebujete túto úroveň kontroly a chcete jednoduchý spôsob premiešania prvkov, potom random_shuffle() by mohlo byť dostatočné.