Shuffle() vs random_shuffle() σε C++

Shuffle Vs Random Shuffle Se C



Στην C++, η τυπική βιβλιοθήκη παρέχει δύο λειτουργίες, ανάμιξη() και random_shuffle() που χρησιμοποιούνται για την αναδιάταξη των στοιχείων ενός δοχείου. Αν και και οι δύο συναρτήσεις εξυπηρετούν τον ίδιο σκοπό, διαφέρουν ως προς την υλοποίησή τους και τον τρόπο με τον οποίο δημιουργούν τυχαίους αριθμούς.

Από αυτό το άρθρο, θα βρείτε τις διαφορές μεταξύ αυτών των δύο λειτουργιών και θα καταλάβετε πώς λειτουργούν.

shuffle() σε C++

ο ανάμιξη() Η συνάρτηση είναι μια ενσωματωμένη συνάρτηση C++ που χρησιμοποιείται για την τυχαία τυχαία αναπαραγωγή ή αναδιάταξη των στοιχείων σε μια δεδομένη περιοχή. Η συνάρτηση δηλώνεται στο αρχείο κεφαλίδας και έχει δύο ορίσματα: η αρχική θέση της περιοχής είναι το πρώτο όρισμα και το δεύτερο όρισμα αντιπροσωπεύει την τελική θέση.







Επιπλέον, λαμβάνει επίσης μια προαιρετική τρίτη παράμετρο, η οποία είναι ένα αντικείμενο συνάρτησης που δημιουργεί τυχαίους αριθμούς που θα χρησιμοποιηθούν για την ανακάτεμα των στοιχείων στην περιοχή.



Οταν ο ανάμιξη() καλείται η συνάρτηση, αναδιατάσσει τυχαία τα στοιχεία στο καθορισμένο εύρος χρησιμοποιώντας την παρεχόμενη γεννήτρια τυχαίων αριθμών. Το αποτέλεσμα της ανακατεύθυνσης δεν είναι προβλέψιμο και κάθε πιθανή μετάθεση των στοιχείων είναι εξίσου πιθανό να συμβεί.



Παράδειγμα

Εξετάστε το παρακάτω παράδειγμα χρήσης του λειτουργία shuffle(). σε C++. Σε αυτό το πρόγραμμα, δημιουργήσαμε το διάνυσμα ένα πράγμα με τις ακέραιες τιμές από το 0 έως το 10. Στη συνέχεια, δημιουργούμε μια γεννήτρια τυχαίων αριθμών, η οποία στη συνέχεια μεταβιβάζεται μαζί με το εύρος του διανύσματος στο ανάμιξη() λειτουργία. ο ανάμιξη() Η συνάρτηση παίρνει τον αριθμό και ανταλλάσσει τα στοιχεία με βάση αυτόν τον αριθμό. Στη συνέχεια εκτυπώσαμε την αναδιαταγμένη διανυσματική ακολουθία χρησιμοποιώντας τον βρόχο for





#include

#include <διάνυσμα>

#include <αλγόριθμος>

#include <τυχαία>

#include

χρησιμοποιώντας το namespace std ;

ενθ κύριος ( )

{

διάνυσμα < ενθ > ένα πράγμα { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 } ;

ανυπόγραφο σπόρος = χρονο :: system_clock :: τώρα ( ) . χρόνος_από την εποχή ( ) . μετρώ ( ) ;

ανάμιξη ( ένα πράγμα. αρχίζουν ( ) , ένα πράγμα. τέλος ( ) , default_random_engine ( σπόρος ) ) ;

cout << 'τα ανακατεμένα στοιχεία είναι:' ;

Για ( ενθ & Εγώ : ένα πράγμα )

cout << '' << Εγώ ;

cout << endl ;

ΕΠΙΣΤΡΟΦΗ 0 ;

}

random_shuffle() σε C++

ο random_shuffle() Η συνάρτηση αναδιατάσσει επίσης τυχαία τα στοιχεία στη δεδομένη περιοχή με κάποιον τυχαία επιλεγμένο αριθμό. Χρησιμοποιεί μια γεννήτρια τυχαίων αριθμών για να δημιουργήσει μια ακολουθία τυχαίων αριθμών και στη συνέχεια χρησιμοποιεί αυτούς τους αριθμούς για να ανακατέψει τα στοιχεία στο εύρος, έτσι η ακολουθία του προγράμματος θα είναι διαφορετική κάθε φορά που εκτελείτε το πρόγραμμα.



