Shuffle() vs random_shuffle() v C++

Shuffle Vs Random Shuffle V C



V C++ poskytuje standardní knihovna dvě funkce, zamíchat() a random_shuffle() které se používají k přeskupení prvků kontejneru. Přestože obě funkce slouží stejnému účelu, liší se svou implementací a způsobem generování náhodných čísel.

V tomto článku najdete rozdíly mezi těmito dvěma funkcemi a pochopíte, jak fungují.

shuffle() v C++

The zamíchat() funkce je vestavěná funkce C++ používaná k náhodnému promíchání nebo přeskupení prvků v daném rozsahu. Funkce je deklarována v záhlaví souboru a má dva argumenty: počáteční pozice rozsahu je první argument a druhý argument představuje koncovou pozici.







Kromě toho také přebírá volitelný třetí parametr, což je funkční objekt, který generuje náhodná čísla, která se mají použít k zamíchání prvků v rozsahu.



Když zamíchat() Pokud je zavolána funkce, náhodně změní pořadí prvků v určeném rozsahu pomocí poskytnutého generátoru náhodných čísel. Výsledek míchání není předvídatelný a každá možná permutace prvků je stejně pravděpodobná.



Příklad

Zvažte níže uvedený příklad použití funkce shuffle(). v C++. V tomto programu jsme vytvořili vektor věc s celočíselnými hodnotami 0 až 10. Poté vygenerujeme generátor náhodných čísel, který se pak předá spolu s rozsahem vektoru zamíchat() funkce. The zamíchat() funkce vezme číslo a vymění prvky na základě tohoto čísla. Potom jsme vytiskli přeskupenou vektorovou sekvenci pomocí cyklu for





#include

#include

#include

#include

#include

pomocí jmenného prostoru std ;

int hlavní ( )

{

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

nepodepsaný semínko = chrono :: systémové_hodiny :: Nyní ( ) . čas_od_epochy ( ) . počet ( ) ;

zamíchat ( věc. začít ( ) , věc. konec ( ) , default_random_engine ( semínko ) ) ;

cout << 'zamíchané prvky jsou:' ;

pro ( int & i : věc )

cout << ' ' << i ;

cout << endl ;

vrátit se 0 ;

}

random_shuffle() v C++

The random_shuffle() funkce také náhodně přeskupí prvky v daném rozsahu pomocí nějakého náhodně vybraného čísla. Využívá generátor náhodných čísel ke generování posloupnosti náhodných čísel a poté tato čísla používá k zamíchání prvků v rozsahu, takže posloupnost programu bude při každém spuštění programu jiná.



Jsou vyžadovány dva parametry random_shuffle() : počáteční pozice rozsahu je první parametr a druhý parametr je koncová pozice. Dodatečně, random_shuffle() může mít volitelný třetí parametr, což je funkční objekt, který lze použít ke generování náhodných čísel pro míchání prvků.

Příklad

Níže uvedený příklad ilustruje fungování random_shuffle() v C++. V tomto kódu jsme vytvořili a vector věc s celočíselnými hodnotami od 1 do 10 a poté použil pro smyčku pro tisk náhodně zamíchané sekvence:

#include

#include

pomocí jmenného prostoru std ;

int hlavní ( )

{

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

srand ( static_cast < nepodepsaný int > ( čas ( nullptr ) ) ) ;

náhodné_zamíchat ( věc. začít ( ) , věc. konec ( ) ) ;

pro ( int i : věc ) {

cout << i << '' ;

}

cout << ' \n ' ;



vrátit se 0 ;

}

Rozdíl mezi shuffle() a random_shuffle()

Zde jsou klíčové rozdíly mezi zamíchat() a random_shuffle() funkce v C++.

1: random_shuffle() vezme dvojici iterátorů představujících rozsah prvků, které se mají zamíchat, zatímco zamíchat() bere dvojici iterátorů reprezentujících rozsah prvků, které se mají zamíchat, a také generátor náhodných čísel, který se má pro míchání použít.

2: random_shuffle() je obecně méně efektivní než zamíchat() , protože musí generovat sekvenci náhodných čísel, která se použije pro míchání.

3: random_shuffle() používá interní implementaci generátoru náhodných čísel standardní knihovny C++ k promíchání prvků zamíchat() umožňuje určit vlastní generátor náhodných čísel, který se má použít pro míchání, což vám dává větší kontrolu nad náhodností míchání.

4: random_shuffle() bylo zavedeno v C++98 a je podporován všemi verzemi standardní knihovny C++ zamíchat() byl představen v C++11 a je podporován pouze kompilátory, které implementují tuto verzi standardu.

Závěrečné myšlenky

Volba mezi zamíchat() a random_shuffle() závisí na vašem konkrétním případu použití a požadavcích. Pokud potřebujete větší kontrolu nad náhodností míchání nebo pokud chcete použít vlastní generátor náhodných čísel, pak zamíchat() by byla lepší volba. Na druhou stranu, pokud nepotřebujete takovou úroveň kontroly a chcete jen jednoduchý způsob, jak zamíchat prvky, pak random_shuffle() by mohlo být dostačující.