[問題] 大型陣列應用

看板C_and_CPP (C/C++)作者 (蚊香蝌蚪就決定是U)時間11年前 (2015/04/30 23:30), 11年前編輯推噓3(3015)
留言18則, 3人參與, 最新討論串1/1
開發平台(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的數值不知道如何取 跪求版上神人 為小魯解答 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.162.93.137 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1430407831.A.5B5.html ※ 編輯: hao1130 (1.162.93.137), 05/01/2015 00:24:45

05/01 00:44, , 1F
你輸入 size = 10000, 往上會取到 n = 16384
05/01 00:44, 1F

05/01 00:46, , 2F
size * n 的 int 陣列會吃掉 625M, 這用的有一點凶
05/01 00:46, 2F

05/01 00:47, , 3F
用一維直接寫不是不行, 你要思考你的計算順序跟列印順序
05/01 00:47, 3F

05/01 00:48, , 4F
說不定不止可以拿掉一維
05/01 00:48, 4F
我是實驗需要跑大量模組,輸入值需要到100000,每個ROW計算出一個COST,再經由 COLUMN判斷,目前ROW已經想到怎麼應用,不過COLUMN目前沒有想到要怎應用到QAQ

05/01 00:53, , 5F
如果不見得每個column都會需要 那可以考慮lazy eval
05/01 00:53, 5F

05/01 00:55, , 6F
以及proxy class來避免真的new出那麼多不必要的空洞
05/01 00:55, 6F

05/01 00:56, , 7F
另外int其實以大陣列來講 實在也是太巨大了點
05/01 00:56, 7F

05/01 00:57, , 8F
在ia64裡面 int基本上跟long是一樣長的 請改用short
05/01 00:57, 8F

05/01 00:57, , 9F
甚至char(bool就免了 沒啥幫助的)
05/01 00:57, 9F

05/01 00:58, , 10F
真的在不行 就自己實作一個DAO來自己土炮存取方式
05/01 00:58, 10F

05/01 00:59, , 11F
幾乎所有的big number lib都是這樣做的
05/01 00:59, 11F
※ 編輯: hao1130 (1.162.93.137), 05/01/2015 10:19:51

05/01 12:52, , 12F
你的方陣裡存的不是 1 就是 2 兩種狀態 , 所以其實可以用
05/01 12:52, 12F

05/01 12:53, , 13F
bitwise 方式做法 , 甚至它跑出來的結果都是呈現區塊狀,
05/01 12:53, 13F

05/01 12:53, , 14F
要設計特殊的資料結構去省空間應該是有機會的。
05/01 12:53, 14F

05/01 13:22, , 15F
不過... 怎麼這拉丁方陣和我在 wiki 查的不一樣 @@
05/01 13:22, 15F

05/01 13:39, , 16F
算了一下 , 這實驗數值 100,000 應該是之前有人算過的
05/01 13:39, 16F

05/01 13:40, , 17F
用 vector< bitset<100000> > 大小約 1.53~1.55 G 左右
05/01 13:40, 17F

05/01 13:41, , 18F
在 32bits OS 下應是剛好用 .
05/01 13:41, 18F
文章代碼(AID): #1LGagNMr (C_and_CPP)
文章代碼(AID): #1LGagNMr (C_and_CPP)