Markov Chains

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/harryhare/article/details/83718246

油管视频:

https://www.youtube.com/watch?v=uvYTGEZQTEs&index=1&list=PLANMHOrJaFxPMQCMYcYqwOCYlreFswAKP

概括一下:

首先,稳定态(absorb)就是去找特征值为1的特征向量,这个大家都能想到。

但是,你会发现 转移矩阵(transition matrix)的写法和 线性代数中的那种是不同的。
按照这里的写法,只能从左边用行向量去乘 转移矩阵。
而线性代数中的规范是从右边用列向量去乘 矩阵。
然后视频中解特征向量时就只好展开算。而线性代数中直接在矩阵上行变换就可以消元了。

然后是,矩阵特征值1 有多个特征向量的情况。
如果给定一个初始状态,那么最终状态一定是这几个特征向量的线性组合。

用有向图来看这个问题:
在这里插入图片描述
这个图可以分成3个强连通的部分a,b,c, 但是没有箭头流入a, 所以 在每个周期中,a的四个状态所占的概率会越来越小。
终止状态是 b* 和 c *
这个图对应的矩阵的特征值1 对应的特征向量应该有两个,分别是 b 的分量 和纯 c 的分量。单独看,纯 b 的特征向量 和 b 这个子图 单独存在时的特征向量是一样的。纯 c 的特征向量同理。
所以其实可以先把 b 和 c 分别压缩成两个点。(a 是不能压缩的。)

实际 的最终状态(纯b的特征向量 和 纯c的特征向量的权重)和 初始状态有关,

按照线性代数的定义,把矩阵的列向量,用特征向量作为weight 进行线性组合会得到特征向量本身。

还有个地方,就是1 个特征向量和 0 的特征向量,
如果是向量变换后还是器自身就是 1的特征向量。 Ax= x
如果变化后是0 就是 0 的特征向量。(A-I)x=0
所以也是相当于把 矩阵减去单位阵后,求特征值为0 的特征向量。

一个练习:

G家这道算法题应该只是相当于高斯消元(高斯消元,从上到下,再从下到上,一共两趟,这里只需要一趟)
https://github.com/ivanseed/google-foobar-help/blob/master/challenges/doomsday_fuel/doomsday_fuel.md

要注意个地方,输入的格式 并不是 标准的transition 矩阵,需要把那几个终止态的对角线改成 1
在这里插入图片描述

另外说一下,这个可以搜到的题解是错的(https://repl.it/@percussionoid/Doomsday-Fuel-3 ),
首先他是用模拟的方式做的(乘了1000次转移矩阵),这个时间复杂度很可能就超了,
然后,后面求分母那个地方也是错的,一个例子,7/12 1/8 1/8 1/6
相应的输入为

m = [[0,14,3,3,4],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]]

正确的输出应该是:
[14,3,3,4,24]
但是那个程序的输出:
[7, 1, 1, 2, 12]

其他:

一个以前没见过的,但是觉得会有用,的定理
https://en.wikipedia.org/wiki/Perron–Frobenius_theorem

猜你喜欢

转载自blog.csdn.net/harryhare/article/details/83718246
今日推荐