Предположим, у меня есть функция, которая принимает 32-битное целое число и возвращает случайное 32-битное целое число.
Теперь я хочу посмотреть, сколько и какие повторяющиеся значения эта функция будет возвращать для всех возможных входных значений изОт 0 до 2 ^ 32-1.Я мог бы сделать это легко, если бы у меня было больше 4 ГБ свободного ОЗУ, но у меня не было более 1 ГБ ОЗУ.
Я попытался отобразить вычисленные значения на диске, используя файл 4 ГБ, где один байт представлял, сколько дублирует егополучил, но я заметил, что приблизительное время окончания будет 25 дней в будущем с моими скоростями HDD!(Я должен был использовать SSD, боясь сломать мой жесткий диск ...)
Итак, теперь следующим шагом является вычисление всего этого в оперативной памяти, а не использование диска вообще, но я побежал в стену, думая, какчтобы решить это элегантно.Единственный способ, о котором я мог подумать, - это зациклить (2 ^ 32) * (2 ^ 32) раза функцию, но это, очевидно, даже медленнее, чем мой метод HDD.
Теперь мне нужны некоторые неприятные идеичтобы ускорить это!
Редактировать: Функция на самом деле не является случайной функцией, но похожа на случайную функцию, но факт в том, что вам не нужно ничего знать о функции, ее нетпроблема здесь.Я хочу видеть все дубликаты своими невооруженными глазами, а не просто математически угадывать, сколько их может быть.Почему я это делаю?Из любопытства :) 1013 *