邻接矩阵计算最短路径问题的几个发现

航班预定系统下路径查询的几个问题求解
其实这个是大二下学期的SQL课设上面的我需要解决的一个问题.
1.邻接矩阵计算最短路径问题的几个发现
1.1邻接矩阵定义。
只能定义为
 a b c d e...
a
b
c
d
e
.
.
.
这样的形式,其中行代表出发点,列代表目标点;或列代表出发点,行代表目标点。我不妨约定行代表出发点,列代表

目标点此矩阵为A

而不能定义为。
 a b c d e...
a
c
b
d
e
.
.
.
当然也可以定义为这样的形式
  acbde...
a
c
b
d
e
.
.
在矩阵性质中上面的矩阵等于-A
这样的形式。
证明:(反证法)

还是用临接表

原来矩阵定义为

A

  a b c d

a1 1 2 0

b1 1 1 1

c0 1 2 1

d2 0 1 1

A‘

  a b c d

a1010

c0110

b0011

d1001

计算一次的路径数。

A*A

  a  b c d

a1 1 2 0

b1 1 1 1

c0 1 2 1

d2 0 1 1

而A'*A’

  a b c d

a1 0 1 1

c0 1 2 1

b0 1 2 2

d2 0 1 1

也许我的运算的对应的函数错了。但是出现2的次数就不一样。如果重新修订运算无疑将增大复杂度。

定义的两个方法。
路径的最短和最长值
在dijkstra算法最短最长定义为分别为0,+∞。这个计定义为最大值比如32767,2147483648。运算的时候溢出即使是

最大两个数相加溢出。也小于0.可以直接舍弃。
在线性代数书上面为0和0其中表示不可到达。这里修正为。初步的0.0001表示为高阶无穷小也可以根据实际情况调整。

计算的时候0表示不可路由,不计算。(这样每个都需要判断。增加了系统开销)。0.0001可以最后规整的时候舍去。
剩下的路径为长度值。

计算的时候假设原始矩阵为A。
里面任意一点元素aij=min(ai1+a1j,ai2+a2j,....,ain+anj) i表示所在和行,j表示所在的列。
原始计算方法:
An=A(n-1)*A①
优化计算方法:
An=A(n-1)*A(n-1)②
其中时间复杂度方面
①/②=n/log2(n)
关于min函数的实现。直接排序。如果采用dijkstra定义法在排序完成后从数组a里面从a[1]开始向后查找.第一个大于零

的输出就可以了.如果是采用线代书的定义法则输出第一个.

终止条件:
完备性终止
出现An=A(n-1)即终止计算。
非完备性终止:
1对结果有明确了解,出现期望节点即终止。
2对结果期望。出现或者小于期望节点即终止。
3对迭代次数有规定。达到迭代次数即终止。
4有近似解。出现近似解即终止。
5规定最小迭代次数。达到后监控。一旦变化小于预计值则终止。(这个至少是个偏导思想的分析或者线代里面的我无从

下手.)
对于时间限制的计算.
时间的可能这个模型就不成立了.
时间段T内.有航班a1->a2->a3 或者b1->b2->b3 这个要先计算时间.在时间不冲突的情况下再查找路线.否则目前这个收

敛性太强.都是最优解.忽略了局部优解.
对于关键路径的计算.
从武汉飞北京.没有直达飞机.我要去天津办事.那就是武汉-天津-北京.分段计算.
局部解问题
这个没有局部解.任何过程不取最小的都是局部优解.
无向连通图的计算.
由于是无向连通图矩阵是对称矩阵.可以使用对称矩阵变换公式解决.变换过程为沿主对角线对称.类似镜面对称.
举例
a11 a12 a13
a21 a22 a23
a31 a32 a33
约定为上三角阵
a11 a12 a13
      a22 a23
            a33
要计算a12的最短路径
a12=min(a11+a12,a12+a22,a13+a23)
其中a23为原图的a32.

即如果a[ m][n ]不存在则取 a[n ][m ]

最后路径算出来了.用中点法查找.每次运算的二维数组都存下来.可以用三维数组.....第三维记录次数

后开始找

dik+dkj=dij  记录k的位置

表示  从i到k到j.从此挨个查找

i  k1  k  k2  j

直到找到为止

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值