Skip to content

generalborov/shuffle

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 

Repository files navigation

Shuffle

Это реализация функций shuffle и deshuffle. В обоих функциях применяется детерминированный способ генерации случайных чисел на основе xorshift64.

shuffle

Алгоритм прост: проходимся по нашему массиву с первого до последнего элемента, генерируя случайный индекс на основе числа и делая перестановку местами элементов.

deshuffle

Реализует обратный алгоритм. Проходимся по массиву с последнего элемента до первого, генерируя случайные числа в обратном порядке на основе числа и делая перестановку местами элементов.

пример использования

#include "shuffle.hpp"
#include <iostream>
#include <vector>

int main() {

    std::vector<std::string> vec = { "a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "a10" };
    std::uint64_t seed = 1234;
    
    std::cout << "Оригинальный массив: " << "\n";
    for (auto &&i : vec)
    {
        std::cout << i << " ";
    } std::cout << std::endl;
    
    shuffle(vec, seed);
    
    std::cout << "Перемешанный массив: " << "\n";
    for (auto &&i : vec)
    {
        std::cout << i << " ";
    } std::cout << std::endl;
    
    deshuffle(vec, seed);
    
    std::cout << "Восстановленный в исходном порядке массив: " << "\n";
    for (auto &&i : vec)
    {
        std::cout << i << " ";
    } std::cout << std::endl;

    return 0;
}

вывод:

Оригинальный массив: 
a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 
Перемешанный массив: 
a1 a4 a2 a5 a8 a3 a9 a7 a10 a6 
Восстановленный в исходном порядке массив: 
a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 

Releases

No releases published

Packages

No packages published

Languages