国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【數(shù)據(jù)結(jié)構(gòu)】盤點那些經(jīng)典的 [哈希面試題]【哈希切割】【位圖應用】【布隆過濾器】(10)

這篇具有很好參考價值的文章主要介紹了【數(shù)據(jù)結(jié)構(gòu)】盤點那些經(jīng)典的 [哈希面試題]【哈希切割】【位圖應用】【布隆過濾器】(10)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

大家好吖,歡迎來到 YY 滴 數(shù)據(jù)結(jié)構(gòu) 系列 ,熱烈歡迎! 本章主要內(nèi)容面向接觸過C++的老鐵
主要內(nèi)容含:
【數(shù)據(jù)結(jié)構(gòu)】盤點那些經(jīng)典的 [哈希面試題]【哈希切割】【位圖應用】【布隆過濾器】(10),YY滴 《數(shù)據(jù)結(jié)構(gòu)》,哈希算法,數(shù)據(jù)結(jié)構(gòu),算法

歡迎訂閱 YY滴C++專欄!更多干貨持續(xù)更新!以下是傳送門!文章來源地址http://www.zghlxwxcb.cn/news/detail-764640.html

  • YY的《C++》專欄
  • YY的《C++11》專欄
  • YY的《Linux》專欄
  • YY的《數(shù)據(jù)結(jié)構(gòu)》專欄
  • YY的《C語言基礎》專欄
  • YY的《初學者易錯點》專欄
  • YY的《小小知識點》專欄

一.哈希切割

  • 哈希切分的基本概念: 是將一個大文件,利用哈希的原理, 將其分為若干個小文件。

【1】給一個超過100G大小的log file, log中存著IP地址, 設計算法找到出現(xiàn)次數(shù)最多的IP地址?

  • 根據(jù) 哈希切分的原理:相同的ip一定會進入同一個小文件中,用 map 統(tǒng)計每個小文件中相同ip出現(xiàn)的次數(shù)

二.位圖應用

【1】給定100億個整數(shù),設計算法找到只出現(xiàn)一次的整數(shù)?

  • 分析:我們可以用兩個位圖來控制,我們可以這樣設計
    【數(shù)據(jù)結(jié)構(gòu)】盤點那些經(jīng)典的 [哈希面試題]【哈希切割】【位圖應用】【布隆過濾器】(10),YY滴 《數(shù)據(jù)結(jié)構(gòu)》,哈希算法,數(shù)據(jù)結(jié)構(gòu),算法
  • 代碼展示設計思路如圖所示:
template<size_t N>
	class twobitset
	{
	public:
		void set(size_t x)
		{
			// 00 -> 01
			if (!_bs1.test(x) && !_bs2.test(x))
			{
				_bs2.set(x);
			} // 01 -> 10
			else if (!_bs1.test(x) && _bs2.test(x))
			{
				_bs1.set(x);
				_bs2.reset(x);
			}
			// 本身10代表出現(xiàn)2次及以上,就不變了
		}

		bool is_once(size_t x)
		{
			return !_bs1.test(x) && _bs2.test(x);
		}
	private:
		bitset<N> _bs1;
		bitset<N> _bs2;
	};

【2】位圖應用變形:1個文件有100億個int,1G內(nèi)存,設計算法找到出現(xiàn)次數(shù)不超過2次的所有整數(shù)

  • 此題的設計思路與上面的【1】基本一致,設計上要稍作改動:
    【數(shù)據(jù)結(jié)構(gòu)】盤點那些經(jīng)典的 [哈希面試題]【哈希切割】【位圖應用】【布隆過濾器】(10),YY滴 《數(shù)據(jù)結(jié)構(gòu)》,哈希算法,數(shù)據(jù)結(jié)構(gòu),算法
  • 代碼展示設計思路如圖所示:
template<size_t N>
	class twobitset
	{
	public:
		void set(size_t x)
		{
			// 00 -> 01
			if (!_bs1.test(x) && !_bs2.test(x))
			{
				_bs2.set(x);                        //出現(xiàn)一次
			} // 01 -> 10
			else if (!_bs1.test(x) && _bs2.test(x))
			{
				_bs1.set(x);
				_bs2.reset(x);                    //出現(xiàn)兩次
			}// 10 -> 11
			else if (_bs1.test(x) && !_bs2.test(x))
			{
				_bs2.set(x);                      //出現(xiàn)三次
			}
			// 此外代表出現(xiàn)3次及以上,就不變了
		}

		bool max_two(size_t x)
		{
			return (_bs1.test(x) && !_bs2.test(x))||(!_bs1.test(x) && _bs2.test(x));   //10 或者 01
		}
	private:
		bitset<N> _bs1;
		bitset<N> _bs2;
	};

