我期待在性能關鍵代碼中計算熵和互信息很多次。作爲中間步驟,我需要計算每個值的出現次數。例如:最有效的方法來計數事件?
uint[] myArray = [1,1,2,1,4,5,2];
uint[] occurrences = countOccurrences(myArray);
// Occurrences == [3, 2, 1, 1] or some permutation of that.
// 3 occurrences of 1, 2 occurrences of 2, one each of 4 and 5.
。當然,明顯的方式給此要麼使用關聯數組或通過排序使用「標準」的排序算法等快速排序輸入數組做。對於像字節這樣的小整數,代碼目前專門用於使用普通的舊數組。
是否有任何聰明的算法比散列表或「標準」排序算法提供的效率更高效,例如關聯數組實現,該算法非常支持插入更新或排序算法,這些算法在數據存在時發光很多關係?
注意:非稀疏整數只是可能數據類型的一個示例。我期望在這裏實現一個合理的通用解決方案,但由於整數和只包含整數的結構是常見的情況,如果它們非常有效,我會對這些解決方案感興趣。
不能再想起你上面說的。對數組進行排序,然後順序遍歷它。 – 2010-03-05 04:20:49
也許你可以使用某種Hadoop或Map/Reduce來加速你的算法?除此之外,我什麼都看不到。 – kgrad 2010-03-05 04:34:10
@kgrad:我已經完全通過並行化外部循環來充分利用所有內核,因此將此函數的單獨執行並行化沒有意義。 – dsimcha 2010-03-05 04:37:26