如何找到文件甲并且删除六亿我的宝贝四千金删除

比特客户端
您的位置:
详解大数据
详解大数据
详解大数据
详解大数据
最好的反黄软件 还得选六亿宝贝 真正终身免费的
关键字:动态
  刘希是一名中学老师,今年26岁,清丽,温柔大方,声音甜美――这是她留给大家的印象。就是这么一个聪慧灵动的姑娘,在很长一段时间内,却总是忐忑不安,郁郁寡欢,到底发生了什么事儿了?
  不久前,刘希接手了初三年级的信息课,当她从容优雅地走进气派的电教室,坐在电脑前开始讲课时,身后的大屏幕上弹出了某女明星和男演员的不雅照,顿时,台下一片哗然,还伴有一些男生的怪叫声,在刘希看来,这声音特别让人受不了。
  也难怪,刘希从小家教甚严,以至于到现在为止还没有谈过恋爱,甭说是在大庭广众之下,而且,还是在自己的学生面前,就是一个人的时候,她看到这些暧昧图片也是会脸红心跳的。
  课肯定是要继续上的,给电脑断网是不现实的,那该怎么办了?刘希开始和同事、学校领导沟通这方面的问题,她的观点很明确鲜明,哪怕是成人在面对网络上的这些诱惑时,也是不能完全控制自己的,有时也会想入非非,更何况是正值青春萌动十五六岁的孩子。“一旦欲望之马脱缰,后果是不堪设想的。”在阐述完自己的观点后,刘希总是拿这句话当结语。
  其实,不只刘希,很多信息课老师都曾遇到过类似问题,同事黄茉说:“在一次教学交流课中,突然计算机屏幕弹出色情画面小窗口,学生一片哗然,万分尴尬,无法形容当时的场面。”
  对于老师们的意见,校方很重视,并立即着手解决这一问题,除了加强对学生的思想教育工作外,学校也花钱了一些过滤型反黄软件,可是毫无用处,而且影响上网速度。在很长一段时间内,老师们通常的做法是:发现情况立即拔掉网线,终止正常教学。以避免对学生造成伤害。
  后来,在教育部门的推荐下,学校免费安装了“六亿宝贝”反黄助学系统,才使这一问题得到了彻底解决。“现在用了免费的“六亿宝贝”系统,我无须担心吊胆,可以安心教学了。”从说话的神色可以看出,刘希又重新焕发出青春的活力。
  网络时代,是一座巨大的资源宝库,同时,也是一个天然的巨大垃圾场,因此,文化环保工程一直是国家的重点工程。“六亿宝贝”免费反黄助学系统紧跟时代步伐,于净化网络环境、引导未成年健康上网,并且是目前做得最好的一个反黄系统。
  “六亿宝贝”采用计算机管理+人工审核相结合的方式,巧妙解决了内容过滤性反黄软件误判及漏判问题。真正成为了全球第一个100%无黄上网平台,获中央精神文明办创新成果二等奖,是江西省教育厅推荐使用品牌,经大量用户使用验证效果,并赢得了优秀口碑。
  “六亿宝贝” 免费反黄助学系统研发团队用整整11年的时间,对海量的网络资源进行去粗取精、去伪存真,积累了近200万个网址白名单,并免费提供给大家使用。并且这些网址,都是最适合青少年使用的。
  “六亿宝贝”相关负责人介绍说,网络是把双刃剑,用得好,可以拓宽视野,增长知识,提升智慧;用不好,可能会误入歧途,甚至锒铛入狱。从某种意义上说,互联网可以决定人生的命运。
  “孩子是祖国的未来,环境将直接影响他以后的人生,也将影响祖国的未来发展和社会的和谐。”想让孩子们拥有健康、美好的人生吗?
  您只需在www.i6188.com上,免费下载应用软件,就可以根据自身需要设置过滤级别、上网时间等,查看信息拦截情况,还可以选择添加白名单。
  当孩子一开机,就在学生模式下运行,孩子点开的网站都是六亿宝贝推荐的有选择的精粹信息,这样就能避免孩子受到铺天盖地的粗制滥造信息的侵扰,学点真正有用的东西,增加智慧。
  即使孩子有意无意点击了黄色网站 ,也浏览不到该网站,六亿宝贝会适当的引导他们,进入到一个健康、益智、助学的网站,从而养成健康上网的良好习惯。
相关文章:
[ 责任编辑:墨客 ]
去年,手机江湖里的竞争格局还是…
甲骨文的云战略已经完成第一阶段…
软件信息化周刊
比特软件信息化周刊提供以数据库、操作系统和管理软件为重点的全面软件信息化产业热点、应用方案推荐、实用技巧分享等。以最新的软件资讯,最新的软件技巧,最新的软件与服务业内动态来为IT用户找到软捷径。
商务办公周刊
比特商务周刊是一个及行业资讯、深度分析、企业导购等为一体的综合性周刊。其中,与中国计量科学研究院合力打造的比特实验室可以为商业用户提供最权威的采购指南。是企业用户不可缺少的智选周刊!
比特网络周刊向企业网管员以及网络技术和产品使用者提供关于网络产业动态、技术热点、组网、建网、网络管理、网络运维等最新技术和实用技巧,帮助网管答疑解惑,成为网管好帮手。
服务器周刊
比特服务器周刊作为比特网的重点频道之一,主要关注x86服务器,RISC架构服务器以及高性能计算机行业的产品及发展动态。通过最独到的编辑观点和业界动态分析,让您第一时间了解服务器行业的趋势。
比特存储周刊长期以来,为读者提供企业存储领域高质量的原创内容,及时、全面的资讯、技术、方案以及案例文章,力求成为业界领先的存储媒体。比特存储周刊始终致力于用户的企业信息化建设、存储业务、数据保护与容灾构建以及数据管理部署等方面服务。
比特安全周刊通过专业的信息安全内容建设,为企业级用户打造最具商业价值的信息沟通平台,并为安全厂商提供多层面、多维度的媒体宣传手段。与其他同类网站信息安全内容相比,比特安全周刊运作模式更加独立,对信息安全界的动态新闻更新更快。
新闻中心热点推荐
新闻中心以独特视角精选一周内最具影响力的行业重大事件或圈内精彩故事,为企业级用户打造重点突出,可读性强,商业价值高的信息共享平台;同时为互联网、IT业界及通信厂商提供一条精准快捷,渗透力强,覆盖面广的媒体传播途径。
云计算周刊
比特云计算周刊关注云计算产业热点技术应用与趋势发展,全方位报道云计算领域最新动态。为用户与企业架设起沟通交流平台。包括IaaS、PaaS、SaaS各种不同的服务类型以及相关的安全与管理内容介绍。
CIO俱乐部周刊
比特CIO俱乐部周刊以大量高端CIO沙龙或专题研讨会以及对明星CIO的深入采访为依托,汇聚中国500强CIO的集体智慧。旨为中国杰出的CIO提供一个良好的互融互通 、促进交流的平台,并持续提供丰富的资讯和服务,探讨信息化建设,推动中国信息化发展引领CIO未来职业发展。
IT专家新闻邮件长期以来,以定向、分众、整合的商业模式,为企业IT专业人士以及IT系统采购决策者提供高质量的原创内容,包括IT新闻、评论、专家答疑、技巧和白皮书。此外,IT专家网还为读者提供包括咨询、社区、论坛、线下会议、读者沙龙等多种服务。
X周刊是一份IT人的技术娱乐周刊,给用户实时传递I最新T资讯、IT段子、技术技巧、畅销书籍,同时用户还能参与我们推荐的互动游戏,给广大的IT技术人士忙碌工作之余带来轻松休闲一刻。
微信扫一扫
关注Chinabyte优秀学生上网伴侣 开明家给六亿宝贝点攒
作为一个母亲,我随时关注孩子的成长,从他呱呱落地的那一刻起,他就牵动着我的心。他的每一个微小的变化,我都看在眼里记在心里,随着他慢慢的长大,接触互联网的时间也愈来愈多,因为经常需要在互联网上查询一些学习的资料或者老师会布置一些需要在网上才可以完成的作业,我开始有些担心和疑虑。因为我知道互联网真的很神奇,它拉近了人与人之间的距离,远在世界各个角落的发生事件,因为互联网在很短的时间里就已经传遍了各个地方,并且人们通过互联网也能快速掌握更多的信息。但是互联网也是一个双刃剑,有利必然有弊,互联网也成了一个巨大的垃圾场,各种有害的信息纷纷找到了承载的“机体”,色情,恐怖,诈骗,另类思想,恶意程序等人类负面的东西无处不在,无孔不入,对成年人而言,互联网都是一个防不胜防的危险地带,更别说涉世未深的未成年人了。互联网仿佛人类社会的虚拟映射。在真实世界里,未成年人有监护人在时时刻刻保护着,但虚拟互联网的光速世界,绝大多数成年人都不知道其中的厉害,更别提给未成年人提供及时且有效的保护。随着孩子一天一天长大慢慢的他已经步入了青春期,这种担心也越来越强烈了,这时候的孩子已经开始有了自我意识,自身的求知欲和好奇心也特别的强烈。他不愿意你更多的去干涉他自己的事,以前他上网我还可以在旁边陪着,现在他已经开始排斥我了,他希望我可以给他更多的自由,但是在他上网时我却更加的担心,因为网络里充斥的黄赌毒现象,孩子的分辨力是远远不够的,如果一旦孩子被这些所吸引,孩子的身心健康将会受到毁灭性的打击,更不用谈以后的前途啦。于是出于保护孩子的身心健康考虑,我开始在网上搜索一些反黄软件,想看看有什么比较好的软件可以保护孩子的上网安全,用软件来保护孩子,这样孩子既不会对我产生抵触情绪,又可以通过上互联网学习到于孩子有益的知识,还可以改善孩子与我的关系。刚开始我了解了一些付费的上网的各类反黄软件,我发现目前我国大多数反黄软件都有一些弊端,或多或少都会有一些漏洞,让一些不法的网站钻了空子。因为所有这些软件都是通过计算机来管理的,但是大家都知道计算机毕竟只能根据人所设定的一些相关程序来解决问题,没有人脑有智慧,中国五千年的文化,在文字上有着千奇百怪的变化,或者文字背后的含义,退一步来讲就算文字的问题解决了,还有图片的问题,这些都是计算机所不能屏蔽的或掌握的,国家监督部门对于这样的问题从做软件的角度来讲是允许有一定的误判率存在的,但是对于我来讲,我不能有一丝的大意,因为只要有万分之一的可能,对我来讲就是百分之百。一时间我有些愁肠百结了,不知道应该如何办了,这时在一个培优的群里偶然听家长聊起这个问题她为我推荐了一款免费的六亿宝贝的反黄软件,并告诉了我它的网址链接http://www.i6188.com,我知道后回家仔细的研究对比以前查询过的付费软件飞腾,展翅鸟后发现:该软件采用计算机+人工管理相结合的方式,巧妙解决了误判及漏判问题,直至目前,国内只此一款产品真正可以做到无误判、无漏判,真正达到了实用级水平。这款软件采用人工审核肉眼判断,真正实现了百分之百的绿色网站,该软件为了让广大用户有更好的体验,已经人工审核了10年时间,并且准备了173万认真审核的网站供广大网民使用,还在持续不断的发现和收集网民们提交的新网站, 对于很多软件不能判断图片的问题也得到了很好的解决,在孩子上网时也可以适当的引导,因为该软件有很多非常好的网站,正常人能记住的网站不超过20个,经常使用的网站不超过100个,一辈子要用的网站可能不超过1万个。而该网站有173万个网站可以使用,并且针对孩子都是绿色安全的,我给孩子装上这款软件后,孩子在这个平台上学习和使用互联网,相对来讲走了一些捷径,因为该软件的网站数量很多,而且都是很好的网站,孩子的知识面也更宽了,我也不用为孩子上互联网纠结了。
正文已结束,您可以按alt+4进行评论
相关搜索:
看过本文的人还看了
[责任编辑:wyjakywang]
【装修福利】史上性价比最高基装套餐!1.9万基装90平三房
【活动】19元秒杀无痛洗牙!还能抵1900元!
Copyright & 1998 - 2018 Tencent. All Rights Reserved1842人阅读
计算机基础(1)
本文转自结构之法算法之道blog
1、何谓海量数据处理?
所谓海量数据处理,其实很简单,海量,海量,何谓海量,就是数据量太大,所以导致要么是无法在较短时间内迅速解决,要么是数据太大,导致无法一次性装入内存。
那解决办法呢?针对时间,我们可以采用巧妙的算法搭配合适的数据结构,如Bloom filter/Hash/bit-map/堆/数据库或倒排索引/trie/,针对空间,无非就一个办法:大而化小:分而治之/hash映射,你不是说规模太大嘛,那简单啊,就把规模大化为规模小的,各个击破不就完了嘛。
至于所谓的单机及集群问题,通俗点来讲,单机就是处理装载数据的机器有限(只要考虑cpu,内存,硬盘的数据交互),而集群,机器有多辆,适合分布式处理,并行计算(更多考虑节点和节点间的数据交互)。
再者,通过本blog内的有关海量数据处理的文章,我们已经大致知道,处理海量数据问题,无非就是:
分而治之/hash映射 + hash统计 + 堆/快速/归并排序;
双层桶划分
Bloom filter/Bitmap;
Trie树/数据库/倒排索引;
分布式处理之Hadoop/Mapreduce。
本文接下来的部分,便针对这6种方法模式结合对应的海量数据处理面试题分别具体阐述。
2、处理海量数据问题之六把密匙
密匙一、分而治之/Hash映射 + Hash统计 + 堆/快速/归并排序
(1)海量日志数据,提取出某日访问百度次数最多的那个IP。
既然是海量数据处理,那么可想而知,给我们的数据那就一定是海量的。针对这个数据的海量,我们如何着手呢?对的,无非就是分而治之/hash映射 + hash统计 + 堆/快速/归并排序,说白了,就是先映射,而后统计,最后排序:
分而治之/hash映射:针对数据太大,内存受限,只能是:把大文件化成(取模映射)小文件,即16字方针:大而化小,各个击破,缩小规模,逐个解决
hash统计:当大文件转化了小文件,那么我们便可以采用常规的Hashmap(ip,value)来进行频率统计。
堆/快速排序:统计完了之后,便进行排序(可采取堆排序),得到次数最多的IP。
具体而论,则是:“首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多有个2^32个IP。同样可以采用映射的方法,比如模1000,把整个大文件映射为1000个小文件,再找出每个小文中出现频率最大的IP(可以采用Hash_map进行频率统计,然后再找出频率最大的几个)及相应的频率。然后再在这1000个最大的IP中,找出那个频率最大的IP,即为所求。”
(2)搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。
假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个。一个查询串的重复度越高,说明查询它的用户越多,也就是越热门。),请你统计最热门的10个查询串,要求使用的内存不能超过1G。
由上面第1题,我们知道,数据大则划为小的,但如果数据规模比较小,能一次性装入内存呢?比如这第2题,虽然有一千万个Query,但是由于重复度比较高,因此事实上只有300万的Query,每个Query255Byte,因此我们可以考虑把他们都放进内存中去,而现在只是需要一个合适的数据结构,在这里,Hash Table绝对是我们优先的选择。所以我们摒弃分而治之/hash映射的方法,直接上hash统计,然后排序。So,
hash统计:先对这批海量数据预处理(维护一个Key为Query字串,Value为该Query出现次数的HashTable,即Hashmap(Query,Value),每次读取一个Query,如果该字串不在Table中,那么加入该字串,并且将Value值设为1;如果该字串在Table中,那么将该字串的计数加一即可。最终我们在O(N)的时间复杂度内用Hash表完成了统计;
堆排序:第二步、借助堆这个数据结构,找出Top K,时间复杂度为N‘logK。即借助堆结构,我们可以在log量级的时间内查找和调整/移动。因此,维护一个K(该题目中是10)大小的小根堆,然后遍历300万的Query,分别和根元素进行对比所以,我们最终的时间复杂度是:O(N) + N’*O(logK),(N为1000万,N’为300万)。
别忘了堆排序思路:“维护k个元素的最小堆,即用容量为k的最小堆存储最先遍历到的k个数,并假设它们即是最大的k个数,建堆费时O(k),并调整堆(费时O(logk))后,有k1&k2&…kmin(kmin设为小顶堆中最小元素)。继续遍历数列,每次遍历一个元素x,与堆顶元素比较,若x&kmin,则更新堆(用时logk),否则不更新堆。这样下来,总费时O(k*logk+(n-k)*logk)=O(n*logk)。此方法得益于在堆中,查找等各项操作时间复杂度均为logk。”
当然,你也可以采用trie树,关键字域存该查询串出现的次数,没有出现为0。最后用10个元素的最小推来对出现频率进行排序。
(3)有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16字节,内存限制大小是1M。返回频数最高的100个词。
由上面那两个例题,分而治之 + hash统计 + 堆/快速排序这个套路,我们已经开始有了屡试不爽的感觉。下面,再拿几道再多多验证下。请看此第3题:又是文件很大,又是内存受限,咋办?还能怎么办呢?无非还是:
分而治之/hash映射:顺序读文件中,对于每个词x,取hash(x)%5000,然后按照该值存到5000个小文件(记为x0,x1,…x4999)中。这样每个文件大概是200k左右。如果其中的有的文件超过了1M大小,还可以按照类似的方法继续往下分,直到分解得到的小文件的大小都不超过1M。
hash统计:对每个小文件,采用trie树/hash_map等统计每个文件中出现的词以及相应的频率。
堆/归并排序:取出出现频率最大的100个词(可以用含100个结点的最小堆),并把100个词及相应的频率存入文件,这样又得到了5000个文件。最后就是把这5000个文件进行归并(类似于归并排序)的过程了。
(4)有10个文件,每个文件1G,每个文件的每一行存放的都是用户的query,每个文件的query都可能重复。要求你按照query的频度排序。
hash映射:顺序读取10个文件,按照hash(query)%10的结果将query写入到另外10个文件(记为)中。这样新生成的文件每个的大小大约也1G(假设hash函数是随机的)。
hash统计:找一台内存在2G左右的机器,依次对用hash_map(query, query_count)来统计每个query出现的次数。注:hash_map(query,query_count)是用来统计每个query的出现次数,不是存储他们的值,出现一次,则count+1。
堆/快速/归并排序:利用快速/堆/归并排序按照出现次数进行排序。将排序好的query和对应的query_cout输出到文件中。这样得到了10个排好序的文件(记为)。对这10个文件进行归并排序(内排序与外排序相结合)。
除此之外,此题还有以下两个方法:
方案2:一般query的总量是有限的,只是重复的次数比较多而已,可能对于所有的query,一次性就可以加入到内存了。这样,我们就可以采用trie树/hash_map等直接来统计每个query出现的次数,然后按出现次数做快速/堆/归并排序就可以了。
方案3:与方案1类似,但在做完hash,分成多个文件后,可以交给多个文件来处理,采用分布式的架构来处理(比如MapReduce),最后再进行合并。
(5)给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?
可以估计每个文件安的大小为5G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。
分而治之/hash映射:遍历文件a,对每个url求取,然后根据所取得的值将url分别存储到1000个小文件(记为)中。这样每个小文件的大约为300M。遍历文件b,采取和a相同的方式将url分别存储到1000小文件中(记为)。这样处理后,所有可能相同的url都在对应的小文件()中,不对应的小文件不可能有相同的url。然后我们只要求出1000对小文件中相同的url即可。
hash统计:求每对小文件中相同的url时,可以把其中一个小文件的url存储到hash_set中。然后遍历另一个小文件的每个url,看其是否在刚才构建的hash_set中,如果是,那么就是共同的url,存到文件里面就可以了。
(6)怎么在海量数据中找出重复次数最多的一个?
先做hash,然后求模映射为小文件,求出每个小文件中重复次数最多的一个,并记录重复次数。然后找出上一步求出的数据中重复次数最多的一个就是所求(具体参考前面的题)。
(7)上千万或上亿数据(有重复),统计其中出现次数最多的钱N个数据。
上千万或上亿的数据,现在的机器的内存应该能存下。所以考虑采用hash_map/搜索二叉树/红黑树等来进行统计次数。然后就是取出前N个出现次数最多的数据了,可以用第2题提到的堆机制完成。
(8)一个文本文件,大约有一万行,每行一个词,要求统计出其中最频繁出现的前10个词,请给出思想,给出时间复杂度分析。
这题是考虑时间效率。用trie树统计每个词出现的次数,时间复杂度是O(n*le)(le表示单词的平准长度)。然后是找出出现最频繁的前10个词,可以用堆来实现,前面的题中已经讲到了,时间复杂度是O(n*lg10)。所以总的时间复杂度,是O(n*le)与O(n*lg10)中较大的哪一个。
密匙二、双层桶划分
双层桶划分—-其实本质上还是分而治之的思想,重在“分”的技巧上!
适用范围:第k大,中位数,不重复或重复的数字
基本原理及要点:因为元素范围很大,不能利用直接寻址表,所以通过多次划分,逐步确定范围,然后最后在一个可以接受的范围内进行。可以通过多次缩小,双层只是一个例子。
问题实例:
(1)2.5亿个整数中找出不重复的整数的个数,内存空间不足以容纳这2.5亿个整数。
  有点像鸽巢原理,整数个数为2^32,也就是,我们可以将这2^32个数,划分为2^8个区域(比如用单个文件代表一个区域),然后将数据分离到不同的区域,然后不同的区域在利用bitmap就可以直接解决了。也就是说只要有足够的磁盘空间,就可以很方便的解决。
(2)5亿个int找它们的中位数。
  这个例子比上面那个更明显。首先我们将int划分为2^16个区域,然后读取数据统计落到各个区域里的数的个数,之后我们根据统计结果就可以判断中位数落到那个区域,同时知道这个区域中的第几大数刚好是中位数。然后第二次扫描我们只统计落在这个区域中的那些数就可以了。
  实际上,如果不是int是int64,我们可以经过3次这样的划分即可降低到可以接受的程度。即可以先将int64分成2^24个区域,然后确定区域的第几大数,在将该区域分成2^20个子区域,然后确定是子区域的第几大数,然后子区域里的数的个数只有2^20,就可以直接利用direct addr table进行统计了。
密匙三:Bloom filter/Bitmap
适用范围:可以用来实现数据字典,进行数据的判重,或者集合求交集
基本原理及要点:
  对于原理来说很简单,位数组+k个独立hash函数。将hash函数对应的值的位数组置1,查找时如果发现所有hash函数对应位都是1说明存在,很明显这个过程并不保证查找的结果是100%正确的。同时也不支持删除一个已经插入的关键字,因为该关键字对应的位会牵动到其他的关键字。所以一个简单的改进就是 counting Bloom filter,用一个counter数组代替位数组,就可以支持删除了。
  还有一个比较重要的问题,如何根据输入元素个数n,确定位数组m的大小及hash函数个数。当hash函数个数k=(ln2)*(m/n)时错误率最小。在错误率不大于E的情况下,m至少要等于n*lg(1/E)才能表示任意n个元素的集合。但m还应该更大些,因为还要保证bit数组里至少一半为0,则m应该&=nlg(1/E)*lge 大概就是nlg(1/E)1.44倍(lg表示以2为底的对数)。
  举个例子我们假设错误率为0.01,则此时m应大概是n的13倍。这样k大概是8个。
  注意这里m与n的单位不同,m是bit为单位,而n则是以元素个数为单位(准确的说是不同元素的个数)。通常单个元素的长度都是有很多bit的。所以使用bloom filter内存上通常都是节省的。
  Bloom filter将集合中的元素映射到位数组中,用k(k为哈希函数个数)个映射位是否全1表示元素在不在这个集合中。Counting bloom filter(CBF)将位数组中的每一位扩展为一个counter,从而支持了元素的删除操作。Spectral Bloom Filter(SBF)将其与集合元素的出现次数关联。SBF采用counter中的最小值来近似表示元素的出现频率。
问题实例:给你A,B两个文件,各存放50亿条URL,每条URL占用64字节,内存限制是4G,让你找出A,B文件共同的URL。如果是三个乃至n个文件呢?
  根据这个问题我们来计算下内存的占用,4G=2^32大概是40亿*8大概是340亿,n=50亿,如果按出错率0.01算需要的大概是650亿个bit。现在可用的是340亿,相差并不多,这样可能会使出错率上升些。另外如果这些urlip是一一对应的,就可以转换成ip,则大大简单了。
同时,上文的第5题:给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?如果允许有一定的错误率,可以使用Bloom filter,4G内存大概可以表示340亿bit。将其中一个文件中的url使用Bloom filter映射为这340亿bit,然后挨个读取另外一个文件的url,检查是否与Bloom filter,如果是,那么该url应该是共同的url(注意会有一定的错误率)。
Bitmap介绍
所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。
如果说了这么多还没明白什么是Bit-map,那么我们来看一个具体的例子,假设我们要对0-7内的5个元素(4,7,2,5,3)排序(这里假设这些元素没有重复)。那么我们就可以采用Bit-map的方法来达到排序的目的。要表示8个数,我们就只需要8个Bit(1Bytes),首先我们开辟1Byte的空间,将这些空间的所有Bit位都置为0(如下图:)
然后遍历这5个元素,首先第一个元素是4,那么就把4对应的位置为1(可以这样操作 p+(i/8)|(0×01&&(i%8)) 当然了这里的操作涉及到Big-ending和Little-ending的情况,这里默认为Big-ending),因为是从零开始的,所以要把第五位置为一(如下图):
然后再处理第二个元素7,将第八位置为1,,接着再处理第三个元素,一直到最后处理完所有的元素,将相应的位置为1,这时候的内存的Bit位的状态如下:
然后我们现在遍历一遍Bit区域,将该位是一的位的编号输出(2,3,4,5,7),这样就达到了排序的目的。下面的代码给出了一个BitMap的用法:排序。
#include &stdio.h&
#include &memory.h&
#define BYTESIZE 8
void SetBit(char *p, int posi)
for(int i=0; i & (posi/BYTESIZE); i++)
*p = *p|(0x01 && (posi%BYTESIZE));
void BitMapSortDemo()
int num[] = {3,5,2,10,6,12,8,14,9};
const int BufferLen = 2;
char *pBuffer = new char[BufferLen];
memset(pBuffer,0,BufferLen);
for(int i=0;i & 9;i++)
SetBit(pBuffer,num[i]);
for(int i=0;i& BufferLi++)
for(int j=0;j& BYTESIZE;j++)
if((*pBuffer&(0x01 && j)) == (0x01 && j))
printf("%d ",i*BYTESIZE + j);
pBuffer++;
int main()
BitMapSortDemo();
可进行数据的快速查找,判重,删除,一般来说数据范围是int的10倍以下。
(9)在2.5亿个整数中找出不重复的整数,注,内存不足以容纳这2.5亿个整数。
方案1:采用2-Bitmap(每个数分配2bit,00表示不存在,01表示出现一次,10表示多次,11无意义)进行,共需内存2^32 * 2 bit=1 GB内存,还可以接受。然后扫描这2.5亿个整数,查看Bitmap中相对应位,如果是00变01,01变10,10保持不变。所描完事后,查看bitmap,把对应位是01的整数输出即可。
方案2:也可采用与第1题类似的方法,进行划分小文件的方法。然后在小文件中找出不重复的整数,并排序。然后再进行归并,注意去除重复的元素。
(10)腾讯面试题:给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?
方案1:申请512M的内存,一个bit位代表一个unsigned int值。读入40亿个数,设置相应的bit位,读入要查询的数,查看相应bit位是否为1,为1表示存在,为0表示不存在。
密匙四、Trie树/数据库/倒排索引
适用范围:数据量大,重复多,但是数据种类小可以放入内存
基本原理及要点:实现方式,节点孩子的表示方式
扩展:压缩实现。
问题实例:
有10个文件,每个文件1G,每个文件的每一行都存放的是用户的query,每个文件的query都可能重复。要你按照query的频度排序。
1000万字符串,其中有些是相同的(重复),需要把重复的全部去掉,保留没有重复的字符串。请问怎么设计和实现?
寻找热门查询:查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个,每个不超过255字节。
上面的第8题:一个文本文件,大约有一万行,每行一个词,要求统计出其中最频繁出现的前10个词。其解决方法是:用trie树统计每个词出现的次数,时间复杂度是O(n*le)(le表示单词的平准长度),然后是找出出现最频繁的前10个词。
更多有关Trie树的介绍,请参见此文:
数据库索引
适用范围:大数据量的增删改查
基本原理及要点:利用数据的设计实现方法,对海量数据的增删改查进行处理。
关于数据库索引及其优化,更多可参见此文:。同时,关于MySQL索引背后的数据结构及算法原理,这里还有一篇很好的文章:。
倒排索引(Inverted index)
适用范围:搜索引擎,关键字查询
基本原理及要点:为何叫倒排索引?一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。
以英文为例,下面是要被索引的文本:
T0 = “it is what it is”
T1 = “what is it”
T2 = “it is a banana”
我们就能得到下面的反向文件索引:
“banana”: {2}
检索的条件”what”,”is”和”it”将对应集合的交集。
正向索引开发出来用来存储每个文档的单词的列表。正向索引的查询往往满足每个文档有序频繁的全文查询和每个单词在校验文档中的验证这样的查询。在正向索引中,文档占据了中心的位置,每个文档指向了一个它所包含的索引项的序列。也就是说文档指向了它包含的那些单词,而反向索引则是单词指向了包含它的文档,很容易看到这个反向的关系。
问题实例:文档检索系统,查询那些文件包含了某单词,比如常见的学术论文的关键字搜索。
密匙五、外排序
适用范围:大数据的排序,去重
基本原理及要点:外排序的归并方法,置换选择败者树原理,最优归并树
问题实例:
1).有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16个字节,内存限制大小是1M。返回频数最高的100个词。
这个数据具有很明显的特点,词的大小为16个字节,但是内存只有1m做hash有些不够,所以可以用来排序。内存可以当输入缓冲区使用。
关于多路归并算法及外排序的具体应用场景,请参见此文: 。
密匙六、分布式处理 Mapreduce
适用范围:数据量大,但是数据种类小可以放入内存
基本原理及要点:将数据交给不同的机器去处理,数据划分,结果归约。
问题实例:
The canonical example application of MapReduce is a process to count the appearances of each different word in a set of documents:
海量数据分布在100台电脑中,想个办法高效统计出这批数据的TOP10。
一共有N个机器,每个机器上有N个数。每个机器最多存O(N)个数并对它们操作。如何找到N^2个数的中数(median)?
更多具体阐述请参见:从Hadhoop框架与MapReduce模式中谈海量数据处理,及
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:493142次
积分:4408
积分:4408
排名:第7921名
原创:70篇
转载:10篇
评论:169条
机器学习、数据挖掘爱好者
阿里妈妈算法工程师
期待认识志同道合的你
文章:13篇
阅读:185056

我要回帖

更多关于 淘宝已买到的宝贝删除 的文章

 

随机推荐