[問題] 陣列無法宣告太大?(最短路徑演算法)

作者: hfuman   2014-05-22 18:01:19
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
.net C++ 2010
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
no
參考網站:http://www.csie.ntnu.edu.tw/~u91029/Path2.html
問題(Question):
目前嘗試使用最短路徑演算法於程式碼中
但是這演算法有個缺點,就是假設路徑點有300個,就要宣告陣列[300][300]
在路徑點少的case可以正常運作
如今有個case,其中路徑點約有32,000個,所以要宣告陣列[32000][32000]
結果就出現"陣列的總大小不能超過 0x7fffffff 位元組"的錯誤訊息
不知道各位大大有無其他建議,或是哪個演算法轉成程式語言後可以支援到這麼多筆資料??
作者: hfuman   2014-05-22 18:02:00
還是net 2010 可以將陣列開到最大?
作者: chunhsiang (= =)   2014-05-22 18:12:00
用動態產生的看看吧
作者: lsc36 (lsc36)   2014-05-22 18:45:00
如果已知邊的數量不會太多的話改用adjacency list存圖
作者: haoboo (薩伊克斯)   2014-05-22 18:51:00
用new去產生動態陣列
作者: hfuman   2014-05-22 20:39:00
有測試過動態分配了~結果一樣不能~會卡住
作者: AntaresStar   2014-05-22 21:30:00
相鄰矩陣沒辦法算太大的圖 一定得換否則就是要找sparse matrix的函式庫來用
作者: Littlechozy (キミに100%)   2014-05-23 10:07:00
推樓上,存一大堆0非常浪費空間,我是自己寫啦
作者: blackwindy (黑色的風)   2014-05-23 15:51:00
我算了一下大概是1G個元素 還好吧64bit下應該要得到這麼大塊沒問題
作者: brighton16 (Alliz well)   2014-05-23 16:45:00
第一感會想要用adjacency list做,但如果要配合演算法用sparse matrix應該可以更動較少的程式碼完成
作者: ACMANIAC (請肥宅救救肥宅)   2014-05-23 17:12:00
哪個最短路徑演算法一定要用 matrix?
作者: Killercat (殺人貓™)   2014-05-23 17:37:00
0X7fffffff在以前是VC的debug limit 最新版不知道還有沒有這限制,試試看把他改用release build看看另外像這種演算法一定要找出lazy evalution method用mapping的方式 只new需要的node在對應到一張map上一口氣就急吼吼的不管有用沒用先alloc再說 就有這問題另外你是用什麼type去要[x][y]?喔對上面有人提到了 sparse matrix XD
作者: hfuman   2014-05-24 20:46:00
不好意思~我沒甚麼接觸到sparse matrix~我會去了解內容我是取得檔案筆數後~再去用迴圈來動態的new 二維陣列
作者: Killercat (殺人貓™)   2014-05-25 04:44:00
boost有提供sparse matrix,可以用用看
作者: suhorng ( )   2014-05-25 14:39:00
用 adjacent list 呀...對每個點用個 vector<int> 存誰與他相鄰直接用矩陣的話就算是 O(E log V) 的演算法也會變 O(V^2)

Links booklink

Contact Us: admin [ a t ] ucptt.com