随机生成1000万个随机数作为海量测试数据


写于2012.5

上个星期天(2012.5.6)中午去华科参加了百度的笔试,试卷的最后一题是问百度搜索框的suggestion提示功能如何实现,用什么数据结构和算法。

我简单地提及了一下Top K。

前段时间看过算法大牛JULY博客中的一些面试题,其中有讲到Top K算法。且《编程之美》中也有一节专门讲解Top K。现如今百度也考到了,说明Top K算法真的是太重要了。可惜之前都只是粗浅地看了一遍,没有彻底领悟。现在正在着手于Top K的学习,代码写好了需要海量测试数据,上哪找呢?哼哼,当然是自己写程序生成啦。下面将介绍一种方法来随机生成1000万个随机数,并将数据保存到文件data.txt中,方便我们随时进行测试。

请直接看代码,所有重要信息均在上面。

/*
本程序实现的功能:
生成1000万个可能重复的随机数,用作测试数据 
并计算生成这些数据所用的时间 
*/
#include <iostream>
#include <ctime> // time.h也可,用于计算程序运行时间和生成随机种子数 
using namespace std;
int main()
{
 //typedef long clock_t 
 clock_t start_time = clock();//计时开始
 
    srand(unsigned(time(0)));//生成时间种子
 //生成的数值在1000到100万之间 
    const int MAX = 10000000;
    const int MIN = 1000;
    /*读入数据 freopen("in.txt","r",stdin); 
 //写入数据 freopen("out.txt","w",stdout);
 //fclose(stdin);//关闭文件 
    //fclose(stdout);//关闭文件 
    把标准输入流stdin重定向到in.txt文件中,
 这样在用scanf或是用cin输入时便不会从标准输入流读取数据,
 而是从in.txt文件中获取输入。
 只要把输入数据事先粘贴到in.txt,调试时就方便多了。 
    */
  freopen("data5.txt","w",stdout);
  //cout << "---Generate 10,000,000 random numbers\
  //         which maybe repeated---" << endl;
 for(int i = 0; i < 10000000; ++i){
  //#define RAND_MAX 0x7FFF
   // unsigned long data = ( MAX * rand() )/ ( RAND_MAX + MIN)+ 1;
   unsigned long data = (MAX - MIN + 1 ) * rand() / (RAND_MAX + 1)  + MIN; 
    cout << data << ' '; //输出数据到data.txt 
 }
 fclose(stdout);
 freopen("time.txt","w",stdout);
 cout << endl 
      << "---the end---" 
   << endl;
   //CLOCKS_PER_SEC控制精度,在windows环境下是1000,linux下是多少完了
   //简单地说windows下是毫秒级,而linux下是纳秒级 
    cout << "elapsed time:" << double(clock() - start_time) / CLOCKS_PER_SEC
         << 's' << endl;
  //  fclose(stdout);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值