【3】給兩個文件,分別有100億個整數(shù),我們只有1G內(nèi)存,如何找到兩個文件交集?

  • 分析:
  • 第一種思路是:把其中一個文件存入位圖,遍歷另一個文件元素,將問題轉(zhuǎn)變成"在不在"問題
  • 問題缺陷: 這種問題存在去重問題,即多次重復(下圖中,交集明明只有一個3,但是會出現(xiàn)多個重復的3交集)
    【數(shù)據(jù)結(jié)構(gòu)】盤點那些經(jīng)典的 [哈希面試題]【哈希切割】【位圖應用】【布隆過濾器】(10),YY滴 《數(shù)據(jù)結(jié)構(gòu)》,哈希算法,數(shù)據(jù)結(jié)構(gòu),算法
  • 分析:
  • 第二種思路是:將兩個文件映射到兩個位圖中去(實現(xiàn)去重)
  • 如果相對應的位置都是1(滿足相&為1),則此元素就在交集中

三.布隆過濾器

【1】給兩個文件,分別有100億個query,我們只有1G內(nèi)存,如何找到兩個文件交集?分別給出精確算法和近似算法————(哈希切分)

  • 我們先有一個內(nèi)存大小基本概念:1G約為10億byte,假設一個query平均為30byte,那么100億query就約為3000億byte,約為300G
  • 哈希切分的基本概念: 是將一個大文件,利用哈希的原理, 將其分為若干個小文件。
  • 相同的數(shù)據(jù)都被分到同一個文件里
  • 在此題中,如下圖所示,即:A和B中相同的query就會進入相同的小文件中
    【數(shù)據(jù)結(jié)構(gòu)】盤點那些經(jīng)典的 [哈希面試題]【哈希切割】【位圖應用】【布隆過濾器】(10),YY滴 《數(shù)據(jù)結(jié)構(gòu)》,哈希算法,數(shù)據(jù)結(jié)構(gòu),算法
    【數(shù)據(jù)結(jié)構(gòu)】盤點那些經(jīng)典的 [哈希面試題]【哈希切割】【位圖應用】【布隆過濾器】(10),YY滴 《數(shù)據(jù)結(jié)構(gòu)》,哈希算法,數(shù)據(jù)結(jié)構(gòu),算法

【2】如何擴展BloomFilter使得它支持刪除元素的操作

  • 多個位標識同一個值,使用 引用計數(shù)

