從N個陣列中找出出現最多的前K個數?

時間 2021-05-08 18:27:20

1樓:

學學課程stream mining:

2樓:陳碩

unordered_map count;

for all id:

count[id]++;

vector > freq;

for item in count:

freq.emplace_back(item.second, item.first);

partial_sort(freq, 10); // or nth_element()

3樓:唐德

從寫程式角度,我想可以用桶排序,既然告訴啦數的範圍為1到2000,那麼可以建立2001個桶,即定義乙個64位陣列_int64 buket[2001],然後將這N*M個數掃瞄一遍,buket[i]記錄數字i出現的次數。掃瞄時間複雜度為O(NM),接下來是求出buket陣列中前k大的數,這些數對應的下標就是所求的前K大的數。求前K大的數可以使用最大堆,建堆O(n),於是用時為O(nK)其中n=2000為buket陣列大小。

總用時O(n*m+2000k),空間複雜度O(n)。本人大二學生一枚,只是發表下個人看法,可能有分析錯誤之處,不知道是不是你想要的的那個意思。

4樓:何勰

這個問題有點熟悉。

沒錯,就是《Hadoop實戰》的詞頻統計,跟著來一遍,簡單粗暴。

當然,這個是統計所有的頻率,如果只要求top-K,可以利用將其分割為若干個集合,

對於每個集合用乙個大小為k的min heap取top-k頻率的數然後將這若干個top數,再取個top-k。

在 JavaScript 中,如何求出兩個陣列的交集和差集?

nbili 給個繞的寫法 let a stewed tomatoes and macaroni let b macaroni and cheese function intersect a,b else if b.includes a 0return a 0 intersect a.slice 1 ...

從1到N中隨機抽取乙個數(N為上限,不被抽取)作為新的上限繼續抽取,直到上限為1。求總抽取次數的期望?

可以直接解通項,先佔一坑。爪機打公式不方便望見諒。題主已經得出了 E n E 1 E 2 E 3 E n 1 n 1 這樣的遞推關係,分母是 n 還是 n 1 不再深究。令 S 為 E 的字首和,即 S n E 1E n 即可得S n S n 1 S n 1 n 1S n S n 1 n 1 n 1...

查詢乙個陣列中字元出現最多頻率的演算法?

因為覺得這種複雜度非常的不科學.所以我Google了一下,然後在stackoverflow上找到了乙個問題.algorithm Find mode of a multiset in given time bound most multiplicity 所以我想你要問的複雜度應該是才對.那個演算法基本...