Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нужен алгоритм, генераци случайных чисел большого объема 
:(
    Опции темы
Verus
Дата 9.6.2009, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 5.8.2008

Репутация: нет
Всего: нет



Необходимо чтобы числа не повторлись в диапазоне например от 0 до 200000. Организовал двойным циклом, но это невероятно долго как оказалось. Подскажите кто знает. Спасибо smile
PM MAIL   Вверх
andrew_121
Дата 9.6.2009, 18:45 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 6
Всего: 33



Поправь типы.
Код


#ifndef __LRANDOM_H__
#define __LRANDOM_H__

#include <math.h>
#include <time.h>
#include "lglobal.h"
#include "lfile.h"

#define IA 16807
#define IM 2147483647
#define AM (1.0/IM)
#define IQ 127773
#define IR 2836
#define NTAB 32
#define NDIV (1+(IM-1)/NTAB)
#define EPS 1.2e-7
#define RNMX (IM-1)

namespace lcl {

/***************************************************************************/

class LCL_EXPORT LRandom {
friend LBaseFile& operator<< ( LBaseFile&, const LRandom& );
friend LBaseFile& operator>> ( LBaseFile&, LRandom& );
public:
    LRandom():idum(-1) {}
    LRandom( llong s ):idum(s) {}
    /**/
    inline void seed( llong s ) { idum = s; };
    llong rand() {
        int j;
        long k;
        static long iy=0;
        static long iv[NTAB];
        
        if ( idum <= 0 || !iy ) {
         if ( -(idum) < 1 )
            idum=1;
         else
             idum = -(idum);
         for ( j = NTAB + 7; j >= 0; j-- ) {
             k = (idum) / IQ;
             idum = IA * (idum - k * IQ) - IR * k;
             if ( idum < 0 )
                idum += IM;
             if ( j < NTAB )
                iv[j] = idum;
          }
         iy = iv[0];
      }
      k = (idum) / IQ;
      idum = IA * (idum - k * IQ) - IR * k;
      if ( idum < 0 ) idum += IM;
      j = iy / NDIV;
      iy = iv[j];
      iv[j] = idum;
      if ( iy > RNMX ) return RNMX;
      return iy;
   }
protected:
    llong idum;
};

/***************************************************************************/
LBaseFile& operator<< ( LBaseFile& f, const LRandom& o );
LBaseFile& operator>> ( LBaseFile& f, LRandom& o );
/***************************************************************************/

class LCL_EXPORT LRandomizeArray:public LRandom, public LVector<luint32> {
friend LBaseFile& operator<< ( LBaseFile&, const LRandomizeArray& );
friend LBaseFile& operator>> ( LBaseFile&, LRandomizeArray& );
public:
   LRandomizeArray():LRandom(),LVector<luint32>() {}
   LRandomizeArray( luint32 l ):LRandom(),LVector<luint32>( l ) {
      randomize();
   }
   /**/
   void randomize() {
      for ( LVector<luint32>::iterator it = beg(); it != end(); it++ ) {
         *it = rand();
      }
   }
   void clear() { LVector<luint32>::clear(); idum = 0; } 
};

/***************************************************************************/
LBaseFile& operator<< ( LBaseFile& f, const LRandomizeArray& o );
LBaseFile& operator>> ( LBaseFile& f, LRandomizeArray& o );
/***************************************************************************/

}; // namespace "lcl"

#endif // __LRANDOM_H__


Код


#include "lcl/lrandom.h"

namespace lcl {

/***************************************************************************/
LBaseFile& operator<< ( LBaseFile& f, const LRandom& o ) {
   f << o.idum;
   return f;
}

LBaseFile& operator>> ( LBaseFile& f, LRandom& o ) {
   f >> o.idum;
   return f;
}

/***************************************************************************/
LBaseFile& operator<< ( LBaseFile& f, const LRandomizeArray& o ) {
   f << o.size() << o.idum;
   for ( LRandomizeArray::const_iterator it = o.beg(); it != o.end(); it++ ) {
      f << *it;
   }
   return f;
}

LBaseFile& operator>> ( LBaseFile& f, LRandomizeArray& o ) {
   luint32 s = 0;
   f >> s >> o.idum;
   L_ASSERT( o.resize( s ), NOT_FREE_MEMORY );
   for ( luint32 idx = 0; idx < s; idx++ ) {
      f >> o[idx];
   }
   return f;
}
/***************************************************************************/

}; // namespace "lcl"




--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
jonie
Дата 10.6.2009, 07:09 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 15
Всего: 118



вот самый наверно простой метод нгенерации ГПСЧ, для случайных чисел нужен источник энтропии вроде активного материала (стронций, уран и т.д.). http://ru.wikipedia.org/wiki/Линейный_конгруэнтный_метод


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
andrew_121
Дата 10.6.2009, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 6
Всего: 33



Цитата(jonie @  10.6.2009,  07:09 Найти цитируемый пост)
стронций, уран и т.д.

 smile 


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Verus
Дата 10.6.2009, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 5.8.2008

Репутация: нет
Всего: нет



Пошел урановый стержень покупать smile 
Спасибо за ответ, andrew_121.
PM MAIL   Вверх
andrew_121
Дата 10.6.2009, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 6
Всего: 33



Verus, Всегда пожалуйста!


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
jonie
Дата 10.6.2009, 22:00 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 15
Всего: 118



andrew_121 а че не так?)) кстати ЛКГ куда как проще имхо всего пару строк реализации, если этого будет достаточно, конечно.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
5u1c1de
Дата 11.6.2009, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 7.6.2009

Репутация: нет
Всего: нет



PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1171 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.