亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

時間序列數據 - 計算兩組的出現次數

時間序列數據 - 計算兩組的出現次數

qq_遁去的一_1 2022-05-21 20:49:02
我有時間序列數據。里面的數據要么是 1 要么是 0(可以是真或假,或任何其他二進制表示)。例如,我有兩個時間序列數據變量:byte[] a1 = new byte[]{1,0,0,1,0};byte[] a2 = new byte[]{1,1,1,0,1};我現在比較這兩個數組來計算組合發生的次數:Map<String,Integer> count = new HashMap<String,Integer>();//all the time series arrays have the same length. In real life each would timeseries array would have a length of about 100for(int i=0; i<ai.length(); i++){    //a1[i] and a[2] occured. If this keys exists incremnt the count by one, otherwise insert the new key    count.merge(a1[i]+":"+a2[i], 1, Integer::sum)}基本上我正在尋找的輸出是a1 = 1多少次a2 = 1和多少次a2 = 0?同樣,什么時候a1 = 0有多少次a2 = 1,有多少次a2 = 0?我面臨的問題是我在我的程序中運行了數十億次這些比較。完成的時間比我想要的要長得多。我知道這需要很長時間才能完成,但想知道是否有任何其他方法可以實現它以更快地計算它(我已經在使用多線程,我正在更多地研究可能的算法、數據結構的變化更改,開源庫等)?
查看完整描述

1 回答

?
梵蒂岡之花

TA貢獻1900條經驗 獲得超5個贊

鑒于您試圖產生大量結果,我建議您尋找微優化和劃分工作的方法。沒有什么奇特的方法可以減少操作,只要讓它們變得高效。

因此,我建議您將字節數組轉換為BitSets. 你的 4 個計數應該通過cardinality()a.and(b)(1,1)、a.andNot(b)(1,0)、a.or(b).flip()(0,0) 和a.flip().and(b)(0,1)。在同步工作方面,您應該分發工作,因為(用該圖進行實驗)塊的所有成對組合例如 20 個陣列和 20 個陣列。足夠大的工作塊是真正的工作。足夠小的一個來描述源并產生相當小的消息。每件工作都應該由一個工人單線程處理。仔細考慮如何存儲最終數據——你的很多工作都將構建該數據結構。不惜一切代價避免的事情是基于散列的數據結構,它會導致您在內存中到處尋找隨機位置。更好地對數據進行排序。

如果可以,請關注緩存一致性。


查看完整回答
反對 回復 2022-05-21
  • 1 回答
  • 0 關注
  • 100 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號