• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >编程问答 > 存有100万个<2^20正整数的文件中找到任意一个不在其中的数

存有100万个<2^20正整数的文件中找到任意一个不在其中的数

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-07

佚名通过本文主要向大家介绍了双通道内存有什么好处,存有,一个存有一些水的水池,大显存有什么用,存有几画等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:存有100万个<2^20正整数的文件中找到任意一个不在其中的数
描述:

数字有重复,限制内存只能用几十个字节。未给定需要查找的数,只要找出任意一个即可


解决方案1:

目测用bitmap,
但是内存小,所以明显不行,只能用硬盘空间换内存,
先逐行扫描这个文件,
根据扫描出来的数字的范围,将之插入文件里,
文件规律为:
每10个数字存进一个文件,
比如文件夹0,表示的范围为0-9,文件夹1表示的是10-19,文件夹n表示10n~10n-1,
如果扫描出的是1012,那么就是文件名为101的文件,如果该文件不存在就创建之,存在就添加进去,每行一个数字。
扫描完了后,就能得到一堆文件,
依次扫描这堆文件,读取里面的数字,如果数字的个数不为10,那么肯定是有缺的,找这个缺的很容易。
当然,一般操作系统对文件夹的个数是有限制的,所以呢,这个10万个文件可以划分3个层级存储,取模3次就行了。

因为你说是几十个字节的内存,也没说多少,我就选10为范围了,其实范围可以大点的。

解决方案2:

查查布隆过滤器 bloomfilter 在搜索引擎中有广泛应用,有误报但是不会漏报,所以,不在其中的数一定至少有1 bit不为1,从而判定该数。

http://www.cnblogs.com/haippy/archive/2012/07/13/2590351.html

解决方案3:

知乎链接:http://www.zhihu.com/question/29743992

由于2^20 = 1048576 > 1000000 所以必定存在不在数组中的元素。

  1. 扫描所有数,统计最高位0 - 9数字的个数。
  2. 再扫描一遍,把最高位数字最少(记为a_1)的整数存在另一个文件。

对所有新生成的文件重复上述算法,显然a_1a_2...即为所求。

时间复杂度 < 2*(n + n/10 + n/10^2 + ...) = O(n),空间复杂度为O(1)(文件用的储存空间而非内存)。

P.S. 如果不允许使用文件,那么时间复杂度可以达到O(kn)。(k为整数位数)

这是在知乎上得到的答案,之前的回答都可以实现,但是感觉这个更好一些。完善一下改为:

第n次扫描
1. 扫描存储的文件,统计第n位(右往左数)0 - 9数字的个数b_n。
2. 再扫描一遍,把第n位数字最少(记为a_1)的整数存在另一个文件。
对所有新生成的文件重复上述算法,当b_n=0时结束,显然a_1a_2...a_n…即为所求。


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 存有100万个<2^20正整数的文件中找到任意一个不在其中的数

相关文章

  • 2017-06-07 jboss'findstr'不是内部或外部命令,也不是可运行的程序
  • 2017-06-07 支付宝安全采用的安全机制是什么?
  • 2017-06-07 (python)IOError:[Errno32]Brokenpipe
  • 2017-06-07 python爬虫分享几本自己收藏的python书籍
  • 2017-06-07 (python)Selenium的driver在页面JS触发之后有变化吗?如何获取?
  • 2017-06-07 (shell)Linux网络配置问题:IP地址,子网掩码,以及网关
  • 2017-06-07 DockerforWindowsHyper-v和VagrantVirtualBox共存问题
  • 2017-06-07 (laravel)比较好的成熟的,容易二次开发的论坛系统,有移动端界面的
  • 2017-06-07 SpringMVC上传图片时发生{"error":"fileisnotspecifiedinmultipart"}
  • 2017-06-07 七牛图片上传后多久可以访问到?

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • python或者R画图
    • JPA访问数据库的参数在哪啊?
    • redis订阅发布者适合语音分发的场景吗
    • 初次使用七牛云存储,请问这是什么问题呢
    • python如何将爬取的网站url,变成超链接的形式
    • 请教一个list追加记录的问题
    • 七牛图片处理的问题
    • Javascript正则表达式非获取匹配的问题
    • 搭建openstack源码开发环境
    • 提取所有匹配的字符串,包括已经匹配的

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有