Вопрос о процедурной генерации и перестановках

#random #permutation #procedural-generation

#Случайный #перестановка #процедурная генерация

Вопрос:

Я, вероятно, не буду заниматься этим, но у меня была идея создать процедурный юниверс максимально эффективным с точки зрения памяти способом.

Как и в игре Elite, вы можете использовать генератор случайных чисел на основе начального числа, и поэтому каждая звездная система может быть представлена одним начальным числом вместо списков статистики и другой информации. Но если каждая звездная система представляет собой 64-битное число, чтобы создать млечный путь, 100 миллиардов звезд, то есть 6,4 терабайта памяти. Но если вы используете только 8 бит на звездную систему, у вас будет только 256 уникальных звездных систем в вашей игре. Итак, моя другая идея заключалась в том, чтобы каждая звездная система была представлена 8 битами, но просто захватить байты следующей 7 звездной системы в памяти и использовать эту комбинацию для формирования 64-битного числа для начального числа планеты. Очевидно, что в конце будет 7 дополнительных байтов для учета последней звездной системы в памяти.

Итак, есть ли какой-либо способ упорядочить значения в этих байтах таким образом, чтобы каждый набор из 8 байтов по всему файлу охватывал все 64-битные значения (гипотетически) без повторов? Или это невозможно, и я должен просто принимать повторы? Или я мог бы использовать адрес самого байта как часть начального значения? Итак, как это будет работать на C? Например, если у меня есть файл в 100 миллиардов байт, действительно ли он занимает ровно 100 миллиардов байт в памяти или больше, и как хранятся адреса для этих байтов? И практичен ли доступ к таким большим файлам (например, 100 ГБ ) в отношениях сервер-клиент? Спасибо.

Комментарии:

1. Я не уверен, что это полностью отвечает на ваш вопрос, но вместо хранения 100 ГБ, учитывая, что предполагается, что это просто случайные данные, у вас может быть мета-семя, которое запускает RNG для воспроизведения самих семян на лету. Вы даже можете повторить этот процесс, обменивая процессорное время на память столько, сколько захотите, учитывая, что вам все равно, какие данные вы храните.

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