Методология семян псевдордома для таблиц поиска

StackOverflow https://stackoverflow.com/questions/2127219

  •  22-09-2019
  •  | 
  •  

Вопрос

Может ли кто -нибудь предложить хороший способ взять Глобальный Значение семян, например «Привет, мир» и использование этого значения для поиска значений в массивах или таблицах.

Я как бы думал, как эта классическая игра «Элита» в «Элите», где были разные атрибуты для планет, но они не были случайными, просто полученными от значения семян для вселенной.

Я думал, что MD5 о входном значении, а затем использовал байты из хэша, поддавая их целым числу и модифицирует их в приемлемые индексы для таблиц поиска, но я подозреваю, что должен быть лучший способ? Я прочитал кое -что о Twisters Mersenne, но, возможно, это было бы излишним.

Я надеюсь на что -то, что даст хорошее отвлечение от значений в моих таблицах поиска. Например, красный, оранжевый, желтый, зеленый, синий, фиолетовый

Также, чтобы подчеркнуть, я не ищу случайных значений, а последовательные значения каждый раз.

Обновление: Возможно, мне трудно выразить свою собственную проблемную область. Вот пример сайта, который использует генераторы и может генерировать количество значений: http://www.seventhsanctum.com

Дополнительные критерии

Я бы предпочел работать с первых принципов, а не использовать библиотечные функции, такие как System.random

Это было полезно?

Решение

Мой подход будет использовать свой ключ в качестве семян для генератора случайных чисел

public StarSystem(long systemSeed){
    java.util.Random r = new Random(systemSeed);
    Color c = colorArray[r.nextInt(colorArray.length)]; // generates a psudo-random-number based from your seed
    PoliticalSystem politics = politicsArray[r.nextInt(politicsArray.length)];
    ...
}

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

Чтобы получить начальное семя из строки, вы можете просто использовать MD5SUM и получить первые/последние 64 бит за свой длинный, другой подход будет просто использовать числовое для каждого растения. Elite также сгенерировала имена для каждой системы, используя свою псевдо-рэндром-генератор.

for(long seed=1; seed<NUMBER_OF_SYSTEMS; seed++){
    starSystems.add(new StarSystem(seed));
}

Устанавливая семя в известное значение каждый раз, когда случайный человек возвращает одну и ту же последовательность каждый раз, когда он называется, поэтому при попытке хороших случайных значений хорошее семя очень важно. Однако в вашем случае известное семя даст результаты, которые вы ищете.

C# эквивалент

public StarSystem(int systemSeed){
    System.Random r = new Random(systemSeed);
    Color c = colorArray[r.next(colorArray.length)]; // generates a psudo-random-number based from your seed
    PoliticalSystem politics = politicsArray[r.next(politicsArray.length)];
    ...
} 

Заметьте разницу? Нет, и я не делал я.

Другие советы

Читать Эта ссылка , объясняет, как настроить MATLAB на некоторых системах Linux.

Здесь шаги, которые имеют отношение к вам:

Чтобы включить запущенные внешние программы, [& # 8230;] Fortran Библиотеки должны быть правильно обновлены и связаны.Посмотрите на вывод этой команды:

ll "$MATLABDIR/bin/glnxa64/"
.

Вероятно, что [ссылка] существует:

libgfortran.so.3 -> libgfortran.so.3.0.0
.

Поиск [Эта библиотека] на вашем компьютере:

locate libgfortran.so
.

[...] Обновить ссылки MatLab, чтобы указать на эти новые версии:

sudo ln -sf [location of libgfortran.so.3.0.0] "$MATLABDIR/bin/glnxa64/libgfortran.so.3"
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top