Απαιτούνται δύο παράμετροι για random_shuffle() : η αρχική θέση του εύρους είναι η πρώτη παράμετρος και η δεύτερη παράμετρος είναι η τελική θέση. Επιπροσθέτως, random_shuffle() μπορεί να λάβει μια προαιρετική τρίτη παράμετρο, η οποία είναι ένα αντικείμενο συνάρτησης που μπορεί να χρησιμοποιηθεί για τη δημιουργία των τυχαίων αριθμών για την ανακάτεμα των στοιχείων.

Παράδειγμα

Το παρακάτω παράδειγμα επεξηγεί τη λειτουργία του random_shuffle() σε C++. Σε αυτόν τον κώδικα, δημιουργήσαμε ένα διανυσματικό πράγμα με ακέραιους αριθμούς τιμές από 1 έως 10 και στη συνέχεια χρησιμοποίησε το για βρόχο για να εκτυπώσετε την τυχαία ανακατεμένη ακολουθία:

#include

#include <αλγόριθμος>

χρησιμοποιώντας το namespace std ;

ενθ κύριος ( )

{

διάνυσμα < ενθ > ένα πράγμα { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 } ;

srand ( static_cast < ανυπόγραφο ενθ > ( χρόνος ( nullptr ) ) ) ;

τυχαία_ανακατεύθυνση ( ένα πράγμα. αρχίζουν ( ) , ένα πράγμα. τέλος ( ) ) ;

Για ( ενθ Εγώ : ένα πράγμα ) {

cout << Εγώ << '' ;

}

cout << ' \n ' ;



ΕΠΙΣΤΡΟΦΗ 0 ;

}

Διαφορά μεταξύ shuffle() και random_shuffle()

Εδώ είναι οι βασικές διαφορές μεταξύ ανάμιξη() και random_shuffle() συναρτήσεις σε C++.

1: random_shuffle() παίρνει ένα ζεύγος επαναλήπτες που αντιπροσωπεύουν το εύρος των στοιχείων προς ανακάτεμα, ενώ ανάμιξη() παίρνει ένα ζεύγος επαναλήπτες που αντιπροσωπεύουν το εύρος των στοιχείων προς ανακάτεμα, καθώς και μια γεννήτρια τυχαίων αριθμών για χρήση για ανακάτεμα.

2: random_shuffle() είναι γενικά λιγότερο αποτελεσματική από ανάμιξη() , καθώς πρέπει να δημιουργήσει μια ακολουθία τυχαίων αριθμών για χρήση για ανακάτεμα.

3: random_shuffle() χρησιμοποιεί την εσωτερική υλοποίηση της γεννήτριας τυχαίων αριθμών της C++ Standard Library για να ανακατέψει τα στοιχεία, ενώ ανάμιξη() σας επιτρέπει να καθορίσετε τη δική σας γεννήτρια τυχαίων αριθμών που θα χρησιμοποιήσετε για ανακάτεμα, δίνοντάς σας περισσότερο έλεγχο της τυχαιότητας της τυχαίας αναπαραγωγής.

4: Η random_shuffle() εισήχθη στη C++98 και υποστηρίζεται από όλες τις εκδόσεις της C++ Standard Library, ενώ ανάμιξη() εισήχθη στην C++11 και υποστηρίζεται μόνο από μεταγλωττιστές που υλοποιούν αυτήν την έκδοση του προτύπου.

Τελικές σκέψεις

Η επιλογή μεταξύ ανάμιξη() και random_shuffle() εξαρτάται από τη συγκεκριμένη περίπτωση χρήσης και τις απαιτήσεις σας. Εάν χρειάζεστε περισσότερο έλεγχο σχετικά με την τυχαιότητα της τυχαίας αναπαραγωγής ή εάν θέλετε να χρησιμοποιήσετε μια προσαρμοσμένη γεννήτρια τυχαίων αριθμών, τότε ανάμιξη() θα ήταν καλύτερη επιλογή. Από την άλλη πλευρά, εάν δεν χρειάζεστε αυτό το επίπεδο ελέγχου και θέλετε απλώς έναν απλό τρόπο για να ανακατεύετε στοιχεία, τότε random_shuffle() θα μπορούσε να είναι επαρκής.