Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
user1 Гость
|
Добавлено: Ср Июн 16 2004 08:54 Заголовок сообщения: Генератор случайных чисел для FoxPro 7.0 |
|
|
Здравствуйте. Возникла проблема, средствами фоксы нужно сгенерировать неупорядоченный массив целых неповторяющихся чисел от 1 до N. Может у кого есть алгоритм, желательно быстрый.
Заранее благодарен. |
|
Вернуться к началу |
|
|
GREA
Зарегистрирован: 14.05.2003 Сообщения: 758 Откуда: Новосибирск
|
Добавлено: Ср Июн 16 2004 09:33 Заголовок сообщения: |
|
|
Алгоритм такой: заполнить массив нулями. Пробежать все число от 1 до N. Каждое число записать в случайное место (по циклу: случайное место, пока не наткнемся на 0). Небольшая оптимизация: Если записываем в край массива, уменьшаем на 1 интервал поиска случайного места. Это даст большой выигрыш при больших N, когда почти все места уже заняты.
Можно так. Записать все числа по порядку. Потом по циклу, два числа, со случайными номерами переставляем местами, то есть перемешиваем массив. Антисортировка. |
|
Вернуться к началу |
|
|
Гость
|
Добавлено: Ср Июн 16 2004 10:07 Заголовок сообщения: |
|
|
INT(N * RAND( ) + 1)
и проверять не было ли этого числа ранее |
|
Вернуться к началу |
|
|
user1 Гость
|
Добавлено: Чт Июн 17 2004 15:58 Заголовок сообщения: |
|
|
Спасибо, GREA. Реально помогло! |
|
Вернуться к началу |
|
|
user1 Гость
|
Добавлено: Чт Июн 17 2004 16:04 Заголовок сообщения: |
|
|
Anonymous писал(а): | INT(N * RAND( ) + 1)
и проверять не было ли этого числа ранее |
Не дурак. Об этом в help написано. Когда остается одно свободное место, оно ищется почти до бесконечности. |
|
Вернуться к началу |
|
|
GREA
Зарегистрирован: 14.05.2003 Сообщения: 758 Откуда: Новосибирск
|
Добавлено: Чт Июн 17 2004 19:55 Заголовок сообщения: |
|
|
Подумал маленько, и пришло мне в голову, что можно сначала записать все числа по порядку. Потом последовательно пробегать все элементы массива и каждый менять местами с элементом в случайной позиции (даже с самим собой). Так получится наиболее быстро и более случайно. |
|
Вернуться к началу |
|
|
Гость
|
Добавлено: Пт Июн 18 2004 10:29 Заголовок сообщения: |
|
|
Интересно, при каком это N
"оно ищется почти до бесконечности"? |
|
Вернуться к началу |
|
|
|