程序员面试题精选--从文件中随机提取一个字符串
来源:互联网 发布:男生自慰肛门知乎 编辑:程序博客网 时间:2024/05/29 15:12
这是前几天去新浪微博面试被问到的问题!
题目是这样的:
一个文件中按行存放若干字符串,要求只能按顺序遍历文件一次,不能用表格存储字符串偏移,随机返回一个字符串。
本人愚笨,在那挣扎了半天没有结果,悻悻而归。
今天在看《C专家编程》,猛然发现,附录A.6就是原题!真是悔恨啊,读书太少啊,苍天大地啊~~
它是这样解的:
基本的技巧是在幸存的字符串中挑选,并在过程中不断更新。
打开文件并保存第一个字符串,些时就有了一个备选字符串,并有100%的可能性选中它。保存这个字符串,继续读入下一个字符串,这样就有了两个字符串,选中每个的可能性都是50%。选中其一并保存,然后丢弃另一个。再读入下一个字符串,按照新字符串33%原先幸存的字符串67%的概率(它代表前两个字符串的幸存者),在两者之间选择一个,然后保存新选中的字符串。
根据这个方法,依次对整个文件进行处理。在其中每一步,读入字符串N,在它(按照1/N的概率)和前一个幸存的字符串(按照N-1/N的概率)之间进行选择。当达到文件末尾的时候,最后一个幸存的字符串就是从整个文件中随机提取的那个字符串!
请参阅《C专家编程》281页 附录A.6。
此方法效率较低,哪位有更高效的方法,欢迎留言讨论!
- 程序员面试题精选--从文件中随机提取一个字符串
- 从文件中随机提取一个字符串
- 实现--从文件中随机提取一个字符串
- 程序员面试题精选--从头到尾输出字符串
- 程序员面试题精选-- 字符串的组合
- 程序员面试题精选-- 字符串的组合
- 从打开的文件中随机提取字符串
- 程序员面试题精选
- 《程序员面试题精选》05.输出一个字符串的所有子串
- 程序员面试题精选100题(36)-在字符串中删除特定的字符
- 程序员面试题精选100题(36)-在字符串中删除特定的字符
- 程序员面试题精选100题(36)-在字符串中删除特定的字符
- 程序员面试题精选--在字符串中删除特定的字符
- 程序员面试题精选100题(36)-在字符串中删除特定的字符
- 程序员面试题精选--在字符串中删除特定的字符
- 程序员面试题精选100题(36)-在字符串中删除特定的字符
- 在字符串中删除特定的字符(程序员面试题精选100题)
- 程序员面试题精选100题(36)-在字符串中删除特定的字符[算法]
- 三十而立的生日
- CFont类
- JDBC的应用
- 20111019
- Windows下gvim第一篇
- 程序员面试题精选--从文件中随机提取一个字符串
- Dropbox:网络存储/云存储/网络U盘/文件动态同步
- java UDP 操作
- 数组特殊处理(连续数字)
- http消息
- 自我补充篇之java随机验证码的生成(字母不同色,干扰线无规律颜色也不同)
- Java NIO原理和使用
- Lucene简介
- java class路径获取