[问题] 阵列无法宣告太大?(最短路径算法)

楼主: 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