到了這里,關于【數(shù)據(jù)結(jié)構(gòu)】盤點那些經(jīng)典的 [哈希面試題]【哈希切割】【位圖應用】【布隆過濾器】(10)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 200個經(jīng)典面試題(算法思想+數(shù)據(jù)結(jié)構(gòu))_1

    1. 爬樓梯 70. Climbing Stairs (Easy) 題目描述:有 N 階樓梯,每次可以上一階或者兩階,求有多少種上樓梯的方法。 定義一個數(shù)組 dp 存儲上樓梯的方法數(shù)(為了方便討論,數(shù)組下標從 1 開始),dp[i] 表示走到第 i 個樓梯的方法數(shù)目。 第 i 個樓梯可以從第 i-1 和 i-2 個樓梯再走一步

    2024年02月13日
    瀏覽(22)
  • 經(jīng)典面試題:玩家進游戲場地分配號碼、判斷括號是否閉合、提取回文串字符的分析和 php 程序?qū)崿F(xiàn) - 經(jīng)典數(shù)據(jù)結(jié)構(gòu)面試

    ? ? 給定一長串字母和符號,里面有三種括號包括([{}])這些,需要判斷這三種括號必須是配對的。即這三類括號要么不出現(xiàn),要出現(xiàn)必須是先出現(xiàn)左邊的括號,然后出現(xiàn)右邊的,中間括號可以嵌套。 ? ? 定義一個字符對應關系數(shù)組,初始化一個數(shù)組棧。所以進入的左邊符號入

    2024年04月25日
    瀏覽(29)
  • 數(shù)據(jù)結(jié)構(gòu)-哈希-哈希表實現(xiàn)

    數(shù)據(jù)結(jié)構(gòu)-哈希-哈希表實現(xiàn)

    ??理想的搜索方法:不經(jīng)過任何的比較,一次直接從表中得到要搜索的元素。如果構(gòu)造一種存儲結(jié)構(gòu),通過某種函數(shù)使元素的存儲位置與其關鍵碼之間能夠建立起一一映射的關系,那么在查找的時候就能通過此函數(shù)快速的找到該元素。 ??向該結(jié)構(gòu)中插入元素:根據(jù)該元素的

    2024年02月10日
    瀏覽(22)
  • 【數(shù)據(jù)結(jié)構(gòu)】哈希底層結(jié)構(gòu)

    【數(shù)據(jù)結(jié)構(gòu)】哈希底層結(jié)構(gòu)

    目錄 一、哈希概念 二、哈希實現(xiàn) 1、閉散列 1.1、線性探測 1.2、二次探測 2、開散列 2.1、開散列的概念 2.2、開散列的結(jié)構(gòu) 2.3、開散列的查找 2.4、開散列的插入 2.5、開散列的刪除 3、性能分析 ?順序結(jié)構(gòu)以及平衡樹中,元素關鍵碼與其存儲位置之間沒有對應的關系,因此在查

    2024年02月06日
    瀏覽(21)
  • 【數(shù)據(jù)結(jié)構(gòu)】哈希表與哈希桶

    【數(shù)據(jù)結(jié)構(gòu)】哈希表與哈希桶

    ?? 樊梓慕: 個人主頁 ??? 個人專欄: 《C語言》 《數(shù)據(jù)結(jié)構(gòu)》 《藍橋杯試題》 《LeetCode刷題筆記》 《實訓項目》 《C++》 《Linux》 《算法》 ?? 每一個不曾起舞的日子,都是對生命的辜負 目錄 前言 1.概念 2.哈希沖突 3.解決哈希沖突 3.1閉散列 3.2開散列(哈希桶) 4.模擬實

    2024年03月21日
    瀏覽(31)
  • 「數(shù)據(jù)結(jié)構(gòu)」哈希表2:實現(xiàn)哈希表

    ?? 個人主頁 :Ice_Sugar_7 ?? 所屬專欄 :Java數(shù)據(jù)結(jié)構(gòu) ?? 歡迎點贊收藏加關注哦! 在講插入之前需要先了解擴容,因為 插入后載荷因子如果超過閾值,那我們就要擴容,即擴容是插入操作的一部分 擴容后,原先哈希表中的元素的哈希地址會改變。之前會發(fā)生哈希沖突的元素

    2024年02月21日
    瀏覽(34)
  • 【數(shù)據(jù)結(jié)構(gòu)】哈希表——閉散列 | 開散列(哈希桶)

    【數(shù)據(jù)結(jié)構(gòu)】哈希表——閉散列 | 開散列(哈希桶)

    ??作者:一只大喵咪1201 ??專欄:《數(shù)據(jù)結(jié)構(gòu)與算法》 ??格言: 你只管努力,剩下的交給時間! 哈希(Hash):是一種方法,將數(shù)據(jù)的key值和存儲位置建立關系。 在之前學習過的順序結(jié)構(gòu)以及平衡樹中,所有數(shù)據(jù)的key值和存儲位置之間都沒有對應的關系。所以在查找一個數(shù)據(jù)

    2023年04月24日
    瀏覽(45)
  • 【數(shù)據(jù)結(jié)構(gòu)】哈希應用

    【數(shù)據(jù)結(jié)構(gòu)】哈希應用

    目錄 一、位圖 1、位圖概念 2、位圖實現(xiàn) 2.1、位圖結(jié)構(gòu) 2.2、比特位置1 2.3、比特位置0 2.4、檢測位圖中比特位 3、位圖例題 3.1、找到只出現(xiàn)一次的整數(shù) 3.2、找到兩個文件交集 3.3、找到出現(xiàn)次數(shù)不超過2次的所有整數(shù) 二、布隆過濾器 1、布隆過濾器提出 2、布隆過濾器概念 3、布

    2024年02月08日
    瀏覽(23)
  • 數(shù)據(jù)結(jié)構(gòu)——哈希

    哈希表 是一種使用哈希函數(shù)組織數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),它支持快速插入和搜索。 哈希表(又稱散列表)的原理為:借助 哈希函數(shù),將鍵映射到存儲桶地址。更確切地說, 1.首先開辟一定長度的,具有連續(xù)物理地址的桶數(shù)組; 2.當我們插入一個新的鍵時,哈希函數(shù)將決定該鍵應該

    2024年02月09日
    瀏覽(19)
  • 數(shù)據(jù)結(jié)構(gòu)——哈希表

    數(shù)據(jù)結(jié)構(gòu)——哈希表

    ????????哈希表(Hash Table),它通過使用一個哈希函數(shù)將鍵 (key) 映射到存儲實際數(shù)據(jù)(鍵值對)的地方來實現(xiàn)對值 (value) 的查找。 這是它的工作原理: 1. 當你想要存儲一個鍵值對時,哈希表首先會使用哈希函數(shù)對鍵進行哈希計算,得到一個哈希值。 鍵值對(Key-Value Pa

    2024年02月13日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包