海量數據處理問題詳解

1.從a,b兩個文件各存放50億個url(每個url大小為64B),如何在內存為4G中查找a,b中相同的url

計算各文件存放大小:50億*64B 大約為320G,而內存只有4G,顯然存放不下,此時我們可以通過分治思想來解決該問題

通過hash存放,先將a中各url通過hash(url)%1000,可以得到0-999之間某個數,此時將其存放到對應序號文件中,大約每個文件大小為300MB,再將b文件各url同理操作,我們可以明顯得知,a和b中相同的url一定是在一個序號文件中,這樣就可以通過將a,b相同序號文件放入內存中查找,利于HashSet來比對,找到相同的就取出存放在一個相同文件中,不斷比對就得出結果

2.給你一個大小為1G的文件,里面存放的都是大小為16B的單詞,現在我們可用的內存為1MB,請問我想要找到出現次數最多的前100個單詞,如何解決?

該題和上面那題思路大體一樣,還是分治思想:

我們通過hash(word)% 2000,即拆分為每個文件大小為500KB的小文件,然后再各小文件中利用map計算出現頻次最高的前100個單詞,接下來就是遍歷所有小文件,查找前100個出現次數最多的單詞,即Top-K問題:建立小堆,遍歷查找

Tok-K思想如下博客:

Top-K問題-CSDN博客

3.如何在2億個數中查找出現次數為1的數,內存不足以一次讀取該文件全部內容

1.分治思想:

和前面類似,我們還是利用hash映射拆分為一定量個小文件,然后將小文件利用hashmap進行統計,最終在內存中找到只出現一次的詞

2.位圖思想:

我們知道一個字節8bit,那么我們可以利用bit位記錄某個數是否出現,例如00000000,這8位我們可以記錄1-8出現與否,現在我們要查找出現次數為1的整數,那么一個數利用兩位記錄,例如:00-未出現 01出現次數為1,10出現次數>1,這樣我們就可以找到出現次數為1的數了

4.現在我有1000瓶藥劑,其中只有一瓶毒藥,其余999瓶都是無害的,現在我給你10只老鼠,請問如何試藥才能確定哪瓶是毒藥?

現在我們將這一千瓶表上序號即1---1000,接下來我們將其轉換為二進制形式,1000---》1111101000,那么第一位老鼠喝2^0次方上為1的藥,第二位老鼠喝2^1的藥,類推到第10位老鼠喝2^9次方的藥,觀察老鼠死亡情況,例如:只有第一老鼠喝第五位老鼠死亡,那么17號瓶子是毒藥,這樣就可以確定毒藥情況了(思維題)

總結:

面對海量數據處理時:

我們可以先考慮是否能夠通過分治思想來解決,然后再思考HashMap和HashSet,也可以利用位圖思想,最后在思考是不是可以利用堆來解決(Top-K問題)

希望大家都能夠處理這方面問題,加油!!!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/92405.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/92405.shtml
英文地址,請注明出處:http://en.pswp.cn/web/92405.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AI 記憶管理系統:工程實現設計方案

本文檔為《從“健忘”到“懂我”:構建新一代AI記憶系統》中所述理念的詳細工程實現方案。它將聚焦于技術選型、模塊設計、數據流轉和核心算法,為開發團隊提供清晰的落地指引。 1. 系統架構與技術選型 為實現分層記憶與讀寫分離的設計理念,我們…

Linux驅動學習day26天(RS485)

