利用最小堆找出10億個數中最大的10000個數
最小堆
最小堆是一種完全二叉樹,特點是根節點比兩個子節點都小(或者根節點比子節點都大)
過程
- 先找10000個數構建最小堆
- 依次遍歷10億個數,如果比最小堆的最小值大,則替換這個最小值,並重新構建最小堆
- 最後輸入10000個值
- 時間復雜度
構建最小堆的復雜度為 logn,求出最大m個數會構建m次最小堆,時間復雜度為 m logm, 這裏m為10000
進行n次時間復雜度為n,這裏n為10億,總時間復雜度為 n m logm,即10億 10000 log 10000
其他算法
- 將十億個數排序,找出最大值,但是占用空間比較大,做了很多無用功
- 分治法:將10億個數分成10份,求出每份的前10000個數 ,然後在這個10 * 10000 個數中找出最大的10000個數
- hash去重復,將這10億個數的Hash值進行比較,去除重復的
利用最小堆找出10億個數中最大的10000個數
相關推薦
利用最小堆找出10億個數中最大的10000個數
AS 如果 算法 最小值 分治 但是 空間 找出最大值 根節點 最小堆 最小堆是一種完全二叉樹,特點是根節點比兩個子節點都小(或者根節點比子節點都大) 過程 先找10000個數構建最小堆 依次遍歷10億個數,如果比最小堆的最小值大,則替換這個最小值,並重新構建最小堆 最後
典型的Top K演算法 _找出一個數組裡面前K個最大數_找出1億個浮點數中最大的10000個_一個文字檔案,找出前10個經常出現的詞,但這次檔案比較長,說是上億行或十億行,總之無法一次讀入記憶體.
搜尋引擎會通過日誌檔案把使用者每次檢索使用的所有檢索串都記錄下來,每個查詢串的長度為1-255位元組。 假設目前有一千萬個記錄(這些查詢串的重複度比較高,雖然總數是1千萬,但如果除去重複後,不超過3百萬個。一個查詢串的重複度越高,說明查詢
Excel如何利用條件格式找出數據區域中最大的幾項
如何 -o vpd log 麻煩 浪費 常見問題 alt 區域 要找出某個區域中數值最大的幾項,利用條件格式是最方便的。當excel中有大量的數據的時候,如果要求你找出其中的最大值和最小值,你可能非常的苦惱,如果單個進行查找那是很麻煩的,而且也浪費時間,那怎樣才能快速的找到
javascript 找出數字數組中最大的數
color ont javascrip logs null return asc bsp col 找出數字數組中最大的數 var Match = (function(){ var arr = null; var len = 0;
python小練習-找出字符串中的子字符串
end dex index python lis pytho enume blog new 1 #方法1 2 #找出字符串中以a開頭,以b結尾的所有子串 3 def find_substr(string): 4 result = [] 5 for
找出二維陣列中最大的值
題目: 找出二維陣列中最大的值 #include <stdio.h> int main() { int arr[3][4]={34,34,54,2,5,23,8,3,1,6,25,6},t,i,j; t=arr[0][0]; for(i=0;i<3;i++)
LeetCode:543. Diameter of Binary Tree(找出二叉樹中最大的半徑)
Given a binary tree, you need to compute the length of the diameter of the tree. The diameter of a binary tree is the length of the longest
找出兩個字串中最大的公共子串(java實現)
import java.util.HashSet; import java.util.Set; public class Test { public static void main(String[] args) { String
Java找出兩個字串中最大的子串
[java] view plain copy print?// 找一個字串的最大子串 publicstaticvoid main(String[] args) { String s1 = ”qwerabcdtyuiop”; String s2 = ”xc
找出N個整數中最大的K個數
《尋找N個元素中的前K個最大者》方法總結是在這裡看到的 /algorithm/20111105/314362.html ,我覺得解法二和解法四用得廣泛一些,程式設計實現了一下。 利用快速排序中的partition操作 經過partition後,pivot左邊的序列sa都大於pivot右邊的序列sb;
找出二叉樹中最大的子樹,且子樹為二叉搜尋樹
題目 找出二叉樹中最大的子樹,該子樹為二叉搜尋樹。所謂最大的子樹就是指結點數目最多的子樹。 分析 該題目是要找出二叉樹中最大的子樹,該子樹必須是二叉搜尋樹(BST)。子樹的概念需要重點關注一下,以下面一棵二叉樹為例 ____10____
135、程式設計實現:找出兩個字串中最大公共子字串,如"abccade","dgcadde"的最大子串為 "cad"
35、程式設計實現:找出兩個字串中最大公共子字串,如"abccade","dgcadde"的最大子串為 "cad" /* 35、程式設計實現:找出兩個字串中最大公共子字串,如"abccade","dgcadde"的最大子串為 "cad" 不同於56的最長公共子串 DP題
電子科技大學推免複試題:利用遞迴方法找出一個數組中的最大值和最小值
/**************************** 編寫一個函式,使之能完成以下功能: 利用遞迴方法找出一個數組中的最大值和最小值,要求遞迴呼叫函式的格式如下: MinMaxValue(arr,n,&max,&min),其中arr是給定的陣列,n是陣
C語言,輸入abc三個整數,並從大到小排序輸出和“找出三個數中最大的數”的中間變數的用法的區別
共同點:都是中間變數,都可以重複拿來做中轉站使用 不同點:排序的題目中,中間變數只是做中轉站作兩個變數交換值用來,並不是要用來儲存最終要輸出的值 而找出最大數或者最小數的題目中,中間變數不但做交換用的中轉站,還要儲存程式最終要輸出的值
【面試必備】如何在10億數中找出前1000大的數?
作者:channingbreeze | 微信公眾號:網際網路偵察小史是一個應屆生,雖然學的是電子
使用python找出nginx訪問日誌中訪問次數最多的10個ip排序生成網頁
#encoding=utf-8 # 找到日誌中的top 10,日誌格式如下 #txt = '''100.116.167.9 - - [22/Oct/2017:03:55:53 +0800] "HEAD /check HTTP/1.0" 200 0 "-" "-" "-" ut = 0.001''' #n
go利用最小堆實現優先佇列
實現程式碼 package core import "container/heap" type Item struct { Value interface{} Index
找出字符串中的最長的回文子串
size longest ges solution turn str b+ () ring 1 class Solution { 2 public: 3 string longestPalindrome(string s) { 4 int
STL -最大最小堆 priority_queue
常用函數 cnblogs () mes color pre pac clas 常用 //添加頭文件#include<queue> using namespace std; 最大堆實現: 優先輸出大數據 priority_queue<Type, Cont
最小堆的建立 插入 與刪除
操作 2個 是把 完全二叉樹 bsp 通過 函數 問題 .... 堆是完全二叉樹,完全二叉樹最大的特點就是 把數據儲存在數組裏 通過父子結點的關系來做 不用實際建樹 parent=leftchild/2; leftchild=2*parent 右就加1這兒指的是序號關