[問題] 大型陣列應用

作者: 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