【海量資料處理】尋找最大/小的k個數
/****************************************************** 尋找k個最小的數 方法:堆排序 ***************************************************/ #include "stdafx.h" #include<iostream> #include<assert.h> using namespace std; void MaxHeapAdjust(int a[],int i,int n)//對節點i進行調整,n是陣列元素個數 { int largest = 0; int left = i*2 + 1;//節點i的左節點 int right = i*2 + 2;//節點i的右節點 if(left< n && a[left]>a[i])//左節點和父節點比較 largest =left; else largest = i; if(right<n && a[right]>a[largest])//如果有右節點,且左小於右 largest = right; if(i != largest)//如果最大節點不是父節點 { swap(a[i],a[largest]); MaxHeapAdjust(a,largest,n);//下降父節點,跟子樹最大堆比,其實經過建立最大堆時,子樹都為最大堆了 } } //建立最大堆 void BuildMaxHeap(int a[],int length) { for(int i = length/2-1;i>=0;i--)//從非葉子節點開始進行最大堆調整 { MaxHeapAdjust(a,i,length); } } int main() { //定義陣列儲存堆元素 int k; cout << "請輸入k:" << endl; cin >> k; int length = 0; int i = 0; int num = 0; int a[100] = {0}; cout << "請輸入前k個數:" << endl; for(;i<k;i++) cin>>a[i]; BuildMaxHeap(a,k); //建堆 cout << "請繼續輸入數字:" << endl; while(cin >>num) //ctrl+z結束 { <span style="white-space:pre"> </span>if(num < a[0]) { a[0] = num; MaxHeapAdjust(a,0,k); } } for(int i = 0;i<k;i++) { cout << a[i]<<" "; } cout << endl; system("pause"); return 0; }
用STL的multiset來實現
typedef multiset<int,greater<int> > iSet;//set中的元素從大到小排列 typedef multiset<int,greater<int> >::iterator setIter; void GetLeastKnum(const vector<int>& data,iSet & iset,int k) { iset.clear(); if(k<1 || data.size()<k) return; //遍歷陣列,不斷更新堆 vector<int>::iterator iter = data.begin(); for(;iter!=ivec.size();iter++) { if(iset.size()<K) iset.insert(*iter); else { iSet siterGreatst = iset.begin(); if(*iter < *siterGreatst) { iSet.erase(siterGreatst); iSet.insert(*iter); } } } }
相關推薦
【海量資料處理】尋找最大/小的k個數
/****************************************************** 尋找k個最小的數 方法:堆排序 ***************************************************/ #in
【程式設計之美】讀書筆記:尋找最大的K個數
問題:查詢大量無序元素中最大的K個數。 解法一:該解法是大部分能想到的,也是第一想到的方法。假設資料量不大,可以先用快速排序或堆排序,他們的平均時間複雜度為O(N*logN),然後取出前K個,時間複雜度為O(K),總的時間複雜度為O(N*logN)+
尋找最大的K個數
log max 數量 如何 size 元素 時間復雜度 對數 進行 前提條件:有N個無序的數,假定它們各不相等,如何選出其中最大的若幹個數 解法一: 適用於元素數量不多,內存中可存儲整個數組序列。通過快速排序或堆排序對數組排序,時間復雜度為O(N*log2N),然後取出
尋找最大的K個數(TOP K演算法)
前言: 問題描述: 有很多個無序的數,怎麼從中選出其中最大的若干數呢? 這個問題中的很多可以是幾個數也可以使成百上億的數,針對此問題我們有以下解法: 解法一: 咱們先簡單的理解,要求一個序列中最小的k個數,按照慣有的思維方式,很簡單,先對這個序列從小到大排序,然後輸出前面
程式設計之美2:尋找最大的K個數
根據樓樓參加筆試或者面試的經驗而言,尋找最大的K個數這個問題,被問到已經不只兩三次了,所以樓樓決定認認真真地把這個問題寫一下,解法思想參照《程式設計之美》一書。 題目簡介 有很多無序的數,我們姑且假定他們各不相等,怎麼選出其中最大的K個數呢? 相關知識點
【資料結構】【面試題】找N個數據中最大的K個數據
如果不限定條件的話,這個問題還是很好解決的,但是當我們要求時間複雜度為O(N),空間複雜度為O(1)時,問題就沒那麼好解決了。 簡單的思路就是,建立一個大小為K=100的小堆,調整好,然後
【洛谷P1018】乘積最大 dp+高精度
題目大意:給定一個 N 個數組成的串,可以在串中插入 M 個乘號,求乘積最大是多少。N <= 40 階段:前 i 個數用了 j 個乘號。 僅用階段可以表示出一個狀態,因此狀態轉移方程為 \(dp[i][j]=max\{dp[k][j-1]*val(k+1,i),k\in[j,i] \}\)。 程式碼
【LeetCode 簡單題】113-最大連續1的個數
宣告: 今天是第113道題。給定一個二進位制陣列, 計算其中最大連續1的個數。以下所有程式碼經過樓主驗證都能在LeetCode上執行成功,程式碼也是借鑑別人的,在文末會附上參考的部落格連結,如果侵犯了博主的相關權益,請聯絡我刪除 (手動比心ღ( ´・ᴗ・` )) 正文 題目:給定一個
【LeetCode 簡單題】111-最大回文數乘積
宣告: 今天是第111道題。找到由兩個 n 位數的乘積組成的最大回文數。由於結果會很大,你只需返回最大回文數 mod 1337得到的結果。以下所有程式碼經過樓主驗證都能在LeetCode上執行成功,程式碼也是借鑑別人的,在文末會附上參考的部落格連結,如果侵犯了博主的相關權益,請聯絡我刪除 (
海量資料處理:十道面試題與十個海量資料處理方法總結(大資料演算法面試題)
第一部分、十道海量資料處理面試題 1、海量日誌資料,提取出某日訪問百度次數最多的那個IP。 首先是這一天,並且是訪問百度的日誌中的IP取出來,逐個寫入到一個大檔案中。注意到IP是32位的,最多有個2^32個IP。同樣可以採用對映的方法
【python資料處理】seaborn
簡化了matplotlib 不存在直方圖 Seaborn是一個Python資料視覺化庫,它提供簡單的程式碼,為統計探索和洞察建立優雅的視覺化。Seaborn基於Matplotlib,但在幾個方面改進了Matplotlib: Seaborn提供更具視覺吸引力的繪圖風格和簡潔的
【python資料處理】pandas多表操作
pandas多表操作 1.Inner Merge 合併dataframe pd.merge()將兩張dataframe合成一張 除了pandas的方法,each DataFrame都有自己的merge()方法 查詢 類似於SELECT WHERE res
【python資料處理】Lists
1.Lists [x,x,x,x] 可以使用.append 或者 + 來連線 heights = [61, 70, 67, 64] list 以逗號間隔 ints_and_strings = [1, 2, 3, 'four', 'five']  
【python資料處理】pandas行列操作及聚合
1.列操作 apply df.coulumn.function() (df.count.mean()這種) 例子: 將Name列全部大寫 from string import upper df['Name'] = df.Name.a
【python資料處理】pandas基礎操作
基礎操作 1.建立表 dataframe 類似於csv 與SQL表 方法1 import codecademylib import pandas as pd df1 = pd.DataFrame({ 'Product ID': [1, 2
【python資料處理】numpy
numpy array與 python list很像 1.第一種建立方式可用np.array方法將list轉化成numpy array import numpy as np test_1=np.array([92, 94, 88, 91, 87]) my_list = [
【python資料處理】jieba分詞
jieba(結巴)是一個強大的分詞庫,完美支援中文分詞 三種分詞模式 import jieba s = u'我想和女朋友一起去北京故宮博物院參觀和閒逛。' cut = jieba.cut(s) #三種模式 print( '【Output】精確模式:') prin
【python資料處理】matplotlib
最近學習python與資料處理時,發現數據總是很生硬,所以我便開始學習python一個強大的庫matplotlib,可以有效將資料轉化為直觀的圖形。 1.一些公共的方法 標籤控制 Modify Ticks 調整橫縱座標值 注意要修改座標名為sting型別時要 先使用plt.su
海量資料處理十個方法大總結
第一部分、十道海量資料處理面試題1、海量日誌資料,提取出某日訪問百度次數最多的那個IP。 首先是這一天,並且是訪問百度的日誌中的IP取出來,逐個寫入到一個大檔案中。注意到IP是32位的,最多有個2^32個IP。同樣可以採用對映的方法,比如模1000,把整個大檔案對映
TOP-K排序演算法,從海量不重複資料中找出最大/小的K個數
如題,TOP-K排序的主要功能是找出一堆不重複資料中的最小或最大的幾個數,此處我們介紹這種型別題目的某種解法: 最大最小堆,最大堆結構裡面的每一個數不都是小於root的值麼?和我們要解決的問題很像。由此,我們可以構造一個堆,並且用它來儲存我們需要找的那幾個數。有這麼一個動態