题目六:
http://topic.youkuaiyun.com/t/20061019/10/5093273.html
请写一个程序,随机打印“0”,“1”,“2”,但保证“0”,“1”,“2”出现的概率是可配置的,例如2:1:3。
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.youkuaiyun.com/t/20061019/10/5093273.html
一个数据文件,每条记录内容包括:时间,IP地址,关键词。记录是无序排列的,条数超过2000万条。要求对该数据文件按检索词的顺序进行排序,并保持时间,IP地址和关键词的关联关系。请设计一个程序,实现上述功能,并分析时间复杂度和空间复杂度。运行程序所使用的服务器的内存为1G,硬盘足够大。(至少给出关键算法和设计思路)
Answer1:
后面一题方法很多,各有优缺点,不过,既然有1G内存和足够大硬盘可以用,那么就好办多了
思路一:
1、顺序读取数据,按照内存所有量来确定到底一次读取多少条(读的条数越多,速度越快,需要的内存也就越大,读的条数越少,需要的磁盘读取次数就越多,速度就越慢)
2、逐条判断关键字,分别创建关键字中间文件,将记录写入对应的关键字文件。同时记录并排序关键字,存储在关键字排序文件中
3、顺序读取关键字排序文件,每读取一个关键字,就读取相应的关键字中间文件,将读取的信息存储在结果文件中,直至关键字排序文件结束,形成单个结果文件,并已按照关键字排序。
PS:1G的内存如果你可以使用的话,2000W基本上一次可以全部读出,但是在写得时候,对于目标文件写操作次数会比较多。建议分两次,按关键字将记录分组的工作在内存中完成后,一次性写入中间文件,这样可以将写文件操作,减少一个数量级