Java 利用从数据库中提取的数据计算最短路径

Java 利用从数据库中提取的数据计算最短路径,java,web-services,Java,Web Services,因此,我需要创建一个web服务,它将与我的Android进行通信 应用在我的android应用程序中,客户端选择两点开始和结束 到达后,这两点将被发送到我的web服务以查找巴士 在他们之间有最短的路径。我对网络有问题 服务端 我试着用Dijkstra的算法来寻找两条路径之间的最短路径 两点。为了测试Dijkstra算法,我必须从 MySQL数据库,并没有将其正确地放入我的算法中。我不知道 但是我怎么做呢 在我的数据库中,我有两个表,其中包含巴士路线(bus num), 代码(站点id)、pt_a

因此,我需要创建一个web服务,它将与我的Android进行通信 应用在我的android应用程序中,客户端选择两点开始和结束 到达后,这两点将被发送到我的web服务以查找巴士 在他们之间有最短的路径。我对网络有问题 服务端

我试着用Dijkstra的算法来寻找两条路径之间的最短路径 两点。为了测试Dijkstra算法,我必须从 MySQL数据库,并没有将其正确地放入我的算法中。我不知道 但是我怎么做呢

在我的数据库中,我有两个表,其中包含巴士路线(bus num), 代码(站点id)、pt_arret(站点名称)。还有一张桌子 包含位置代码(id站)、纬度和经度以及 距离(是桩号与所选桩号之间的距离)
在前面。

你必须创建一个结构,让你可以使用Dijkstra的算法。要做到这一点,你必须从数据库中读取所有相关数据。从关系数据到面向对象的转换总是很尴尬

理想情况下,您希望对每个表使用一个简单的SQL select来获取数据。优化是很棘手的。一个select语句可以获取一百万行,几乎和它获取一行的速度一样快;一个select语句获取一百万行的速度比10个select语句获取10行的速度快(以我的经验)。但是,如果您的数据库连接速度较慢(带宽较窄),则抓取太多非索引行可能需要太长时间

使用映射(TreeMap或HashMap)跟踪您所读的内容,这样您就可以找到已经读取并放置在结构中的“station”对象,并向它们添加连接

在内存中设置好数据结构后,请尽量长时间保留它,以限制重新读取数据库的延迟

请注意您的内存和计时。对于用户来说,您有运行速度太慢或内存不足的危险。您需要关注性能(这似乎不是现在的常见需求)。我提出了一些建议,但我真的不知道您的硬件和数据会发生什么情况。(例如,读取数据库可能没有我想象的那么慢。)

希望这能有所帮助。如果你以前没有做过类似的事情,那么你还有很多工作和学习要做。我曾参与过这样一个大型项目(但它也写信给DB),我感觉自己一路逆流而上

添加:

内存中需要的是一组站点(站点类对象)和路由(路由类对象)。每个站点都有描述一个站点(包括位置)所需的所有数据。关键是,它还需要一个ID。站点应以ID为键进入树状图。(这是我的predjudice,很多人会使用HashMap。)

每条路线都将参考其连接的两个站点、距离或旅行时间以及任何其他需要的信息

每个站点还将包含一个引用它的路由列表。为了灵活性,我建议使用LinkedList(在这种情况下,ArrayList很容易为未使用的数组元素浪费大量空间)您需要从数据库中读取站点,然后读取路由信息。在读取每个路由信息时,创建路由对象,定位两个站点,将对它们的引用添加到路由,然后将路由添加到两个站点的路由列表中

现在,对于每个车站,你可以找到离开它的所有路线,然后通过一次巴士旅行找到你可以到达的所有车站。从这些车站,你可以通过你的网络继续前进。如果你想这样想,这种结构真的是一个“稀疏阵列”


应用Dijkstra的算法或任何其他算法都非常简单。您需要站点和路由上的各种标志(站点和路由类中的字段)来跟踪哪些节点(站点)和连接(路由)已经用于各种目的。这可能有助于绘制地图(从一个小的开始!)在一张纸上跟踪你的代码在做什么。我的经验是,做这一切只需要很少的代码,但需要大量的仔细思考。

请你花点时间将你的问题格式化、大写和加标点。谢谢。(很抱歉拼写错误,因为我英语说得不太流利)很抱歉,但我想知道:要创建这个ws,我需要什么样的类和函数。??因为这是我的第一个ws,我不知道如何分析这个问题。@olfa:你需要在哪个方面得到帮助?我对web服务和安卓不太了解,无法帮助你。我可以更具体地介绍一下SQL、Java和实现Dijkstra的算法。有人建议我这样做:@olfa:对不起,我不明白你的意思。有人建议我这样做:要使用Dijkstra的算法,你需要准备一个距离矩阵。它是所有站点之间距离的二维数组。首选解决方案是:1.将两个表加载到内存中作为POCO数据对象。2.计算距离矩阵(如果可以的话-创建sparce矩阵以避免大内存使用)。3.调用Dijkstra的算法……那么从mysql(wich类)中提取数据应该在哪里?很抱歉,但我需要帮助:(