一、原理通過芯片將232信號轉換成485信號,485表示0和1的方法:Va - Vb 的電壓差在2~6V時表示1,Va - Vb 的電壓差在-2~-6V時表示0。這樣傳輸不容易受到干擾,并且傳輸距離長。我們需要做的事情就是發送:使能DE(driver ena…

從零構建TransformerP1-了解設計

歡迎來到啾啾的博客🐱。 記錄學習點滴。分享工作思考和實用技巧,偶爾也分享一些雜談💬。 有很多很多不足的地方,歡迎評論交流,感謝您的閱讀和評論😄。 目錄引言1 概念回顧1.1 序列任務1.1.1 將序列變成模型…

JVM 終止機制詳解:用戶線程與守護線程

用戶線程未執行完是否會阻止 JVM 終止?答案是:取決于線程類型。讓我詳細解釋: 核心規則 #mermaid-svg-bg5xpyMAeRWNGGk2 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-bg5xpyMAe…

Linux Vim 常用快捷鍵

Vim中最常用的快捷鍵,熟練掌握它們可以大大提高編輯效率。移動光標h- 左移j- 下移k- 上移l- 右移w- 移動到下一個單詞開頭b- 移動到上一個單詞開頭e- 移動到單詞末尾0- 移動到行首$- 移動到行尾gg- 移動到文件開頭G- 移動到文件末尾:n- 跳轉到第n行插入模式i- 在光標…

【Bellman負環】Cycle Finding

題目翻譯給定一個有向圖,你的任務是判斷它是否包含負環,并給出這樣一個環的示例。輸入 第一行輸入兩個整數 n 和 m:分別表示節點數和邊數。節點編號為 1, 2, ..., n。 接下來 m 行描述邊,每行有三個整數 a, b, c:表示存…

數據結構(六):樹與二叉樹

一、樹的基本概念樹的定義樹(Tree)是由 n(n ≥ 0)個節點組成的有限集合,當 n 0 時稱為空樹。非空樹中:有且僅有一個根節點(Root);其余節點可以劃分為若干個互不相交的子…

《Linux運維總結:Shell 腳本日志輸出工具》

總結:整理不易,如果對你有幫助,可否點贊關注一下? 更多詳細內容請參考:Linux運維實戰總結 一、Shell 腳本日志輸出工具 1、提供的 logger() 函數是一個非常實用的 Shell 腳本日志輸出工具,它支持帶時間戳和…

select ... for update阻塞

總結阻塞規則:當前事務持有的鎖 (來自 SELECT ... FOR UPDATE)其他事務嘗試的操作是否會被阻塞?原因排他鎖 (X Lock) 在行 R 上SELECT ... FROM ... (普通查詢)否讀快照 (MVCC),不需要鎖排他鎖 (X Lock) 在行 R 上SELECT ... FROM ... FOR UP…

LangChain4j終極指南:Spring Boot構建企業級Agent框架

LangChain4j Spring Boot 構建企業級 Agent 框架深度指南(3000字終極版)一、架構設計:面向未來的企業級智能體系統1.1 分層架構設計1.2 核心組件職責1.3 企業級特性設計二、核心模塊深度實現2.1 智能體協作引擎(LangGraph4j高級應…

前端基礎之《Vue(29)—Vue3 路由V4》

一、安裝1、命令cnpm install vue-router42、配置映射為src路徑(1)安裝對應配置cnpm install types/node(2)配置vite.config.tsimport { defineConfig } from vite import vue from vitejs/plugin-vue import * as path from &quo…

9.2 通過DuEDrawingControl把eDrawing嵌入到C#中顯示

本文介紹如何通過DuEDrawingControl控件在C#的WPF中進行3D的顯示。 DuEDrawingControl在實際應用中可以應用于以下場景: 1.CAD文件預覽:在Winform或WPF應用程序中,用戶可以預覽裝配文件、工程圖文件等,方便進行設計和審核。 2.打印管理:控件支持打印文件的管理,用…

《Vuejs設計與實現》第 13 章(異步組件和函數式組件

目錄 13.1 異步組件的問題與解決方法 13.2 異步組件的實現原理 3.2.1 封裝 defineAsyncComponent 函數 13.2.2 超時與 Error 組件 13.2.3 延遲與 Loading 組件 13.2.4 重試機制 13.3 函數式組件 13.4 總結 在第12章,我們深入探討了組件的基本含義和實現方式…

Python的七大框架對比分析

談到“Python 七大框架”時,通常指 Django、Flask、FastAPI、Tornado、Sanic、AIOHTTP 和 Pyramid 這七位“常駐嘉賓”。它們各有氣質,適合的場景也截然不同。1. DjangoDjango 像一輛全副武裝的重型越野:出廠就配好 ORM、后臺管理、權限、緩存…

Redis中String數據結構為什么以長度44為embstr和raw實現的分界線?

? 一道常見Redis面試題。 ? 在Redis的String數據結構中,當字符串的實際長度小于44且包含非整數字符時底層編碼方式為embstr。當超過44時使用raw底層編碼方式。 ? 那么為什么要以字符串的長度44為分界線呢? 信息一 ? 首先要分析embst…

告別人工巡查,校園空調管理邁入智能物聯高效時代

在“雙碳”戰略深入推進和智慧校園建設加速落地的背景下,學校空調的用電管理已經不再是“開與關”的簡單問題,而是涵蓋了能效優化、安全保障、智慧化管理的綜合課題。藍奧聲科技憑借LPIOT低功耗物聯網、ECWAN邊緣協同網絡等優勢技術,打造出面…

Access開發右下角浮窗提醒

Hi,大家好呀!感覺又有很長一段時間沒有給大家更新內容了,最近一直在忙,給大家承諾的框架、視頻教程、直播等等感覺又要跳票了,嘿嘿,但大家還是不要急,莫催我,我會慢慢都更新出來的&a…

AI自進化,GPU性能翻三倍——CUDA-L1開啟自動優化新范式

最近看到一篇讓我挺震撼的文章,來自 DeepReinforce 團隊發布的一個新框架——CUDA-L1。說實話,剛看到標題說“AI 讓 GPU 性能提升 3 倍以上”,我心里是有點懷疑的。畢竟我們搞科研的都知道,這種宣傳語很多時候水分不小。但當我靜下…

深入理解 Java AWT Container:原理、實戰與性能優化

以 Container 為核心梳理 AWT 容器體系與事件模型,提供可運行的純 AWT 示例(含 Panel、Frame、Dialog、ScrollPane 正確用法),并給出常見問題與性能優化建議。 Java AWT, Container, 容器, 布局管理器, 事件驅動, ScrollPane, 性…

redis--黑馬點評--用戶簽到模塊詳解

用戶簽到假如我們使用一張表來存儲用戶簽到信息,其結構應該如下:CREATE TABLE tb_sign (id bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 主鍵,user_id bigint unsigned NOT NULL COMMENT 用戶id,year year NOT NULL COMMENT 簽到的年,month tinyin…