我正在开展一个学术项目:编写一个库,用于在大型加权有向图上找到最短路径。
规格如下:
示例数据集是1500个顶点的图,每个节点平均有5.68个边。规格最多可达20.000个节点。
此外,我正在使用cpu / memory绑定环境:Android。
边缘重量不是微不足道的,也不是夸张的。它取决于图的可变状态。
我们必须离线工作。
我面临几个困难:
我需要一种有效的方法来存储,检索和更新图表的数据。我应该将SQLite对象与来自Java类的查询一起使用,堆上的大型自定义Java对象,还是什么?我认为这是性能最关键的方面。
我需要一种有效的方法来实现某种短路径算法。由于所有权重都是正数,我应该使用Dijikstra算法和ArrayList作为访问节点的容器吗?
这是使用NDK的好例子吗?这项任务是CPU密集型的,但它也经常访问内存,所以我不这么认为,但我愿意做出贡献。
永远记住,资源稀缺,ram不足,磁盘速度慢,cpu很宝贵(电池方式)。
任何建议都很好,欢呼:)
答案 0 :(得分:3)
对于这些节点,我建议获取一些云计算服务,并让Android应用程序与之通信
如何在亚马逊的云上使用Hadoop的MapReduce,有许多图形框架,例如Mahout,它真的很快。
如果有更多的节点和边缘,至少可以扩展。
答案 1 :(得分:0)
链表是用于存储大型稀疏图的最佳数据结构。