1 0

如何实现公交(含地铁、步行)多次换乘的高效查询的思路50

各个地图服务商都提供有公交换乘的查询功能。对于直达类型或者一次换乘的算法,应该比较好实现,直接查询的效率也不慢。
但是如果涉及到多次(10次以内)的算法,再加上最快(地铁一般比公交快)、最少换乘(可能会绕路)、最短(距离计算)等条件综合的话,就非常复杂了。
网上有一些例子,但大多都是直接单表查询,非常影响查询效率。
请问如果要实现3-10次换乘左右的查询,如何做才能尽量的快,而且满足一定的访问压力?请高手从数据结构、算法优化方面给出建议。

问题补充:如果当有1000条甚至5000条以上的线路,允许3-10次换乘,整体支持100-500并发以上,是一个相当大的工程了。
这个问题可能比较复杂了,我应该拆分为几部分:数据结构,算法优化,系统架构等。
2013年4月15日 10:33

4个答案 按时间排序 按投票排序

0 0

引用
需要先把实际的交通抽象成点、线、网

数据模型上都是线,比如某城市共有公交+地铁线路50条(中等),平均每条线路的站点有20(+1)个,那么数据库中线路表中共有 50 x 20 x 2(考虑特例,往返算不同) = 2000条记录。

然后线和线之间用端点相连,需要考虑步行距离,时刻等因素。

最后在这个网络中计算。这里不知我们是否一致?


引用
并且赋予各种权重值

是的。比如查询最短距离时,权重取距离;查询最短时间时,时间是权重;麻烦的换乘。


引用
就是公交或地铁线路的走向

假如按上面的模型,线和线是靠端点(和不同线路)连接起来的。
不需要考虑走向,只凭权重值计算结果即可。
特别是公交和地铁,按我上面的模型,去掉同一线路的往返,共有1000(+1)多个点,1000条线路,能够连接上的就更少了,所以数据量虽然不小,但绝对是可容忍范围。


引用
还有就是效率问题

在我看来,“缓存”是必须的。
特别是公交地铁线路基本上是固定的,那么推测99%的换乘都可以事先计算好的。虽然数据量可能较大,但可以用空间换取非常大的效率。
还可以在计算结果上进行人工调整?用户协作?等等...

不是所有可能的换乘组合,而是换乘方案——几条公交地铁线路组成的一条条更大的“线路”。
这些事先计算好的换乘方案一样可以抽象层“线路”,当用户查询时优先使用这些数据。

在城市施工等原因导致线路发生增删改时,再次重新计算即可。


那么,你还是在做主题是线路查询的东东喽?!祝好运!哈哈!

2013年4月16日 10:20
0 0

这个问题可以当做一个动态规划问题,求一个最优解。

2013年4月15日 16:22
0 0

这个时候,分布式并行计算就派上大用场了

map reduce大显身手的时候

2013年4月15日 12:49
0 0

交通方式通常有步行,公交,地铁,汽车(自驾+出租),火车,飞机,轮船和其他(热气球,滑翔机,航天飞机及人间大炮)等。

首先,这些方式其实都可以抽象概括成“线路”,有如下属性,(除去名称什么无关路径计算的以外)

  1. 起点,终点。物理坐标。
  2. 实际距离。
  3. 花费时间。
  4. 花费费用。
  5. 最早及最晚有效时刻。早班,末班车次等。


比如步行和汽车1,2上是一样的,通常都是按市区道路来就是了。但还是有些是步行可汽车不可的羊肠小路;汽车可步行不可——高速高架等;还有单向双向及牌号的区分等。

论哪种方式,数据结构都可以概括成上面的“线路”。
然后剩下的问题就是计算这些线路的组合。

通常的做法是让用户先选择些条件,过滤掉些可能性才好。比如
  • 纯粹的步行和纯粹的汽车要单独计算。且只需计算最短距离就好=最短时间=最少换乘=最少费用。
  • 通常以汽车,地铁,火车,飞机等有固定线路及站点的为主体,步行为辅——最近站点到目的地部分的方式计算。


不然天南海北的是会直接拖垮系统的。(索性都推荐人间大炮好了!哈哈。)


是,除非你在做线路查询这样的系统,不然的话还是直接“使用”已有的服务吧,比如google,百度等。
都已经是云计算时代了,凡事还要亲力亲为的话比较累。

实在要自己实现,可能选择是网上搜些开源免费的包用。毕竟这个不是什么新鲜前卫的课题了。
网上搜“最短路径算法”shortest path algorithm,算法很多。再找自己要的语言。

2013年4月15日 12:05

