![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#11 | |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]() Цитата:
Сам же Random и все что от него, использует это число как точку старта, что-то в стиле: (GetTickCount-RandBase)*$0FDD...(лень смотреть на что умножается). И ежу понятно, что изменяя RandBase мы уменьшаем шанс выпадения того же числа ещё раз в следующим 2 и более вызовах. Чем меньше постоянных величин, тем меньше шанс повторения того же числа. Если вызывать Randomize 1 раз, то постоянных величины в последующем - 2, это RandBase и $0FDD...(лень смотреть на что умножается), если много, то постоянная величина всего 1. Последний раз редактировалось Человек_Борща; 14.06.2013 в 00:12. |
|
![]() |
![]() |
![]() |
#12 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
Человек_Борща, к сожалению, это всё ваши мечты..
Вы не только уменьшаете шанс выпадения одного и того же числа, Вы постоянным вызовом в цикле Randomize НИВЕЛИРУЕТЕ работу полиноминальной функции. Зачем Вам в таком случае вообще Random - умножайте GetTickCount на константу. Будете получать то, что Вы и получаете. (и, думаю, что характеристики полученных "псевдослучайных" чисел будут НАМНОГО хуже, чем полученные в результате стандартного random'а! всё вышесказанное является моим личным (субъективным) мнением и ни в коем разе не претендует на истину в последней инстанции Если же вернуться к исходной теме (хотя автору топика всё это, судя по всем давно не нужно!), то существует всего два рабочих способа/алгоритм получить набор данных с гарантией неповторения: - запоминать все выпавшие значения и на каждом шаге цикла сравнивать очередное случайное число с выпавшими ранее - заполнить массив неповторяющимися числам (можно прямо подряд), правильно его перемешать (на форуме неоднократно рассказывалось, как правильно тасовать числа с пруфлинком), потом просто брать числа из перемешанного массива по одному. опять таки, оба этих способа неоднократно обсуждались на форуме, и, очевидно, что выбор того или иного способа явно зависит от конкретной задачи (ну, например, если есть база на 60000 тыс.слов и нужно достать из неё 100 случайных неповторяющихся слов, то желательно брать первый алгоритм, а если дана колода карт и нужно реализовать игру в "21", то нужно брать второй алгоритм (первый в данном случае не подходит, по крайней мере, без модификаций).. Последний раз редактировалось Serge_Bliznykov; 14.06.2013 в 00:51. |
![]() |
![]() |
![]() |
#13 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]()
Я не на пустом месте это говорю.
Практика показывает: Код:
При Button2, редко бывают повторы у нескольких чисел сразу, и проскакивают повторы 1 и того же числа. |
![]() |
![]() |
![]() |
#14 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
во-первых, ну какую статистику Вы наберете за 6 испытаний?!?!
Сделайте хотя бы 60 тысяч, тогда будет повод для разговора. во-вторых, я же говорю, напишите просто умножение TickCount на константу - для ваших 6 чисел получите, что "вроде бы" случайные числа стали лучше, меньше повторяются. Вы понимаете о чём я толкую? p.s. кстати, попробуйте такой код: Код:
Последний раз редактировалось Serge_Bliznykov; 14.06.2013 в 09:01. |
![]() |
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
инициализация массива, вывод массива и обработка массива должны быть реализованы с помоshью функций | airesjke | Помощь студентам | 0 | 02.03.2012 16:14 |
Вывод значений элемента массива в delphi | Artem_host | Общие вопросы Delphi | 3 | 11.02.2012 21:29 |
Вывод двумерного массива на экран. (Delphi) | Refon_S | Помощь студентам | 3 | 21.12.2011 23:30 |
Задача о напечатании повторно рандомных символов | XanderXage | Помощь студентам | 2 | 12.10.2011 20:18 |
Прописание рандомных ссылок к картинкам. | Averin | PHP | 1 | 03.10.2011 18:38 |