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

看板C_and_CPP (C/C++)作者 (Big Brain)時間11年前 (2014/07/18 02:24), 11年前編輯推噓4(4025)
留言29則, 4人參與, 最新討論串1/1
開發平台(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 :) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.244.174.99 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1405621456.A.1E0.html ※ 編輯: blu1121 (60.244.174.99), 07/18/2014 03:01:16

07/18 03:08, , 1F
block相加指的是 for(i=0;i<16;++i) c[i] = a[i]+b[i] 嗎?
07/18 03:08, 1F

07/18 03:09, , 2F
然後陣列 A 的那 7 個紅底block相加後,都是放一樣的值??
07/18 03:09, 2F

07/18 03:11, , 3F
另外 B 內的元素是否已知範圍(最大、最小值) ??
07/18 03:11, 3F

07/18 03:19, , 4F
最後能否方便把你之前的4層回圈概述?免得 op...
07/18 03:19, 4F

07/18 08:49, , 5F
你的文字說 4x4 blocks,圖形畫成 5x5,然後又是 192x192
07/18 08:49, 5F

07/18 08:49, , 6F
加總後的值累加到sum[]裡 http://codepad.org/IHNx1hL2
07/18 08:49, 6F

07/18 08:53, , 7F
by 的迴圈包 bx 可能會比較快,不過不影響結果...
07/18 08:53, 7F

07/18 08:54, , 8F
B 圖的 1 又對應到 A 圖的紅色部份,若 B 為 nxn,則 A 不
07/18 08:54, 8F

07/18 08:55, , 9F
是為 (nxn)x(nxn),實在看不懂?
07/18 08:55, 9F
※ 編輯: blu1121 (60.244.174.99), 07/18/2014 14:14:44

07/18 14:15, , 10F
圖已修正,謝謝提醒:)
07/18 14:15, 10F

07/18 16:05, , 11F
若 B 為nxn,且 B 的 1 為隨機產生,假設介於 [1,k] 之間
07/18 16:05, 11F

07/18 16:07, , 12F
若數字平均出現,則 1 出現次數為 n*n/k ,每個 1 對應
07/18 16:07, 12F

07/18 16:08, , 13F
一個 A 矩陣內的一個 nxn 小矩陣,複雜度為 n^4/k ,這要
07/18 16:08, 13F

07/18 16:09, , 14F
四個迴圈。
07/18 16:09, 14F

07/18 16:14, , 15F
但你的 B 為 192x192 ,A 不就是要 (192x192)x(192x192)
07/18 16:14, 15F

07/18 16:16, , 16F
怎會是 768x768,我想可能你寫錯了或我還沒清楚你的問題。
07/18 16:16, 16F

07/18 17:10, , 17F
B是將A每16個為一組(=4x4),每組不重複,768/4=192
07/18 17:10, 17F

07/18 17:13, , 18F
B的內容是隨機,簡單化就是兩個for(i=0;i<192;i++)來隨機
07/18 17:13, 18F

07/18 18:29, , 19F
linotwo大,你的code相加後變成一個數,存在sum[],可能
07/18 18:29, 19F

07/18 18:29, , 20F
我沒說清楚,應該是block後相加後還是block
07/18 18:29, 20F

07/18 22:21, , 21F
你可以把 sum 弄成 sum[10][4][4], 過程改不了多少.
07/18 22:21, 21F

07/19 01:42, , 22F
你可以把 Block 包裝起來 http://codepad.org/v7lqpKTP
07/19 01:42, 22F

07/19 01:45, , 23F
Block 如何相加也可以自己定義,這樣就不須要向人說清楚
07/19 01:45, 23F

07/19 02:14, , 24F
先謝謝linotwo熱心幫忙
07/19 02:14, 24F

07/19 02:15, , 25F
你的code第24行的&operator +=(const Block &other)
07/19 02:15, 25F

07/19 02:16, , 26F
可以請教它的意義嗎? 第一次看到這種寫法XD
07/19 02:16, 26F

07/19 02:20, , 27F
你可以查 operator overloading
07/19 02:20, 27F

07/19 02:20, , 28F
或是它的意義有什麼keyword好讓我google :)
07/19 02:20, 28F

07/19 02:21, , 29F
ok! 謝謝
07/19 02:21, 29F
文章代碼(AID): #1Jo1JG7W (C_and_CPP)
文章代碼(AID): #1Jo1JG7W (C_and_CPP)