模型:
简单深度优先计算
--- b---
| | |
a | d
| | |
----c---
简单深度优先计算
--- b---
| | |
a | d
| | |
----c---
矩阵:可以走就是1.不能走就是0.
自己到自己强制定义为0,线代书是这样的。后面出了点问题。以后修复。
算符定义:
a b c d
a 0 1 1 0
b 1 0 1 1
c 1 1 0 1
d 0 1 1 0
自己到自己强制定义为0,线代书是这样的。后面出了点问题。以后修复。
算符定义:
a b c d
a 0 1 1 0
b 1 0 1 1
c 1 1 0 1
d 0 1 1 0
令这个矩阵是A
传统矩阵运算
A^2=A*A=
忽略+号
0110 0010 0100 0110
0010 1011 1001 0010
0100 1001 1101 0100
0110 0010 0100 0110
值
a b c d
a2 1 1 2
b1 3 2 1
c1 2 3 1
d2 1 1 2
含义:bc=2 从b到c有两条路径。
运用:
计算机网络rip协议。按照路由器跳数实行。在A表中从a到d:ad=0
继续查表:A^2是2说明有两条路径 。查运算过程。a-b-d a-c-d
如果ad还是0就需要查询(计算)A^3的表和中间过程
传统矩阵运算
A^2=A*A=
忽略+号
0110 0010 0100 0110
0010 1011 1001 0010
0100 1001 1101 0100
0110 0010 0100 0110
值
a b c d
a2 1 1 2
b1 3 2 1
c1 2 3 1
d2 1 1 2
含义:bc=2 从b到c有两条路径。
运用:
计算机网络rip协议。按照路由器跳数实行。在A表中从a到d:ad=0
继续查表:A^2是2说明有两条路径 。查运算过程。a-b-d a-c-d
如果ad还是0就需要查询(计算)A^3的表和中间过程
移植,加强:
什么是宏观dijkstra算法?(自己查资料定义的。。)
两个准则:
1.搜索结点且已经走过的路径不返回搜索
2.有更小的代价路径就替换
解读:
1.1保证了时间复杂度没有出现高阶
2.1这个不是先宽度后优先
分析:按照dijkstra的终止条件:标记所有结点。则这个不是传统宽度优先搜索。
两个准则:
1.搜索结点且已经走过的路径不返回搜索
2.有更小的代价路径就替换
解读:
1.1保证了时间复杂度没有出现高阶
2.1这个不是先宽度后优先
分析:按照dijkstra的终止条件:标记所有结点。则这个不是传统宽度优先搜索。
名词解释:
传统宽度优先搜索。从A出发目标是C
则计算所有的A的出去的。再从结点挨个展开。计算到第一个C后继续计算。直到出现所有的都代价值比最小的C的代价值后面就不计算了。如果是双向都连通的图。dijkstra算法可能会拓展到图中存在的所有结点。
传统宽度优先搜索。从A出发目标是C
则计算所有的A的出去的。再从结点挨个展开。计算到第一个C后继续计算。直到出现所有的都代价值比最小的C的代价值后面就不计算了。如果是双向都连通的图。dijkstra算法可能会拓展到图中存在的所有结点。
继续深度优先计算:
30
--- b---
| 2|1 | 10
a | d
| |
----c
10
算符定义:
30
--- b---
| 2|1 | 10
a | d
| |
----c
10
算符定义:
a b c d
a 0 30 10 0
b 30 0 21 10
c 10 21 0 0
d 0 10 0 0
这个矩阵命名为B
还是从a到d计算最短路径。
B^2运算:
每次挨个取的元素还是矩阵乘法的行列计算的两个元素。
乘法变加法。加法变min计算.但是这里0要处理。那么就规定min中如果出现了0就忽视。如果修复就是引入高阶无穷小
上次计算中这个点存在值。这次计算出现0则从上次中找。如果上次是0.这次还是0则这个结点继续是0//其实还是加法
如果第一个数非0,第二个数为0则用&标记。表示目前暂时不可到。记录距离。
关键计算:
修复前:
aa=min(0+0,30+0,10+0,0+0)=10
ab=min(30+0,30+0,21+10,0+0)=30
ac=min(10+0,30+21,10+0,0+0)=10
//ad=min(0+0,30+10,0&【10】,0)=40 //这个后面有说明
ad=min(0+0,30+10,0,0)=40
修复自己到自己加上高阶无穷小量0.01
a b c d
a 0.01 30 10 0
b 30 0.01 21 10
c 10 21 0.01 0
d 0 10 0 0.01
这个矩阵命名为C
C^2
aa=0.01
ab=30
ac=10
ad=40
a 0 30 10 0
b 30 0 21 10
c 10 21 0 0
d 0 10 0 0
这个矩阵命名为B
还是从a到d计算最短路径。
B^2运算:
每次挨个取的元素还是矩阵乘法的行列计算的两个元素。
乘法变加法。加法变min计算.但是这里0要处理。那么就规定min中如果出现了0就忽视。如果修复就是引入高阶无穷小
上次计算中这个点存在值。这次计算出现0则从上次中找。如果上次是0.这次还是0则这个结点继续是0//其实还是加法
如果第一个数非0,第二个数为0则用&标记。表示目前暂时不可到。记录距离。
关键计算:
修复前:
aa=min(0+0,30+0,10+0,0+0)=10
ab=min(30+0,30+0,21+10,0+0)=30
ac=min(10+0,30+21,10+0,0+0)=10
//ad=min(0+0,30+10,0&【10】,0)=40 //这个后面有说明
ad=min(0+0,30+10,0,0)=40
修复自己到自己加上高阶无穷小量0.01
a b c d
a 0.01 30 10 0
b 30 0.01 21 10
c 10 21 0.01 0
d 0 10 0 0.01
这个矩阵命名为C
C^2
aa=0.01
ab=30
ac=10
ad=40
经过第一轮计算结果是a-b-d
第二轮这个值还是这么多。ad的0&【10】计算出来等于41.还是ad这个结果直接丢弃
第二轮这个值还是这么多。ad的0&【10】计算出来等于41.还是ad这个结果直接丢弃
算法完备性。如果想要保证最优解。人工识别。从a到d最多是3轮计算计算9步。如果是计算机最多就是算法的元素个数的平方。这个是4^2.
算法优化方向:
改为三角阵。具体的过程需要证明。
改为三角阵。具体的过程需要证明。
暂时写到这里。