2011-07-15 54 views
3

想我讀整數流。流中可能會出現多次相同的整數。現在我想保留一個最頻繁出現的N個整數的緩存。緩存按流元素的頻率排序。數據結構來緩存最頻繁的元素

你將如何實現它在Java中?

+0

有趣的部分,這是如何處理這些號碼s不在當前最高N緩存中。是否僅需要在緩存中存儲流中固定數量的不同整數? – Joel

回答

1

爲INT創建一個對象模型,中創建一個Count屬性。創建一個擴展Vector集合的SortedVector集合。每次發生整數時,如果它不存在,則將其添加到向量中。否則,找到它,更新count屬性+ = 1,然後在Vector中調用Collections.sort(this)。

1

你知道號碼的範圍是多少?如果是這樣,那麼使用數組可能是有意義的。例如,如果我知道數字的範圍在0到10之間,那麼我會創建一個大小爲10的數組。該數組中的每個元素都會計算我看過給定數字的次數。然後,你只需要記住最常見的號碼。

例如

array[10]; 
freq_index = -1; 
freq_count = -1; 

readVal(int n){ 
    array[n]+=1; 
    if array[n] > freq_count 
    freq_index = n; 
    freq_count = array[n]; 
} 

當然,如果數字的分佈是稀疏的,這種方法是不好的。

我想嘗試一個優先級隊列。

2
public class MyData implements Comparable<MyData>{ 
    public int frequency = 0; 
    public Integer data; 
    @Override 
    public int compareTo(MyData that) { 
    return this.frequency - that.frequency; 
    } 

} 

有它存儲在PriorityQueue