8 / 8 / 1
Регистрация: 01.07.2012
Сообщений: 138
1

Есть ли какая-нибудь возможность рандомизировать процесс перемешивания элементов контейнера

16.07.2012, 11:26. Показов 2944. Ответов 9
Метки нет (Все метки)

Есть в библиотеке алгоритмов такой алгоритм, который случайным образом перемешивает элементы данного контейнера.
Все бы хорошо, но вот только в том, что он всегда перемешивает их одним и тем же образом.
Есть ли какая-нибудь возможность рандомизировать этот процесс?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.07.2012, 11:26
Ответы с готовыми решениями:

Есть ли какая-нибудь библиотека/команда, которая возвращает кол-во ЗАПОЛНЕННЫХ элементов в переменной типа int?
Проще говоря, у меня есть переменная x (целочисленная), мне нужно определить количество цифр в ней....

Есть ли в Visual Studio какая-нибудь возможность прервать программу и продолжить выполнение пошагово?
Мне на работе нужно исправить в большом и объемном программном комплексе одну небольшую проблему....

Есть ли в WCF какая-нибудь возможность проверить правильность установки соединения от клиента к службе?
Есть некая компания, предоставляющая некую службу. С помощью wsdl, также предоставленной этой некой...

Есть ли какая нибудь команда или программа, которая замедляет процесс в командной строке?
Есть ли какая нибудь команда или программа, которая замедляет процесс в командной строке? Например...

9
2553 / 1318 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
16.07.2012, 11:32 2
http://en.cppreference.com/w/c... om_shuffle
0
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
16.07.2012, 11:51 3
Цитата Сообщение от ramybozy Посмотреть сообщение
Есть в библиотеке алгоритмов такой алгоритм, который случайным образом перемешивает элементы данного контейнера.
Все бы хорошо, но вот только в том, что он всегда перемешивает их одним и тем же образом.
Есть ли какая-нибудь возможность рандомизировать этот процесс?
Не понял. Имеешь ввиду, что, если на входе 1 2 3 4 5, то ты всегда получаешь, допустим, 3 2 5 4 1?
0
8 / 8 / 1
Регистрация: 01.07.2012
Сообщений: 138
16.07.2012, 12:43  [ТС] 4
Цитата Сообщение от nexen Посмотреть сообщение
Не понял. Имеешь ввиду, что, если на входе 1 2 3 4 5, то ты всегда получаешь, допустим, 3 2 5 4 1?
Да именно это я и имел в виду.
0
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
16.07.2012, 12:46 5
Цитата Сообщение от ramybozy Посмотреть сообщение
Да именно это я и имел в виду.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <vector>
#include <math.h>
#include <algorithm>
#include <string.h>
#include <ctime>
#include <stdlib.h>
#include <locale.h>
#include <windows.h>
 
using namespace std;
//
void main()
{
    setlocale(0,"RUS");
    int mas[10];
    for (int i=0; i<5; ++i)
    {
        for (int j=0; j<10; ++j)
            mas[j] = j+1;
        random_shuffle(mas, mas+10);
        for (int j=0; j<10; ++j)
            printf("%d ", mas[j]);
        printf("\n");
    }
}
У меня каждый раз разные выдает
Попробуй у себя? (Не обращай внимание на библиотеки, у меня паттерн кода)
0
8 / 8 / 1
Регистрация: 01.07.2012
Сообщений: 138
16.07.2012, 13:10  [ТС] 6
Да он то и будет выдавать ПОСЛЕДОВАТЕЛЬНО разные.
Но ты сам у себя проверь и убедись, что на 2-м, 3-м и так далее запуске у тебя генерируются точно такие же последовательности, что и на первом.
0
1174 / 887 / 94
Регистрация: 03.08.2011
Сообщений: 2,457
16.07.2012, 13:32 7
Вы переходили по ссылке выше? Там же ясно написано, что перегрузка с двумя параметрами использует функцию std::rand(). Перед перемешиванием напишите
C++
1
std::srand( std::time( 0 ));
std::srand() - <cstdlib>
std::time() - <ctime>
0
8 / 8 / 1
Регистрация: 01.07.2012
Сообщений: 138
16.07.2012, 13:46  [ТС] 8
Цитата Сообщение от Toshkarik Посмотреть сообщение
Вы переходили по ссылке выше? Там же ясно написано, что перегрузка с двумя параметрами использует функцию std::rand(). Перед перемешиванием напишите
Нет, ну эта метода известна.
Тогда не стоит рыпаться с random_shuffle, а просто использовать функции rand и srand.
Речь идет именно о том, чтобы делать это средствами библиотеки шаблонов.
0
2553 / 1318 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
16.07.2012, 13:55 9
ramybozy, используйте std::shuffle + std::mt19937. Код по ссылке.
0
63 / 64 / 11
Регистрация: 27.02.2013
Сообщений: 1,116
04.09.2014, 15:33 10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
int random(int min, int max)
{
    static bool flag;
    if (!flag)
    {
        srand(time(NULL));
        flag = true;
    }
    return min + rand() % (max - min);
}
 
template <typename T>
T* shuffle(T* dest, const T* source, const size_t size)
{
    memcpy(dest, source, size);
    for (int i = 0; i < size; i++)
    {
        int index = random(0,size-1);
        T tmp = dest[index];
        dest[index] = dest[i];
        dest[i] = tmp;
    }
    return dest;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.09.2014, 15:33

Есть ли возможность ускорить процесс создания объектов?
Здравствуйте, я тут подсчитал что для моей игры понадобится примерно 80к объектов по 10 компонентов...

Есть ли возможность как-нибудь восстановить утраченный раздел
помогите пожалуйста. Тупая ситуация, не буду в подробности вдаваться... При переустановки винды,...

Есть ли возможность как нибудь узнать позиции сайт
Есть ли возможность как нибудь узнать позиции сайта по ключевым словам за прошедшее время. лучше...

Есть ли какая-нибудь выгода в наследовании интерфейсов
Есть ли какая-нибудь выгода в наследовании интерфейсов (имеется в виду когда один интерфейс...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.