Member 12855478 Ответов: 1

Как найти семя целочисленного массива, сгенерированного генератором случайных чисел


Я использовал следующую функцию для генерации массива случайных чисел, когда я установил семя
srand(0)
эта программа генерирует точно такой же массив целых чисел каждый раз, т. е.
38 39 118 5 23 21 45 29
Теперь я хочу знать семя srand (), подавая тот же массив.

Что я уже пробовал:

я использовал эти коды для генерации массива
#include<iostream>
#include<conio.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
int main(void) {
	int i;
    srand(0);
     for (i=0; i<8;i++)
	{
        int x = rand()%128;     //between 0 and 128
        cout<<x<<" ";
    }
}

Mehdi Gholam

Это вычислительно непрактично.

Peter_in_2780

Зависит от PRNG. Смешанная конгруэнция, например, может быть запущена "назад". Но использование %128 не только плохая практика, но и сделает это еще более трудным.

Mehdi Gholam

Вам нужно вычислить радужную таблицу семян и выходных чисел (которая очень велика) и будет работать только для стартовых байтов и потерпит неудачу для "средних байтов", то есть не стартовых последовательностей.

1 Ответов

Рейтинг:
6

OriginalGriff

Забудь это. Это совсем не практично. Начальное значение - это целое число без знака , что в наши дни означает 32-битное число , так что у вас есть возможные 2^32 различных комбинации массивов, которые вам нужно будет "проверить", чтобы найти: 4 294 967 296 возможных значений. И главная проблема заключается в том, что их будет огромное количество, которые являются одинаковыми - или, по крайней мере, начинаются одинаково - и вам, возможно, придется добраться до значительного числа элементов случайных чисел, прежде чем вы сможете устранить некоторые из них.

Это не практический подход ни к чему. Я знаю: я пытался использовать его как Метод "супер сжатия" много-много лет назад, когда только начинал, и в конце концов сдался, когда понял, сколько времени потребуется, чтобы попытаться найти последовательность случайных чисел, которая "генерирует" поток байтов, который я хотел сжать! :смеяться: