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

成都优化网站厂家新手如何建立网站

成都优化网站厂家,新手如何建立网站,黑马程序员培训怎么样,有了空间和域名 网站容易做吗哈希应用——海量数据面试题 一、位图应用1、给定100亿个整数,设计算法找到只出现一次的整数?2、给两个文件,分别有100亿个整数,我们只有1G内存,如何找到两个文件交集?(1)用一个位图…

哈希应用——海量数据面试题

  • 一、位图应用
    • 1、给定100亿个整数,设计算法找到只出现一次的整数?
    • 2、给两个文件,分别有100亿个整数,我们只有1G内存,如何找到两个文件交集?
      • (1)用一个位图(512MB)
      • (2)用两个位图(1GB)
    • 3、位图应用变形:1个文件有100亿个int,1G内存,设计算法找到出现次数不超过2次的所有整数
  • 二、哈希切割
  • 三、布隆过滤器
    • 1、给两个文件,分别有100亿个query,我们只有1G内存,如何找到两个文件交集?分别给出精确算法和近似算法
    • 2、如何扩展BloomFilter使得它支持删除元素的操作


一、位图应用

1、给定100亿个整数,设计算法找到只出现一次的整数?

我们描述状态有三种,分别是:
1、出现0次
2、出现1次
3、出现2次及以上

我们了解到,如果只有一个位图,那么状态就只有0和1两种状态,所以我们如果想要描述上面的三种状态的话,那么我们就需要开辟两个位图进行存储这三种情况,其第一个位和第二个位的组合进行分析出这三种情况。

这三种情况分别是:00->01->10,此时当我们读取到重复的整数时,就可以让其对应的两个位按照00→01→10的顺序进行变化,最后状态是01的整数就是只出现一次的整数。

#include<iostream>
#include<vector>
#include<assert.h>
#include<bitset>
using namespace std;int main()
{// 此处应该从文件中读取100亿个整数vector<int> v{ 12, 8, 13, 2, 8, 1, 2, 3, 3, 12, 43, 77 };// 堆上申请空间// 申请两个位图bitset<4294967295>* bs1 = new bitset<4294967295>;bitset<4294967295>* bs2 = new bitset<4294967295>;for (auto e : v){if (!bs1->test(e) && !bs2->test(e)) // 00->01{bs2->set(e);}else if (!bs1->test(e) && bs2->test(e)) // 01->10{bs1->set(e);bs2->reset(e);}else if (bs1->test(e) && !bs2->test(e)) // 10->10{// 不做任何处理}else{assert(false);}}for (size_t i = 0; i < 4294967295; i++){// 打印01if (!bs1->test(i) && bs2->test(i)){cout << i << " ";}}cout << endl;return 0;
}

注意点:如果我们存储100亿个整数的话,在堆中需要申请大约40个G的空间,这个空间是非常大的,而我们利用位图来解决这个问题的时候,我们就只需要512MB,也就是代码中的4294967295,两个位图才只需要1个G的空间。

2、给两个文件,分别有100亿个整数,我们只有1G内存,如何找到两个文件交集?

(1)用一个位图(512MB)

方法是依次读取文件中的整数的值,将其映射到一个位图中,再读取另一个文件中的所有整数,判断在不在位图中,在就是交集,不在就不是交集。

(2)用两个位图(1GB)

依次读取第一个文件中的所有整数,将其映射到位图1。依次读取另一个文件中的所有整数,将其映射到位图2。将位图1和位图2进行与操作,结果存储在位图1中,此时位图1当中映射的整数就是两个文件的交集。

3、位图应用变形:1个文件有100亿个int,1G内存,设计算法找到出现次数不超过2次的所有整数

这个与第一道题目大差不差,我们直接进行更改一下就可以进行书写了:

#include<iostream>
#include<vector>
#include<assert.h>
#include<bitset>
using namespace std;int main()
{// 此处应该从文件中读取100亿个整数vector<int> v{ 12, 8, 13, 2, 8, 1, 2, 3, 3, 12, 43, 77 };// 堆上申请空间// 申请两个位图bitset<4294967295>* bs1 = new bitset<4294967295>;bitset<4294967295>* bs2 = new bitset<4294967295>;for (auto e : v){if (!bs1->test(e) && !bs2->test(e)) // 00->01{bs2->set(e);}else if (!bs1->test(e) && bs2->test(e)) // 01->10{bs1->set(e);bs2->reset(e);}else if (bs1->test(e) && !bs2->test(e)) // 10->10{// 不做任何处理}else{assert(false);}}for (size_t i = 0; i < 4294967295; i++){// 打印01和10if ((!bs1->test(i) && bs2->test(i)) || ((bs1->test(i) && !(bs2->test(i))))){cout << i << " ";}}cout << endl;return 0;
}

