百度笔试题10.3

题目六:

http://topic.csdn.net/t/20061019/10/5093273.html

请写一个程序,随机打印“0”,“1”,“2”,但保证“0”,“1”,“2”出现的概率是可配置的,例如213

 

Answer1

#include   <cstdlib>  

  #include   <iostream>  

  using   namespace   std;  

   

  int   _tmain(int   argc,   _TCHAR*   argv[])  

  {  

  long   count[3]   =   {0};  

  int   split[3]   =   {2,   3,   6};//{2},   {2+1},   {2+1+3}  

  for   (long   i   =   0;   i   <   6000000;   i++)  

  {  

  int   r   =   rand()%6;  

  for   (int   k   =   0;   k   <   3;   k++)  

  {  

  if   (r   <   split[k])  

  {  

  count[k]++;  

  break;  

  }  

  }  

  }  

  for   (long   j   =   0;   j   <   3;   j++)  

  {  

  cout   <<   "The   count   of   "   <<   j   <<   "   is   "   <<   count[j]   <<   endl;  

  }  

  return   0;  

  }  

   

  

 

题目七:

http://topic.csdn.net/t/20061019/10/5093273.html

 

一个数据文件,每条记录内容包括:时间,IP地址,关键词。记录是无序排列的,条数超过2000万条。要求对该数据文件按检索词的顺序进行排序,并保持时间,IP地址和关键词的关联关系。请设计一个程序,实现上述功能,并分析时间复杂度和空间复杂度。运行程序所使用的服务器的内存为1G,硬盘足够大。(至少给出关键算法和设计思路)

 

Answer1

后面一题方法很多,各有优缺点,不过,既然有1G内存和足够大硬盘可以用,那么就好办多了  

  思路一:  

      1、顺序读取数据,按照内存所有量来确定到底一次读取多少条(读的条数越多,速度越快,需要的内存也就越大,读的条数越少,需要的磁盘读取次数就越多,速度就越慢)  

      2、逐条判断关键字,分别创建关键字中间文件,将记录写入对应的关键字文件。同时记录并排序关键字,存储在关键字排序文件中  

      3、顺序读取关键字排序文件,每读取一个关键字,就读取相应的关键字中间文件,将读取的信息存储在结果文件中,直至关键字排序文件结束,形成单个结果文件,并已按照关键字排序。  

      PS:1G的内存如果你可以使用的话,2000W基本上一次可以全部读出,但是在写得时候,对于目标文件写操作次数会比较多。建议分两次,按关键字将记录分组的工作在内存中完成后,一次性写入中间文件,这样可以将写文件操作,减少一个数量级

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cyf31

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值