如何在1TB文件中找到重復(fù)的兩行數(shù)據(jù)

前言

之前在網(wǎng)上看過一個(gè)很有意思的問題膏执?

在單機(jī)且內(nèi)存不能放下全部足量的數(shù)據(jù)的情況下磨总,如何在1T的文件中喘批,找到重復(fù)的兩行皮壁?

看完這個(gè)問題椭更,不妨我們來思考一下如何實(shí)現(xiàn)...

一.解決方案

首先實(shí)現(xiàn)這個(gè)問題我們的第一想到的最笨的解決方案就是對(duì)每一行都與文件中后面所有的行進(jìn)行比較,這種方式的時(shí)間復(fù)雜度很高為O(n^2)...

那么有沒有更好的解決方案呢...

這個(gè)時(shí)候我們還有一種思路就是將數(shù)據(jù)放到HashSet中蛾魄,運(yùn)用Hash表不能加入重復(fù)的Key的特征來實(shí)現(xiàn)需求虑瀑,可是我們題目的條件是內(nèi)存不能放下全部足量的數(shù)據(jù)..因此這個(gè)方案不可行。

但是我們可以借鑒哈希表的思想滴须,哈希表是將數(shù)據(jù)根據(jù)HashCode經(jīng)過算法算出對(duì)應(yīng)的Hash值缴川,然后根據(jù)Hash值找到數(shù)組下標(biāo),然后將數(shù)據(jù)存放到對(duì)應(yīng)下標(biāo)的位置描馅,然后如果有哈希沖突把夸,一般采用拉鏈法來解決..看到這里我們是否也能運(yùn)用哈希表的原理來實(shí)現(xiàn)上述需求呢?下面我們來推演一下..

首先我們可以讀取文件的每一行铭污,然后根據(jù)每一行來模仿哈希表算出它的HashCode恋日。拿到了HashCode,我們應(yīng)該干啥呢嘹狞?
哈希表中的數(shù)組岂膳,它主要是用來存儲(chǔ)相同HashCode值的地方,那我們可以類似的將相同HashCode的行存儲(chǔ)到相同的一個(gè)文件中磅网,于是我們可以根據(jù)HashCode對(duì)1000取模谈截,也就是將文件根據(jù)HashCode值分為1000份,那么每份的大小大約就是1GB的大小,這下內(nèi)存可以放的下了吧簸喂,然后我們就可以利用我們之前想到的HashSet毙死,來判斷是不是重復(fù)行了。

上述的這種思想其實(shí)就是一種分治的思想喻鳄,將文件根據(jù)某個(gè)規(guī)則切分成多分扼倘,對(duì)每一份進(jìn)行處理,最終完成需求除呵。

二.思考

1.這個(gè)過程的實(shí)現(xiàn)復(fù)雜度是多少呢再菊?
首先對(duì)每一行進(jìn)行遍歷,時(shí)間復(fù)雜度為O(n)颜曾,然后根據(jù)每個(gè)拆分后的小文件纠拔,運(yùn)用HashSet來判斷重復(fù)行,1000個(gè)小文件泛豪,每個(gè)小文件處理的最壞情況绿语,復(fù)雜度為O(n),所有總的時(shí)間復(fù)雜度為O(n+1000*n)=O(n)候址,這種方式比上述的最笨的方式O(n^2)來說吕粹,是不是快的多呢...

2.磁盤IO會(huì)耗費(fèi)多少時(shí)間
然后我們可以算一下這個(gè)過程會(huì)磁盤IO會(huì)耗費(fèi)多少時(shí)間,首先I/O操作從文件中讀取1TB的數(shù)據(jù)按照1分鐘1GB的傳輸速度岗仑,差不多要100分鐘匹耕,然后對(duì)每個(gè)小文件進(jìn)行查重,最壞情況下差不多要100分鐘荠雕。因此這個(gè)過程對(duì)應(yīng)于單價(jià)來說稳其,耗時(shí)3個(gè)小時(shí)20分鐘。

后續(xù)如果有更好的解決方案炸卑,我會(huì)隨時(shí)更新這篇文章既鞠,歡迎大家關(guān)注!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末盖文,一起剝皮案震驚了整個(gè)濱河市嘱蛋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌五续,老刑警劉巖洒敏,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異疙驾,居然都是意外死亡凶伙,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門它碎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來函荣,“玉大人显押,你說我怎么就攤上這事∩倒遥” “怎么了乘碑?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)踊谋。 經(jīng)常有香客問我蝉仇,道長(zhǎng)旋讹,這世上最難降的妖魔是什么殖蚕? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮沉迹,結(jié)果婚禮上睦疫,老公的妹妹穿的比我還像新娘。我一直安慰自己鞭呕,他們只是感情好蛤育,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著葫松,像睡著了一般瓦糕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上腋么,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天咕娄,我揣著相機(jī)與錄音,去河邊找鬼珊擂。 笑死圣勒,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的摧扇。 我是一名探鬼主播圣贸,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼扛稽!你這毒婦竟也來了吁峻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤在张,失蹤者是張志新(化名)和其女友劉穎锡搜,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瞧掺,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡耕餐,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了辟狈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肠缔。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡夏跷,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出明未,到底是詐尸還是另有隱情槽华,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布趟妥,位于F島的核電站猫态,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏披摄。R本人自食惡果不足惜亲雪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望疚膊。 院中可真熱鬧义辕,春花似錦、人聲如沸寓盗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)傀蚌。三九已至基显,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間善炫,已是汗流浹背撩幽。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留销部,地道東北人摸航。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像舅桩,于是被迫代替她去往敵國(guó)和親酱虎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Java8張圖 11擂涛、字符串不變性 12读串、equals()方法、hashCode()方法的區(qū)別 13撒妈、...
    Miley_MOJIE閱讀 3,696評(píng)論 0 11
  • 一些概念 數(shù)據(jù)結(jié)構(gòu)就是研究數(shù)據(jù)的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)以及它們之間相互關(guān)系恢暖,并對(duì)這種結(jié)構(gòu)定義相應(yīng)的運(yùn)算,而且確保經(jīng)過這...
    Winterfell_Z閱讀 5,690評(píng)論 0 13
  • --- layout: post title: "如果有人問你關(guān)系型數(shù)據(jù)庫(kù)的原理狰右,叫他看這篇文章(轉(zhuǎn))" date...
    藍(lán)墜星閱讀 780評(píng)論 0 3
  • 目錄 |《如果再不能相愛》上一章 |《如果再不能相愛》第3章 信 楊華與關(guān)思樂看到他腦門上的紗布杰捂,吃了一驚,趕忙迎...
    郭懷瑜閱讀 234評(píng)論 0 3
  • “西巴棋蚌,西巴嫁佳,西巴挨队。”潘多拉抱著朧月一路狂奔嘴里念念叨叨地大喊大叫蒿往,透露著慌亂盛垦。 沒有人會(huì)想到一個(gè)小孩能從一公里外...
    小潘貓閱讀 399評(píng)論 0 3