Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.02.2012, 23:20   #1
Yriy
 
Регистрация: 28.01.2012
Сообщений: 8
По умолчанию Массив случайных чисел

Здравствуйте! Как отсортировать заполненый массив функцией Random от повторяющихся чисел? Очень нужна помощь!!!
Yriy вне форума Ответить с цитированием
Старый 11.02.2012, 09:26   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,964
По умолчанию

Очень просто. Делаете два цикла. В первом цикле заполняете массив числами от 0 до N-1 в обычном порядке. Во-втором, генерируете два случайных числа из диапазона размерности массива и делаете перестановки. Длину цикла лучше выбирать N*2 или более. Где N - размерность массива.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 11.02.2012, 10:05   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Smitt&Wesson
Во-втором, генерируете два случайных числа из диапазона размерности массива и делаете перестановки. Длину цикла лучше выбирать N*2 или более. Где N - размерность массива.
Как ни странно, но этот алгоритм не даёт нормального распределения!

см. ТУТ и ТУТ и ТУТ

позволю себе процитировать свой же пост:

по поводу "тасования" карт:
но мне для решения таких задач ГОРАЗДО больше нравится вариант с перемешиванием. ( можно тут посмотреть) - он очень быст, прост и не требует наличия и манипулирования динамическими массивами!
Единственное, если подходить к вопросу серьёзно, необходимо учитывать, что распределение получается неравномерным. смотри пост №11 (с) kogemrka или, статью, на которую он ссылается:
http://mazanu.com/2008/11/blog-post_20.html Как не надо тасовать карты
если кратно, то алгоритм перемешивания (с нормальным распределением) должен быть такой:
Цитата:
Для (i от 1 до n-1)
Переставить i-ю карту со случайной картой от i-й до n-й
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.02.2012, 10:12   #4
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,964
По умолчанию

Цитата:
Как ни странно, но этот алгоритм не даёт нормального распределения!
В принципе согласен. Но это первое, что пришло на ум.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 11.02.2012, 10:30   #5
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
Очень просто. Делаете два цикла. В первом цикле заполняете массив числами от 0 до N-1 в обычном порядке. Во-втором, генерируете два случайных числа из диапазона размерности массива и делаете перестановки. Длину цикла лучше выбирать N*2 или более. Где N - размерность массива.
А если мне нужно 15 чисел в пределах [1, 10млн], мне для этого десяти миллионный массив генерировать?
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 11.02.2012, 11:50   #6
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,322
По умолчанию

Цитата:
Сообщение от Yriy Посмотреть сообщение
Здравствуйте! Как отсортировать заполненый массив функцией Random от повторяющихся чисел? Очень нужна помощь!!!
Yriy, хотел уточнить, что вы имели ввиду?

Ваш вопрос можно понять и следующим образом:

У вас уже есть массив случайных чисел, который вы заполнили, используя функцию Random. Но у вас возникло желание (или необходимость) выкинуть из этого массива повторяющиеся числа. Может вы это имели ввиду?
8Observer8 вне форума Ответить с цитированием
Старый 11.02.2012, 12:25   #7
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Цитата:
Сообщение от 8Observer8 Посмотреть сообщение
Ваш вопрос можно понять и следующим образом:
А каким образом вы еще можете интерпретировать вопрос ТС?
(просто интересно)
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 11.02.2012, 16:05   #8
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,322
По умолчанию

Цитата:
Сообщение от Blade Посмотреть сообщение
А каким образом вы еще можете интерпретировать вопрос ТС?
(просто интересно)
Я сначала понял так, что существует заполненный массив (причём, необязательно заполненный случайными числами). И этот заполненный массив нужно отсортировать (удалив повторяющиеся числа), используя некую функцию под названием Random.

Мне кажется, что правильнее было бы написать: "Как отсортировать массив, заполненный функцией Random, от повторяющихся чисел?"

Yriy, вы для решения задачи какой язык используете Си или С++? Если С++, то возможно есть подходящий класс контейнера, в котором уже реализован метод для удаления повторяющихся элементов. Я не уверен, но мне кажется, что есть такой класс и метод для него.

Последний раз редактировалось 8Observer8; 11.02.2012 в 16:17.
8Observer8 вне форума Ответить с цитированием
Старый 11.02.2012, 16:25   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
А если мне нужно 15 чисел в пределах [1, 10млн], мне для этого десяти миллионный массив генерировать?
Если Вам нужно получить 15 чисел в диапазоне от 1 до 10 миллионов, то, разумеется, гораздо эффективнее будет другой алгоритм:
Код:
  в цикле
       получаить очередное число случайное число
       проверить его наличие в массиве a до текущего индекса
  пока очередного число не найдено;
  запомнить найденное число по индексу
  нарастить индекс
данный кусочек в цикле повторяем нужное число раз.

Цитата:
А каким образом вы еще можете интерпретировать вопрос ТС?
ну, Вы же сумели разглядеть в этом вопросе то, что TC нужно получить 15 чисел в диазоне от 1 до 10000000


А на самом деле, какой вопрос - такие и советы.
Будет больше конкретики, будет и более конкретные ответы/советы...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.02.2012, 23:57   #10
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
ну, Вы же сумели разглядеть в этом вопросе то, что TC нужно получить 15 чисел в диазоне от 1 до 10000000
Не сумел. Просто показал почему предложенный способ плох

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
А на самом деле, какой вопрос - такие и советы.
Будет больше конкретики, будет и более конкретные ответы/советы...
Мне кажется, вопрос поставлен вполне конкретно и неоднозначно.
Есть массив из N случайных чисел. Необходимо исключить из него все повторяющиеся элементы.

З.Ы. Свой вариант я не предлагаю, ибо все тривиальное тут и так предложили, а над большим мне думать лень
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
массив + генерация случайных чисел be-be Помощь студентам 1 22.10.2011 18:38
отсортировать массив случайных чисел и вывести на экран. PAREN_DEFO Помощь студентам 1 27.05.2011 17:17
составить массив случайных чисел Паскаль lirikoff Помощь студентам 8 08.02.2011 21:20
Массив случайных чисел, сред. ариф. vladxxl Общие вопросы C/C++ 1 27.11.2010 23:52
Двухмерный массив случайных чисел AxisNet Паскаль, Turbo Pascal, PascalABC.NET 4 16.09.2009 10:01