“你学过《线性代数》和《C语言》吗?”, “学过,……我便考你一考。计算行列式用C语言怎样写?”,,,“不能写罢?……我教给你,记着!这些算法应该记着。将来做项目当老板的时候要用”,,,“对呀对呀!…行列式的算法有三样写法,你知道么?”
在前面的博文中已提到计算行列式的两种算法,即:
一、按第一行展开的递归方法,链接如下:
http://blog.sciencenet.cn/blog-797552-1223086.html)
二、利用初等行变换,化成上三角矩阵求对角线元素乘积的方法,链接如下:
http://blog.sciencenet.cn/blog-797552-1227970.html
三、一般教材还给出一种按完全展开式计算的方法,即,每行取一元素按元素列下标的“全排列”和“逆序数”奇偶性构成n个元素的乘积,对这n!项求和。
这种方法也是通过递归的方式,生成1到n个数的全排列。每生成一个排列存放到数组P中,用A[i*(m+1)+P[i]-1]取对应元素。编写这个算法,琢磨了很久,主要是求全排列不好处理,最后参考了的《算法竞赛》(罗勇军、郭卫斌著)书中递归打印全排列的算法思想才调试通。
主函数及相关测试数据和输出矩阵函数如下:
运行结果:
本文第一段是写完博文后又加的,改自<孔乙己>,写完程序想教给学生,经常有孔乙己的这种感觉,穷困、迂腐,好为人师,却常遇这种尴尬。<孔乙己>原文为:
“你读过书么?”我略略点一点头。他说,“读过书,……我便考你一考。茴香豆的茴字,怎样写的?”我想,讨饭一样的人,也配考我么?便回过脸去,不再理会。孔乙己等了许久,很恳切的说道,“不能写罢?……我教给你,记着!这些字应该记着。将来做掌柜的时候,写账要用。”我暗想我和掌柜的等级还很远呢,而且我们掌柜也从不将茴香豆上账;又好笑,又不耐烦,懒懒的答他道,“谁要你教,不是草头底下一个来回的回字么?”孔乙己显出极高兴的样子,将两个指头的长指甲敲着柜台,点头说,“对呀对呀!……回字有四样写法⑿,你知道么?”我愈不耐烦了,努着嘴走远。孔乙己刚用指甲蘸了酒,想在柜上写字,见我毫不热心,便又叹一口气,显出极惋惜的样子。