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

时间:2012-05-24 16:08:32

标签: java web-services

所以我需要创建一个与我的Android通信的Web服务 应用。在我的Android应用程序中,客户端选择两点开始和 到达这两点将发送到我的网站服务找到公交车 它们之间的路径最短。我的网络有问题 服务方。

我尝试使用Dijkstra的算法来找到它们之间的最短路径 两点。为了测试Dijkstra算法,我必须从a中提取数据 MySQL数据库并没有把它放到我的算法中。我不知道 我怎么能这样做呢。

在我的数据库中,我有两个包含总线路由(总线号)的表, 代码(站号),pt_arret(站名)。还有另一张桌子 包含位置代码(id station),纬度和经度,以及 距离(车站与车站之间的距离) 之前。

1 个答案:

答案 0 :(得分:0)

你必须创建一个允许你使用Dijkstra算法的结构。为此,您必须从数据库中读取所有相关数据。从关系数据到面向对象的过渡总是很尴尬。

理想情况下,您希望每个表使用一个简单的SQL选择来获取数据。优化很棘手。单个select语句可以抓取一百万行,几乎可以抓住一行;一个选择将获得一百万行比10选择将获得10行(根据我的经验)。但是,如果数据库连接速度很慢(带宽很窄),那么抓取太多不需要的行可能需要太长时间。

使用地图(TreeMap或HashMap)跟踪您所读取的内容,以便找到已经读取并放置在结构中的“工作站”对象并添加连接。

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

留意你的记忆和时间。您有可能对用户运行速度太慢或内存不足。你需要注意性能(这些日子似乎不是常见的需求)。我已经提出了一些建议,但我真的不知道你的硬件和数据会发生什么。 (例如,读取数据库可能不像我怀疑的那么慢。)

希望这会有所帮助。如果你之前没有做过这样的事情,你就会有很多工作和学习。我参与了一个像这样的主要计划(但它也写了到数据库),我觉得我一直游到上游。

<强>增加:

您在内存中想要的是一组工作站(工作站类对象)和路径(路由类对象)。每个站都将拥有描述一个站(包括位置)所需的所有数据。至关重要的是,它还需要一个ID。站点应使用ID作为键进入TreeMap。 (这是我的偏见,很多人会使用HashMap。)

每条路线都会引用它所链接的两个站点,距离或旅行时间以及任何其他所需信息。

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

现在,对于每个车站,您可以发现离开它的所有路线,然后通过一次公共汽车旅行找到您可以到达的所有车站。从这些站点,您可以通过您的网络继续工作。如果你想这样想的话,这个结构确实是一个“稀疏数组”。

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