![]() |
|
![]() ![]() ![]() |
|
SickFxck |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 16.4.2010 Репутация: нет Всего: 1 |
Кто-нибудь знает эффективный алгоритм генерации не всей перестановки, а заранее указанного "отрезка" массива, содержащего перестановку?
Пример. Есть числа от 1 до 10 и есть какая-то её перестановка (массив чисел):
, которая определяется просто каким-то числом (seed для генератора псевдослучайных чисел) в программе. Реально такой массив не собираюсь генерировать, поскольку N может быть очень большим. Также дан диапазон индексов, который требуется получить из этого массива. К примеру, 5-9, т.е. нужно получить следующие элементы: "4 2 7 3 10", не генерируя все предыдущие, т.к. они мне не нужны. Очевидно, что обычный алгоритм вроде (псевдокод)
требует генерации всех чисел (от первого элемента до верхней границы диапазона). Добавлено через 4 минуты и 19 секунд Я правда с описанием немного намудрил. Если гораздо короче: как получить i-й элемент какой-то определённой перестановки чисел от 1 до N, не генерируя все (или большую часть) остальных элементов перестановки? Сама перестановка определяется каким-то числом. |
||||
|
|||||
миг |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 15.9.2008 Репутация: нет Всего: 1 |
Я бы сделал так. чтобы найти случайное число на отрезке от i до k. Нужно с генерировать любое случайное число(думаю ваш компилятор умеет это делать). Найти остаток от деления на число k. Затем проверить условие, чтобы число i было меньше или равно остатку от деления.
Это сообщение отредактировал(а) миг - 16.4.2011, 08:02 --------------------
Oaks may fall when reeds stand the storm. |
|||
|
||||
SickFxck |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 16.4.2010 Репутация: нет Всего: 1 |
миг, вы о чём вообще?
|
|||
|
||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
Если я правильно понял это требование, то решения не существует. Во всяком случае, для случайных перестановок. Сам принцип метода Монте Карло заключается в том, что результат можно воспроизвести только воспроизведя все "броски костей" (да и то только если генератор случайных чисел выдает числа псевдослучайные). Если же перестановки не случайные, а подчиняются какому-то закону, то, наверное можно написать какую-то формулу их описывающую и, соответственно, вычислить конечные результаты. Но очень подозреваю, что простое воспроизведение всех перестановок будет гораздо более эффективно. -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
SickFxck |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 16.4.2010 Репутация: нет Всего: 1 |
Спасибо.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |