中易网

麻烦哪位高手帮我写下南充市公交线路最佳算法?

答案:1  悬赏:20  
解决时间 2021-04-27 08:38
  • 提问者网友:斯文败类
  • 2021-04-27 01:44

最佳路径算法1:

将南充市所有的公交线路设为P,记为

其中p(i)表示第i号线路所有公交车站点的名称,记为

其中表示第i 路公交车行使线路上的第j 个站点信息(假设公交车的往返是相同的站点)。因此P 也可以记为

每个站点信息可以有两部分组成,站名和本站编号。

对于任意的起点与终点,可能存在的情况有以下几种:

(1)起点与终点在同一线路上,即i = h,可以直达,不需要换乘。如图1 所示。

(2) 起点与终点 不在同一线路上,即i ≠ h,且存在需要换车一次。如图2 所示。

(3) 起点与终点不在同一线路上,需要换两次车才能到达。如图3 所示。

(4)起点与终点不在同一线路上,通过换车三次和三次以上,乘车不易到达,提示乘客没有最佳路径。换乘三次的情况。如图4 所示。

算法过程也根据以上的分析分为四个层次:

(1)对于情况(1),只要遍历P 中p(i) ,则一定能找到一个就是终点,也就是 在h p 中对应站点,即是 和两条线路上共同经过的一站。p(i)为所求的最佳路径,在实际情况中可以直接看公交车站点站牌就可以判断出 与 是否在同一路公交线路上,若存在其他线路如p(d)等使,则比较各符合要求的线路的p(i)和p(d),因此 选择 与之间的公交车站点数最小,即的值最小的线路为所选择的最佳路径。

(2)对于情况(2),遍历P,只要存在p(i),p(h),使得 ,且p(i) ∩ p(h) ≠φ ,则存在换车站点 ,设 在p(i)中的对应站点为 , 在p(h)中的对应站点为 ,则乘车总站数N 为 。遍历p(i) ∩ p(h)中的每一个 ,n = min{N}为最少乘车站数,那么此时 为最佳换乘站点,最佳路径为其中为换乘站点。

(3)对于情况(3),遍历P,若存在p(i), p(h),使得,且p(i) ∩ p(h) =φ ,遍历p(i) 中所有站点, 若存在换车站点 ,,,则说明 ,为乘车路径中的两个换车站点, i 、e 、h 为乘车线路,同样 , 及i, e, h也存在很多,必须要对所有方案进行优化选择,然后可给出最佳路径,筛选的方法与标准可仿照情况(2)的方法进行。 在p(i)中对应的站点为,在p(e)中对应的站点为 ;在p(e)中对应的站点为 ,在p(h) 中对应的站点为 , 则乘车总站数。得到总乘车站数N 的最小值所对应的 , 两个站点,即为所选的最佳路径的两个换乘站点。给出的最佳路径包括起点所乘公交车的路数,第一次换乘的站点及需要换乘的公交车的路数和第二次换乘的站点及换乘的公交车的路数并给出总乘车站数,即,其中、为两个换乘站点。

(4)对于情况(4),若不存在情况(3)中的 ,站点,则视为不易乘公共汽车到达,即无法找到最佳乘车路径。[1]

最佳路径算法2:

在一个城市中,所有站点是通过公交车所走的线路联结在一起的,线路和站点构成一个连通图,可以将城市的所有公交站点看作是一个连通图上的点。从任一站点出发,经过有限次转车,一定可以到达另一个站点。一般情况下超过一定次数的换乘出行方案基本上没有乘客会选用,视为无意义的方案。经过调查将换乘次数的上限定为三次,即从起点换乘三次到达终点视为无最佳路径。

欲查找从起始站点A 到目的地站点B 的最佳路径,可以从A 点出发,以公交车路线为基础进行广度优先搜索,到B 站点即告终止,找到B 站点时,一定是转车次数最少的。若从站点A 到站点B 的可接受换乘次数最多为两次,则出行的最佳路径还可用如下算法给出:

数据以数组的形式存储,S 为所有站点的集合记作即

为经过 的所有行车路线。每个数据有信息:①路线编号,②路线名称,③此站在此线路上的位序。

查找站到 站的最佳路径的具体步骤如下:

(1)如果∣ i ,( d 在300 米左右),则进行步行分析,如果存在合适步行的路线则建议乘客步行。

否则转(2)。

(2)经过站点 的所有车的集合为PASS − A,经过站点的所有车的集合为PASS − B ,如果PASS − A∩PASS − B≠φ ,则找出此交集,即乘一次车(不用转车)即可到达,如若可以一次到达,则计算出站点, 之间公交站点最少的线路为最佳线路,算法结束。

否则转(3)。

(3)找出PASS − A中车的所有能换乘车次的集合PASS − A',假设经过s(i)站的有1 k 条路线,经过s( j)站的有2 k 条路线,但s(i)∩ s( j) =φ ;从数组中找到如下站点s(l),s(l)行数组元素中有两条线路 和 分别出现在s(i)和s( j) 中,那么s(l)即为可能换乘地点的集合。那么换乘地s(l)到s(i)经过的站数与s(l)到终点s( j) 经过的站数最小的那一站则为最佳换乘地点,由此可确定最佳路径。

否则转到(4)。

(4)找出中PASS − A'车的所有能换乘车次的集合PASS − A′′(集合求法PASS − A′′ 同PASS − A' ),如果PASS − A′′∩PASS − B≠φ ,则找出它们的交集,并按顺序找出这个交集中的车由哪些车转来,即知经两次转车即可到达目的地站点,算法结束。否则无符合条件的方案[2]。

3.3 优化算法

上面算法采用的数组结构在查找某条公交线路上的站点时节省时间,运算简单,但在查找某一站点都有哪些路公交车经过时需要遍历整个数组,此时计算量较大,时间复杂度高,能完成相应的查询工作但不是最优算法。因此在前面算法的基础上对转车的情况进行进一步的优化。

    设南充市所有公交线路为S 条线路,且共有n 个公交车站点,分别建立两个数组

其中p(i)表示第i号线路所有公交车站点的名称,记为

其中 表示第i 路公交车行使线路上的第j 个站点名称(假设公交车的往返是相同的站点)。S 为所有站点的集合记作

为经过的所有行车路线。每个数据有信息:①路线编号,②路线名称,③此站在此线路上的位序。

两个数组相结合,当需要查找s(i)站有哪几条线路经过时,去数组S中遍历S的第i行;当需要查找经过s(i)的线路s[i][ j]时,再通过s[i][ j]的内容去数组P 中遍历相对应的某一行,可快速找到此线路上的所有站点。以上将两种数据结合使用,可用上面的算法快速地找到最佳路径,但相应的是在空间上付出了代价。故具体情况具体分析,决定是提高时间复杂度还是提高空间复杂度。

最佳答案
  • 二级知识专家网友:无字情书
  • 2021-04-27 03:18

高中没学好   心有余而力不足

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息