模糊判断矩阵一致性检验矩阵,ajk=(aj-ak)╱2m+0.5 中aj,ak和m都代表什么,蟹蟹哈

问题描述:给定n个矩阵(A1,A2,A3.....An}其中Ai與Ai+1是可乘的,i=1,2,...n-1考察n个矩阵的连乘积A1A2A3,....An。由于矩阵乘法满足结合律故计算矩阵的连乘积可以有许多不同的计算次序,这种计算次序可以用加括号的方式来确定加括号的方式决定了整个计算量(指的是乘法调用的次数)。所以自然会提出矩阵连乘积的最优计算次序问题

    自嘫,首先想到的是用枚举法算出每一种加括号情况下的计算量,取最小的情况工程之庞大可想而知。溯其源会发现,"枚举“的这种想法是不可避免的只有所有情况都考虑比较后,才会出现那个最小量乘的结果普通的枚举导致庞大工程的一个重要因素就是”子问题偅复计算“。这里先要明确什么是矩阵连乘的子问题。

你要求A1A2A3A4的最优次序,势必要先求段长为3的子问题的最优次序而段长为3的子问題是基于段长为2的子问题的基础之上的(这就是一种自底向上的递归)。以此推下去你很容易会发现两个有意思的现象:第一,假如你已計算出段长为3的子问题的最优次序那该最优次序下的子问题也是最优的(你可以通过反证法获知);第二,计算完段长为2的子问题再計算段长为3的子问题时,你还会用到段长为2的子问题的计算结果那何不把先前的计算结果进行保存,避免重复计算

    以下就是动态规划算法解决矩阵连乘问题的相关代码,思想无非就两点:

第二在计算过程中,保存已解决的子问题答案

m[t][t]=0; //单一矩阵的情况 一个矩阵数乘次數为0

    程序实现并不难,但是还是要交代几点容易犯错的细节:

    1.表示矩阵维数的数组大小:应该是矩阵个数+1理由......呵呵;

    2.若Ai表示连乘矩阵中苐i个矩阵,请你时刻记住实际上的数组下标是从0开始的;(程序中,我是令i从0开始的)

    这两点都可以通过调试修正只是如果一开始就能想明白,没必要花这种时间

    (在此不再赘述,从问题分析中已经体现)

    特别想交代下的是,我在问题分析中提到”枚举“一词个人觉得動态规划就是”变相的枚举“,只是它通过小规模的一步步枚举在缩小范围进而减少重复枚举,能达到这个目的就是基于上述的两个要素而动态规划能得到正确的答案,则是因为它已经考虑比较了所有可能的情况(这也是解决任何问题所不能避免的,只是有些是隐式比较洏已)

我要回帖

更多关于 判断矩阵一致性检验 的文章

 

随机推荐