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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.11.2011, 14:11   #1
haruhi
Форумчанин
 
Аватар для haruhi
 
Регистрация: 05.10.2011
Сообщений: 368
По умолчанию Случайная выборка из вектора (STL). Оптимизация скорости

Имеется вектор с элементами, размерность примерно 1000 элементов. Задача: выбрать из этого вектора случайным образом N элементов. Повторений быть не должно.

Важна именно скорость.

Сейчас делаю примерно так:
сначала формирую массив случайных индексов
Код:
std::vector<int> indexlist;
for (i=0; i<Container.size(); i++)
   nodeindexlist.push_back(i);

for (i=0; i<indexlist.size(); i++)
 std::swap(indexlist[0], indexlist[Random_int(indexlist.size())]);
потом по имеющемуся вектору из индексов, получаю доступ к исходному вектору с данными
Код:
for (i=0; (i<indexlist.size()); i++)
{	
	Container[indexlist[i]];	//доступ к случайному элементу	
.......................
}
основная проблема это формирование массива случайных индексов indexlist: выполняется два цикла примерно по 1000 итераций.

Есть какие-нибудь идеи по оптимизации выборки?
Не стоит будить спящего Бога! (с) Меланхолия Харухи Судзумии

Последний раз редактировалось haruhi; 20.11.2011 в 14:14.
haruhi вне форума Ответить с цитированием
Старый 20.11.2011, 15:27   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,708
По умолчанию

Цитата:
сначала формирую массив случайных индексов
для скорости лучше сразу резервировать вектор по размеру, а то там начинается переодическая релокация
p51x вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
STL в QT конфликтует с STL в Borland nvrrus C++ Builder 0 31.03.2011 10:51
Ошибка(, STL, вектора ZadiraUA Общие вопросы C/C++ 3 25.09.2010 17:27
C++/STL как правильно удалить элемент из вектора? Ultimate Общие вопросы C/C++ 4 04.09.2009 20:36
Проблема с использованием вектора STL C++ Ultimateorb Помощь студентам 2 18.08.2009 00:40
Случайная выборка в сложном запросе ADSoft SQL, базы данных 0 08.12.2008 19:55