百度面试题:有一个很大很大的输入流,大到没有存储器可以将其存储下来,而且只输入一次,如何从 这个输入 流中随机取得 m 个记录。
来源:互联网 发布:中专毕业证制作软件 编辑:程序博客网 时间:2024/05/01 02:18
在解决这个问题之前, 我们先看一下堆的定义(这里指的是数据结构中的堆)
n个元素的序列{k1,k2,k3,k4,...kn}当且仅当满足下关系时,称之为堆
k(i)<=k(2i) 且 k(i)<=k(2i+1) 或者是 k(i)>=k(2i)且 k(i)>=k(2i+1) (i=1,2,3,。。。,n/2).
好了言归正传,现在这里是一个很大的流按常理来说里面的记录数量应该大于m个,但是在这里为了考虑全面先假设 流里面的记录数小于m个,那么只需要将流里面的记录全部获取即可,当流里面的记录数量大于m个记录的时候,我们这样处理, 将每一个我们取出的记录通过一个随机算法得到一个随机数(当然随机数的范围大小的选取,与流中的记录数有关,如果记录很多的话那么范围就选大一点),首先用前m个记录的随机数建立一个大顶堆(小顶堆)也可以,然后依次读取后面的每一个记录然后计算得到随机数,然后将这个随机数加到堆里面去然后调整堆的结构是它满足堆的定义,这样当流全部读取完毕时,在内存中保存的是一个大小为M的堆。堆里面的记录就是问题所求,(这个问题妙的一点就是,任何一个记录的随机数都有被加入大顶堆的机会,所以这m个记录就是随机的)
- 百度面试题:有一个很大很大的输入流,大到没有存储器可以将其存储下来,而且只输入一次,如何从 这个输入 流中随机取得 m 个记录。
- 33. 百度面试题:有一个很大很大的输入流,大到没有存储器可以将其存储下来,而且只输入一次,如何从这个输入 流中随机取得m个记录
- 从输入流中随机抽取m个元素
- 九章算法面试题17 从输入流中随机取记录
- 编写一个程序读入一行输入,然后反向打印该行,您可以把输入存储在一个char数组中: 假定该行不超过255个字符。回忆一下,您可以使用具有%c说明符的scanf()从输入中一次 读入一个字符,而且当您按下回车键时会产生换行符(/n)
- 编写一个程序读入一行输入,然后反向打印该行,您可以把输入存储在一个char数组中: 假定该行不超过255个字符。回忆一下,您可以使用具有%c说明符的scanf()从输入中一次 读入一个字符,而且当您按
- 面试题 输入两个很大的正数(用C字符串表示),输出它们的乘积,不考虑非法输入
- 百度地图的POI搜索中:是否可以只输入一个关键词,不输入城市,
- 15. Google面试题:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b
- 谷歌面试题:给定一个数据流,其中包含无穷尽的搜索关键字(比如,人们在谷歌搜索时不断输入的关键字) 。如何才能从这个无穷尽的流中随机的选取 1000 个关键字?
- 百度面试题--M个不同的奖牌,每次随机取一个,一共可以取N次,取到所有M个不同奖牌的概率
- 输入一个数组(M,N),只可以想右边下边走,从(1,1)到(M,N)经过的最大数字和
- 不存储数据流的前提下,从输入流中获得这 n 个等概率的随机数据
- 不存储数据流的前提下,从输入流中获得这 n 个等概率的随机数据
- APPIUMsend_keys输入太慢?用adb可以提升很大速度
- 设计一个程序,输入3个整数,将其按从大到小的顺序输出
- 设计一个程序,输入3个整数,将其按从大到小的顺序输出
- 一个中兴的面试题,输入两个数n和m,从数列1,2,3……n中随意取几个数,使其和等于m,要求将其中所有组合列出来编程求解(c语言递归函数分解法)
- [转]在Mac OS X中配置Apache + PHP + MySQL
- 安卓开发----增加活动栏
- hdu4513(Manacher算法)
- ORA-01012:not logged on的解决办法
- 如何处理C++构造函数中的错误
- 百度面试题:有一个很大很大的输入流,大到没有存储器可以将其存储下来,而且只输入一次,如何从 这个输入 流中随机取得 m 个记录。
- Java设计模式笔记之门面模式
- C++强制类型转换
- 关于算法
- 《程序员面试宝典》读书笔记之单链表和源码
- windows 高分屏笔记本使用心得
- AbstractFactory抽象工厂模式
- android监听home键的方法
- Linux设备模型(中)之上层容器