Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Нужен алгоритм выборки

Ответить
Настройки темы
Нужен алгоритм выборки

Пользователь


Сообщения: 115
Благодарности: 1

Профиль | Отправить PM | Цитировать


Нужно получить n неповторяющихся целых чисел, равномерно распределенных от 1 до N (n <= N). Считаем, что функция, выдающая _одно_ псевдослучайное число, есть.
Просто проверять каждое вновь получаемое число на совпадение со всеми выпавшими до него, при совпадении бросать снова и снова проверять - долго и тупо. Не подскажет ли кто-нибудь более быстрый алгоритм?

-------
С приветом,
Икс Сафонский


Отправлено: 17:09, 06-12-2004

 

Аватара для McDAK

Модер


Сообщения: 830
Благодарности: 3

Профиль | Отправить PM | Цитировать


IksSafonsky
Толи я смысл задачи не уловил, толи... Случайной выборкой тут и так ничего не выйдет, ведь получаемые числа не будут распределены равномерно. Если заполнять диапазон от 1 до N до предела, то получится ряд чисел с шагом единица, в получении такого ряда вообще не вижу проблем. Если задаться произвольным целым шагом (в нецелом смысла нет), то создаем цикл от 1, в цикле включаем счетчик, что бы знать n, на каждом новом шаге определяем новое число, добавляя шаг к предыдущему числу и проверяем условие, что бы вновь полученное число не превысило N. В общих чертах так, по идее проще валенка или я чего-то не допер с просонья? В таком случае прошу меня вразумить.

-------
Знание некоторых принципов нередко возмещает незнание некоторых фактов. Гельвеций


Отправлено: 07:04, 07-12-2004 | #2



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для shurikan

Старожил


Сообщения: 240
Благодарности: 1

Профиль | Отправить PM | Цитировать


IksSafonsky
Код: Выделить весь код
int i;
int n;
int found[N]; // это с помощью malloc
int data[N]; // ...
...
for (i=0; i<N; ++i)
{
	data[i] = i+1;
}
 
n = 0;
 
while (N>1)
{
	i = random(N--);
 
	found[n++] = data[i];
 
	for (int k=i; k<N; ++k)
	{
		data[k] = data[k+1];
	}
}
 
found[n] = data[0];

-------
UNIX, UNAS и др. Myself I'll like 'em


Последний раз редактировалось shurikan, 08-12-2004 в 16:25.


Отправлено: 20:01, 07-12-2004 | #3



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Нужен алгоритм выборки

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
.NET - *Теория*(VB.NET || C#.net ) Нужен алгоритм для мини - игры ssdm Программирование и базы данных 11 17-05-2007 02:12
разные результаты SQL выборки Vlad Drakula Вебмастеру 8 18-02-2007 11:39
Алгоритм pauluss Программирование и базы данных 1 06-10-2006 10:53
Создание сложной выборки из MySQL Vlad Drakula Вебмастеру 13 19-06-2004 10:22
Подскажите алгоритм wolland Программирование и базы данных 2 27-06-2003 17:56




 
Переход