[問題] A陣列由B陣列內容指定加總

作者: blu1121 (Big Brain)   2014-07-18 02:24:13
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC++
問題(Question):
有兩個陣列,如圖http://i.imgur.com/kmGMMVe.png
假設陣列A大小:768x768(陣列內每一個元素是float型態)
陣列B大小:192x192(可以看做是將陣列A劃分4x4為一個block的陣列,所以是192x192
,B內的每個元素是隨機產生)
有什麼比較好的方法,讓陣列A的每一個block以陣列B的內容來決定並加總,
ex: 陣列B的"數字1"共有6個,也就是說陣列A會將這6個紅底的block(對應於陣列B屬於1
的值)相加,相加後還會是一個block。
補充說明(Supplement):
之前有寫過(用4層迴圈),但很沒有效率,所以當陣列A一變大,就會跑得更久
想來這邊詢問看看有沒有更好的idea :)
作者: EdisonX (卡卡獸)   2014-07-18 03:08:00
block相加指的是 for(i=0;i<16;++i) c[i] = a[i]+b[i] 嗎?然後陣列 A 的那 7 個紅底block相加後,都是放一樣的值??另外 B 內的元素是否已知範圍(最大、最小值) ??最後能否方便把你之前的4層回圈概述?免得 op...
作者: pziyout (pziyout)   2014-07-18 08:49:00
你的文字說 4x4 blocks,圖形畫成 5x5,然後又是 192x192
作者: linotwo (._.)   2014-07-18 08:49:00
加總後的值累加到sum[]裡 http://codepad.org/IHNx1hL2by 的迴圈包 bx 可能會比較快,不過不影響結果...
作者: pziyout (pziyout)   2014-07-18 08:54:00
B 圖的 1 又對應到 A 圖的紅色部份,若 B 為 nxn,則 A 不是為 (nxn)x(nxn),實在看不懂?
作者: blu1121 (Big Brain)   2014-07-18 14:15:00
圖已修正,謝謝提醒:)
作者: pziyout (pziyout)   2014-07-18 16:05:00
若 B 為nxn,且 B 的 1 為隨機產生,假設介於 [1,k] 之間若數字平均出現,則 1 出現次數為 n*n/k ,每個 1 對應一個 A 矩陣內的一個 nxn 小矩陣,複雜度為 n^4/k ,這要四個迴圈。但你的 B 為 192x192 ,A 不就是要 (192x192)x(192x192)怎會是 768x768,我想可能你寫錯了或我還沒清楚你的問題。
作者: blu1121 (Big Brain)   2014-07-18 17:10:00
B是將A每16個為一組(=4x4),每組不重複,768/4=192B的內容是隨機,簡單化就是兩個for(i=0;i<192;i++)來隨機linotwo大,你的code相加後變成一個數,存在sum[],可能我沒說清楚,應該是block後相加後還是block
作者: EdisonX (卡卡獸)   2014-07-18 22:21:00
你可以把 sum 弄成 sum[10][4][4], 過程改不了多少.
作者: linotwo (._.)   2014-07-19 01:42:00
你可以把 Block 包裝起來 http://codepad.org/v7lqpKTPBlock 如何相加也可以自己定義,這樣就不須要向人說清楚
作者: blu1121 (Big Brain)   2014-07-19 02:14:00
先謝謝linotwo熱心幫忙你的code第24行的&operator +=(const Block &other)可以請教它的意義嗎? 第一次看到這種寫法XD
作者: linotwo (._.)   2014-07-19 02:20:00
你可以查 operator overloading
作者: blu1121 (Big Brain)   2014-07-19 02:20:00
或是它的意義有什麼keyword好讓我google :)ok! 謝謝

Links booklink

Contact Us: admin [ a t ] ucptt.com