二、哈希切割

给一个超过100G大小的log file, log中存着IP地址, 设计算法找到出现次数最多的IP地址?与上题条件相同,如何找到top K的IP?如何直接用Linux系统命令实现?

1、我们将这个log file叫做A文件,由于A文件的大小超过100G,这里可以考虑将A文件切分成200个小文件。
2、在切分时选择一个哈希函数进行哈希切分,通过哈希函数将A文件中的每个IP地址转换成一个整型 i(0 ≤ i ≤ 199),然后将这个IP地址写入到小文件Ai当中。
3、由于哈希切分时使用的是同一个哈希函数,因此相同的IP地址计算出的 i i值是相同的,最终这些相同的IP地址就会进入到同一个Ai小文件当中。

在这里插入图片描述

经过哈希切分后得到的这些小文件,理论上就能够加载到内存当中了,如果个别小文件仍然太大那可以对其再进行一次哈希切分,总之让最后切分出来的小文件能够加载到内存。

我们用sort log_file | uniq -c | sort -nrk1,1 | head -K命令选取出现次数top K的IP地址。

在这里插入图片描述

利用sort进行排序。
在这里插入图片描述

利用uniq统计出现次数。
在这里插入图片描述

-nrk1进行反向排序。
在这里插入图片描述
前两个。
在这里插入图片描述

三、布隆过滤器

1、给两个文件,分别有100亿个query,我们只有1G内存,如何找到两个文件交集?分别给出精确算法和近似算法

先读取其中一个文件当中的query,将其全部映射到一个布隆过滤器当中。然后读取另一个文件当中的query,依次判断每个query是否在布隆过滤器当中,如果在则是交集,不在则不是交集。

2、如何扩展BloomFilter使得它支持删除元素的操作

布隆过滤器不能直接支持删除工作,因为在删除一个元素时,可能会影响其他元素。
在这里插入图片描述
如上图,如果我们删除“李四”这个数据的话,那么三个1都要置0,则导致张三有俩置0了!那张三的数据岂不是很奇怪?

一种支持删除的方法:将布隆过滤器中的每个比特位扩展成一个小的计数器,插入元素时给k个计数器(k个哈希函数计算出的哈希地址)加一,删除元素时,给k个计数器减一,通过多占用几倍存储空间的代价来增加删除操作。

http://www.yayakq.cn/news/391635/

相关文章:

  • php网站开发实例教程第七章Wordpress加入php源码
  • 重庆触摸屏_电子商务网站建设搜索引擎广告是什么
  • 建设安全员协会网站深圳营销型网站建设哪家好
  • 北京哪里做网站选择网站建设公司应该注意什么
  • cms建站程序深圳建站公司
  • 对酒店网站建设的意见高端网站建设公司名字
  • 寻找常州微信网站建设做+淘宝客最大的网站是叫什么
  • 青岛外贸网站运营哪家好微信小程序开发要多少钱
  • 做网站推广的企业昆明网站定制开发
  • 网站设计机构培训信阳百度推广公司
  • dw个人网站制作教程九江专业制作网站小程序
  • 济宁网站建设专家百度流量统计
  • 包头外贸网站建设t型布局网站的优缺点
  • 江苏省建设工程网站营销型网站能解决什么问题
  • 海南做公司网站蒙古文网站建设汇报
  • 门户网站建设创新软文营销平台
  • 做视频网站视频加载过慢wordpress登陆404
  • 网站开发工具 枫子科技wordpress标签栏
  • 基于wed的网站开发自己做网站什么网站比较好
  • 青海省建设网站企业导视设计师
  • 粮食网站建设的背景及意义wordpress 熊掌号api
  • 大淘客怎样做网站成都设计院排行
  • 杭州蒙特网站建设今天的新闻联播直播
  • 最早做美食团购的网站网页设计如何制作背景
  • 做经营网站怎么赚钱滨海新区做网站电话
  • c 语言可以做网站吗it学校培训机构
  • 长春网站建设有什么办公室装修计入什么会计科目
  • 石家庄住房建设局网站用织梦建手机网站
  • 企业门户网站开发如何做切片网站
  • php mysql网站开发全程实例.pdf公司如何申请一个网站