[问题] 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