我目前的项目需要使用3x3x3马尔可夫链。我想到的第一个实现是让矩阵中的每个位置都有机会移动到那个位置(所有位置的值总和为1)。根据矩阵中的值,这将导致:
平均13.5次比较
一个比较的最佳案例
27种比较中最糟糕的情况
我的下一个想法是将每一行和每一层的总和存储为一个额外的类变量数组这将允许它在以下位置找到正确的位置:
平均4.5次比较(1.5次找到图层,1.5次找到图层)
第1.5行查找位置)
三种比较的最佳情况
9次比较中最糟糕的情况
我们已经可以看到这是一个更好的实现比较明智,但也有一些额外的数据,它需要存储。
有没有更好的方法来实现这一点?
最佳答案
马尔可夫链通过一个转移矩阵进化,在你的例子中,这个转移矩阵可能是27x27矩阵。然而,你问问题的方式意味着你不是在处理一般的案件,还有一些特殊的条件适用。
如果我这么做的话,我的第一个想法是现在的计算机速度太快了,不值得担心初始版本的效率,最好能得到一些初步的结果所以我只开始担心后续版本的效率。特别是,你的更有效的版本显然会有点难以得到正确的,也许有点危险,以防你保存的变量与你的markov链的基本状态不同步。因此,测试如此高效的实现的一个重要工具是您首先想到的强力低效实现。
关于algorithm - 最有效的马尔可夫链算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16218215/