[问题] 大型阵列应用

楼主: hao1130 (蚊香蝌蚪就决定是U)   2015-04-30 23:30:26
开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
VS2012
问题(Question):
大型阵列应用
附上程式:
http://ideone.com/h6Vsjt
一开始产生拉丁方阵,都会先用malloc,先产生一个二为阵列出来
再把值给套进去,小数量是可以执行的,可是超过10000*10000 内存就会爆掉
假设阵列
1 1 1 1 1 ..
1 2 2 1 1 ..
1 1 1 2 2 ..
.
.
.
之后小鲁想到用一维阵列 之后 在free
row的值可以应用到
可是column的数值不知道如何取
跪求版上神人 为小鲁解答
作者: LPH66 (-6.2598534e+18f)   2015-05-01 00:44:00
你输入 size = 10000, 往上会取到 n = 16384size * n 的 int 阵列会吃掉 625M, 这用的有一点凶用一维直接写不是不行, 你要思考你的计算顺序跟打印顺序说不定不止可以拿掉一维
作者: Killercat (杀人猫™)   2015-05-01 00:53:00
如果不见得每个column都会需要 那可以考虑lazy eval以及proxy class来避免真的new出那么多不必要的空洞另外int其实以大阵列来讲 实在也是太巨大了点在ia64里面 int基本上跟long是一样长的 请改用short甚至char(bool就免了 没啥帮助的)真的在不行 就自己实作一个DAO来自己土炮存取方式几乎所有的big number lib都是这样做的
作者: EdisonX (卡卡兽)   2015-05-01 12:52:00
你的方阵里存的不是 1 就是 2 两种状态 , 所以其实可以用bitwise 方式做法 , 甚至它跑出来的结果都是呈现区块状,要设计特殊的资料结构去省空间应该是有机会的。不过... 怎么这拉丁方阵和我在 wiki 查的不一样 @@算了一下 , 这实验数值 100,000 应该是之前有人算过的用 vector< bitset<100000> > 大小约 1.53~1.55 G 左右在 32bits OS 下应是刚好用 .

Links booklink

Contact Us: admin [ a t ] ucptt.com