![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Про генератор случайных чисел [D6, Win95/98, Win2k]
Демон © (2002-07-11 23:45:00)Функции Randomize и Rand(x) возвращают из массива от 0 до x случайное значение и впредь его не повторяют...
Вопрос: какая функция также возвращает случайное значение из данного массива, но это значение может повторяться??
Viewer (2002-07-12 17:25:00) [1]Кто это решил ?
Ни один программный ГСЧ не выдает неповторяющихся чисел.
По другому они называются датчики псевдослучайных последовательностей (ДСП). Что и означает повторение последовательности с некоторым известным,хотя и большим, периодом. В пределах периода числа выдаются случайным образом, т.е. и повторяющиеся, в том числе.
Проектирование датчика с неповторяющимися значениями в пределах периода - отдельная, да и не слишком востребованная задача.
Malder (2002-07-12 17:12:00) [2]Я вас до сиз пор не понял.
С чего вы решили, что Random возвращает НЕПОВТОРЯЮЩИЕСЯ ЧИСЛА ?
вопрос не имеет смысла...
handra (2002-07-12 16:52:00) [3]IlyaA > Суммировать значения нельзя, нарушается форма респределения (т.е. числа, находящиеся в середине интервала будут повторяться чаще)
~~~~~~~
Линейный конгруэнтный генератор псевдослучайных чисел (ПСЧ).
Выглядит так: Tn+1 = ((A*Tn) + C) mod M,
где:
A - множитель, такой, что (A mod 4)=1, т.е., например,5,9,13...
С - коэффициент, должен быть нечетным.
М - модуль, должен быть степенью двойки, например, 8,16,32,64...
Т0 - "порождающее число" - может быть любым целым.
Все эти условия должны быть обязательно выполнены. Генератор выдает псевдослучайную последовательность в диапазоне 0..М, причем каждое число встречается только один раз.
Viewer (2002-07-12 14:50:00) [4]Что-то вопросы больно темный для твоего заявленного "высшего" образования. Здесь ведь их не дадут.
Поищи опубликованные статьи в Инете:
генерация случайных чисел
AL2002 (2002-07-12 14:07:00) [5]Удалено модератором
BAY (2002-07-12 12:33:00) [6]>>PVOzerski
Точно. Это параметрическая функция с непрерывным равномерным распределением вероятностей (continuous uniform probability distribution. :) RandSeed - параметр этой функции.
Anatoly Podgoretsky (2002-07-12 12:27:00) [7]AL2002 © (12.07.02 11:56)
"А кто знает, как "рождаються" случайные числа?"
Пытаешь провести перепись эьиъ людей, интересно конечно.
BAY (2002-07-12 12:25:00) [8]>>какая функция также возвращает случайное значение из данного массива, но это значение может повторяться??
Это же компьютер, а не матан. Random может вернуть лишь определенное количество значений (8 байт), а значит значения будут повторяться, вопрос только когда.
PVOzerski (2002-07-12 12:17:00) [9]Псевдослучайные числа - на самом деле результат некой математической функции. Что это такое точнее - можно, например, посмотреть в исходниках system.pas (_RandInt, _RandExt).
AL2002 (2002-07-12 11:56:00) [10]Удалено модератором
Anatoly Podgoretsky (2002-07-12 11:41:00) [11]С переписями, поисками и рейтингами в Потрепаться, кроме того если ты хочешь задать свой вопрос, то ты должен делать это в отдельной ветке, при соблюдении этих условий тебе гарантирована почти конфортная жизнь
Anatoly Podgoretsky (2002-07-12 11:40:00) [12]AL2002 © (12.07.02 11:29)
Ты хочешь переаись провести?
MBo (2002-07-12 11:35:00) [13]>AL2002
Любой, кто в исходники заглянет
AL2002 (2002-07-12 11:29:00) [14]Удалено модератором
Anatoly Podgoretsky (2002-07-12 11:23:00) [15]Извиняюсь, конечно имелось в виду не последовательность, а не повторяющиеся числа
Anatoly Podgoretsky (2002-07-12 11:21:00) [16]А зачем так испытывать, проще надо жить for I := 1 to 100 WriteLn(Random(10));создаст неповторяющую последовательность из 100 чисел, каждое из которых не более 9
PVOzerski (2002-07-12 10:42:00) [17]А кто сказал, что функция Random(x) обеспечивает последовательность НЕповторяющихся случайных чисел? Никогда такого не слышал и не наблюдал. Угодно пример?
program Project1;
{$apptype console}
var
i:longint;
begin
randomize;
for i:=1 to 10 do
writeln(Random(10));
readln;
end.
На экран вывела у меня сейчас (ясно, что в другой раз результат будет, скорее всего, иным - из-за Randomize):
8
2
2
9
1
1
9
2
7
4
Как видите, значение 2 выскочило 3 раза, значение 1 - 2 раза. IMHO, наоборот, получить последовательность неповторяющихся чисел более сложно.
BAY (2002-07-12 09:09:00) [18]По моему Randomize присваивает переменной RandSeed значение таймера. Т.е. для каждого значения RandSeed определена неизменная последовотельность чисел.
IlyaA (2002-07-12 08:12:00) [19]Делай сумму 2-х или более Random"ов. Тогда у тебя могут получиться повторные числа
Юрий Зотов (2002-07-12 00:31:00) [20]Та же самая Random(x), но СТРОГО без предварительного вызова Randomize.
При каждом запуске программы она будет выдавать ОДНУ И ТУ ЖЕ последовательность случайных чисел в диапазоне 0..x. Это используется, например, при отладке, а после отладки перед первым вызовом Random (только в одном месте!) вставляется Randomize (инициализирует датчик случайных чисел по текущей дате и времени, что и приводит к генерации новой последовательности).
Строго говоря, эти числа всегда ПСЕВДОслучайные, но период их повторения настолько велик, что на практике их можно считать случайными. Распределение - равномерное.