相关推荐

    教学用得 公交换乘算法 c# 实现多次换乘到达

    为了实现多次换乘,我们需要扩展算法以允许不止一次的换乘。这通常意味着在搜索过程中,除了考虑当前节点到目标节点的直接路径,还需要考虑经过其他节点的间接路径。在Dijkstra算法中,这可以通过检查每个节点的所有...

    公交查询一次换乘算法源码(附效果地址)

    公交查询一次换乘算法是解决城市公共交通路径规划问题的关键技术之一。这个算法旨在为用户提供最便捷、最少换乘次数的公交线路建议,帮助他们在复杂的公交网络中找到最佳出行方案。在给定的标题和描述中,我们可以...

    C++ 地铁换乘程序实现

    C++ 地铁换乘程序实现 主要是提供一种C++实现的地铁换乘程序的实现方法

    公交换乘线路查询

    综上所述,实现“公交换乘线路查询”功能涉及地图API的使用、前端和后端开发、数据处理与展示等多个环节,需要开发者具备跨领域的技术知识和实践经验。在实际开发过程中,还需要不断优化和调整,以提供更高效、准确...

    数据结构期末大作业,地铁路线图查询-使用C++实现广州地铁换乘路线查询,并使用C++的windowsAPI制作了图像化界面

    这是我在数据结构课上的期末大作业,使用C++实现了查找广州地铁换乘路线的程序,同时使用C++内置的windows API,实现了WINDOWS GUI图形界面。 下载仓库文件之后,可以点击exe文件直接运行程序。假如出现运行失败的...

    公交换乘系统 C++实现

    总的来说,"公交换乘系统 C++实现"这个项目涵盖了数据结构、算法、文件操作和用户交互等多个方面的知识,对于提升C++编程能力和解决实际问题的能力大有裨益。在final2这个文件中,可能包含了项目的源代码、数据文件...

    基于QT5实现的上海市地铁换乘指南,数据结构

    该程序利用QT5框架,通过Qt Creator 4.6.2开发环境来构建,旨在为用户提供上海市地铁线路的查询服务,特别是针对换乘信息的需求,以最少换乘站作为优化目标。 首先,我们来了解一下QT5。QT5是QT库的第五个主要版本...

    基于数据库查询的公交换乘

    1、基于数据库查询的公交换乘分析。事先按一定的数据结构设计好 数据库,再设计一个分析模块,分析结果借助GIS 平台或其他技术(如 VML,SVG 等)显示。 2、基于GIS 网络的公交换乘分析。建好公交线路的网络,然后...

    地铁换乘算法

    地铁换乘算法 地铁查询算法的初步实现,仅供学习研究。 ... 查询注意事项: ...2、目前只支持最多一次的换乘查询,多线路查询支持敬请期待。 3、目前还未收集到站点间距离数据,所以暂不支持价格查询。

    基于python实现的公交换成系统源码(求解最短路径+最少换乘问题)带GUI界面.zip

    基于python实现的公交换成系统源码(求解最短路径+最少换乘问题)带GUI界面.zip 基于python实现的公交换成系统源码(求解最短路径+最少换乘问题)带GUI界面.zip 基于python实现的公交换成系统源码(求解最短路径+最少换乘...

    基于python的公交换乘系统源码+示例图片(求解最短路径,最少换乘问题).zip

    【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业...基于python的公交换乘系统源码+示例图片(求解最短路径,最少换乘问题).zip

    subway-transfer-inquiry-system.rar_北京地铁_北京地铁换乘_地铁图_地铁换乘_地铁查询

    北京地铁换乘查询系统查询系统主要包括调⑴用文件初始化地铁线路与图中的顶点函数,⑵初始化图的函数,⑶查看地铁线路详细信息函数,⑷在图中定位起始站与终点站的位置函数,⑸在地铁线路中判定每次经过的站始发为...

    Python公交换乘系统源码.zip

    【Python公交换乘系统源码】是一个基于Python编程语言实现的公共交通换乘查询系统。这个系统旨在帮助用户找到从一个地方到另一个地方的最佳公交换乘路线。以下是对该系统涉及的关键知识点的详细解释: 1. **Python...

    网络游戏-基于公交-地铁双层加权换乘网络下的拥塞感知路由策略.zip

    总结来说,基于公交-地铁双层加权换乘网络的拥塞感知路由策略是一种创新的网络优化方法,它借鉴了现实交通系统的理念,结合网络流量监测和动态路由更新,为解决网络游戏中的网络拥塞问题提供了新的思路。这一策略的...

    使用Qt实现的一个图形化上海地铁换乘系统,支持查询两地铁站之间的最短路径和最少换乘路径,支持自主添加线路、站点等等。.zip

    本文将介绍一个基于Qt框架开发的图形化上海地铁换乘系统,该系统不仅能查询任意两地铁站间的最短路径和最少换乘路径,而且支持用户自主添加线路、站点,具备良好的交互性和实用性。 首先,让我们了解一下Qt框架。Qt...

    关于公交查询 换乘的一些论文

    2. **换乘算法**:换乘算法是公交查询系统的核心技术之一,其目标是找出从起点到终点的最优路径,这可能涉及到最少的换乘次数、最短的行驶时间或最少的步行距离等。常见的算法有Dijkstra算法、A*搜索算法、Floyd-...

    公交换乘的实现

    // 取得出发站点所经的公交车的字符串 // 取得目的地所经的公交车的字符串 // 取得两个站点都存在的站点,即可以直达的公交车 // 解析...取得相交的站点,即可一次换乘到达的站点 // 计算路径信息

    基于迪杰斯特拉和A星算法的北京上海公交地铁换乘系统C++源码.zip

    基于迪杰斯特拉和A星算法的北京上海公交地铁换乘系统C++源码.zip 基于迪杰斯特拉和A星算法的北京上海公交地铁换乘系统C++源码.zip 基于迪杰斯特拉和A星算法的北京上海公交地铁换乘系统C++源码.zip 基于迪杰斯特拉和A...

    公交换乘查询系统

    公交换乘查询系统

    模拟公交查询系统实现换乘查询

    在城市生活中,公交查询系统是市民出行的重要工具,它提供了线路查询、站点查询以及公交换乘查询等功能。本文将深入探讨如何实现一个模拟公交查询系统,以满足日常公共交通信息的需求。 首先,我们要理解公交查询...

Global site tag (gtag.js) - Google Analytics