当前位置: 首页 > news >正文

淘宝做促销的网站百度论坛

淘宝做促销的网站,百度论坛,做网站要具备些什么条件,1元1年xyz域名1.从40个亿中产生一个不存在的整数 题目要求:给定一个输入文件,包含40亿个非负整数,请设计一个算法,产生一个不存在该文件中的整数,假设你有1GB的内存来完成这项任务。**** 解题中心思想:存储的不是这40亿…

1.从40个亿中产生一个不存在的整数

题目要求:给定一个输入文件,包含40亿个非负整数,请设计一个算法,产生一个不存在该文件中的整数,假设你有1GB的内存来完成这项任务。****

解题中心思想:存储的不是这40亿个数据本身,而是其对应的位置。

本题不用写代码,能把方法过程说清楚就可以。

1.1 位图存储大数据的原理

方法8 bit1B,一个32位整数需要4B的存储空间,40亿个数就是 40亿 * 4B,约为16GB,用位图来做的话会更节省空间,因为位图的每个位置只能用0或1进行状态表示,这样就只需要40亿 / 8 = 5亿字节,也就是大约500M的存储空间。

过程:具体来做就是先遍历这40亿个数,并把遍历的每个数在位图上的相对位置设置为1。这40亿个数遍历结束后,开始遍历位图,看看哪个位置上的状态为0,就说明这个位置对应的数没有在40亿个数中出现,位图遍历结束后就能得到所有未在40亿个数中出现过的数。

1.2 使用10MB来存储呢?

如果使用10MB来存储,位图也搞不定了,这个时候就得使用分块思想,用时间换空间,通过两次遍历来处理。

40亿个数需要约500MB的空间,如果只有10MB的空间,至少需要50个块才可以。一般划分块都使用2的幂次方的整数倍,此处划分为64个块是合理的。

首先将 0 − 2 32 0-2^{32} 0232 这个范围的数平均分成64个区间,每个区间是67 108 864个数,因为一共只有40亿个数,所以在统计每一个区间上的数有多少时,肯定会有至少一个区间上的计数小于67 108 864。利用这一点可以找出其中一个没出现过的数。具体过程如下:

第一次遍历:先申请长度位64的整型数组countArr[0, ..., 63]countArr[i]用来统计区间i上的数有多少。遍历40亿个数,跟去当前数是多少来决定哪一个区间上的计数增加。比如,如果当前数为2 567 278 1892 567 278 189 / 67 108 864 = 38 ,所以第38个区间上计数增加countArr[51]++。遍历完40亿个数之后,遍历countArr,必然会有某一个位置上的值(countArr[i])小于67 108 864,表示第i区间上至少有一个数没出现过。

此时使用的内存是非常小的,是countArr的大小(64 * 4B)

假设找到第37区间上的计数小于67 108 864,那么对这40亿个数据进行第二次遍历:

  1. 申请长度为67 108 864的位图(bit map),占用大约8MB的空间,记为bitArr[0, ... , 67108863]
  2. 遍历这40亿个数,此时的遍历只关注落在第37区间上的数,记为num(num满足 num / 67108864 = == 37),其他区间的数全部忽略。
  3. 如果步骤2的num在第37区间上,将bitArr[num - 67108864 * 37]的值设置为1,也就是只做第37区间上的数的bitArr映射。
  4. 遍历完40亿个数之后,在bitArr上必然存在没被设置成1的位置,假设第i个位置上的值没被设置成1,那么67108864 * 37 + i这个数就是一个没出现过的数

步骤小结:

  • 根据 10MB 的内存限制,确定统计区间的大小,就是第二次遍历时的 bitArr 大小。
  • 利用区间计数的方式,找到那个计数不足的区间,这个区间上肯定有没出现的数。
  • 对这个区间上的数做 bit map 映射,再遍历bit map,找到一个没出现的数即可。

1.3 如何确定分块的区间

上面的例子中,采用两次遍历,第一次将数据分成64块刚好解决问题,为什么不是128块,32块,16块或者其他块数呢?

这是主要为了保障第二次遍历时每个块都能放进这10MB的空间中。 2 23 < 10 M B < 2 24 2^{23} < 10MB < 2^{24} 223<10MB<224,而 2 23 = 8388608 2^{23} = 8388608 223=8388608 大约是8MB,也就是说我们一次的分块大小只能为8MB左右。我们在第二次遍历时分成64块刚好满足要求,这是最少得分成64块,当然如果分成128块、256块也是可以的。

http://www.hkea.cn/news/429062/

相关文章:

  • dreamweaver个人网站南宁求介绍seo软件
  • 网站常用素材企业培训视频
  • 北京市通州区建设委员会网站网站新站整站排名
  • 太原网站推广只选中联传媒推广排名seo
  • 企业网站建设的常见流程为百度互联网营销顾问
  • 养殖企业网站网络营销策划名词解释
  • 如何进行电子商务网站推广?百度网盘app
  • 做情趣网站需要什么资质sem推广外包
  • 国外网站做任务赚钱的最近新闻有哪些
  • 建设部网站查资质中裕隆百度推广登录平台网址
  • 黄页网站大全免费山东网络推广优化排名
  • 网站文字代码常见的网络营销工具
  • 计算机毕设网站建设怎么改长沙网站设计拓谋网络
  • 类似红盟的网站怎么做aso优化推广
  • vs2013做网站怎样制作免费网页
  • b2c网站的开发无锡网络优化推广公司
  • 网站做视频在线观看营销活动推广方案
  • wordpress多站点统计google图片搜索引擎入口
  • 麻章手机网站建设百度网盘提取码入口
  • 网站后台管理系统的重要技术指标sem竞价托管费用
  • 包头怎样做网站我想做电商怎么加入
  • 株洲企业网站建设品牌2023免费b站推广大全
  • 仿制单页面网站多少钱免费制作网站app
  • 商城网站制作网站长尾词挖掘工具
  • 夹克定制公司trinseo公司
  • 四川智能网站建设制作网站链接分析工具
  • 制作销售网站有哪些宁波网络营销推广咨询报价
  • 佛山做外贸网站服务新闻发稿平台
  • 做网站前怎么写文档域名收录
  • 中信建设有限责任公司钟宁关键词优化的方法有哪些