Я думаю об идее «суперкомпрессора», который мог бы сжимать случайные данные (или мне так хотелось!).
В двух словах, это должно работать примерно так: взять первые числа из двоичной последовательности, найти начальное число для генератора последовательности, который будет производить эти два числа.Перейти к следующим двум числам.После первого прохода последовательность должна быть (почти) вдвое короче оригинальной.Далее повторите эту процедуру на последовательности семян.И так до тех пор, пока мы не доберемся до единственного начального числа.
Предположим, что декомпрессия будет работать в обратном порядке - возьмите начальное число, произведите 2 числа.Итерируйте по двум числам, взяв каждое в качестве начального числа, произведите дальнейшие числа.
Пропуская много важных деталей, суть проблемы сводится к реализации функции GetSeed
для любых значений int
в коде ( dotnetfiddle )
private static int GetSeed(int n1, int n2)
{
// how to implement this for any n1 and n2
return 1234567890;
}
public static void Main()
{
int seed = GetSeed (1175335310, 906672726);
var r = new Random(seed);
int n1 = r.Next();
int n2 = r.Next();
Console.WriteLine("Sequence: {" + n1 + ", " + n2 + "}. Seed " + seed);
// Sequence: {1175335310, 906672726}. Seed 1234567890
}
Можно ли реализовать GetSeed
для двух произвольных случайных целых чисел?