由n阶行列式的定义可知,求行列式需要首先求解一个序列的全排列和逆序数
1.全排列
从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。
- 算法原理
1.假设有一个序列{1,2,3,4,5},首先排列第一个元素,共有5种情况
{1,*,*,*,*}
{2,*,*,*,*}
{3,*,*,*,*}
{4,*,*,*,*}
{5,*,*,*,*}
2.单独分析1.中的第一种情况,排列第二个元素,共有四种情况
{1,2,*,*,*}
{1,3,*,*,*}
{1,4,*,*,*}
{1,5,*,*,*}
3.以此推类,依次排列第三,四和五个元素。即可求得序列的全排列
- VB.NET自定义方法
1.方法名:GetFullPerm(ByVal NumArray() As Integer, ByVal LeftIndex As Integer, ByRef Result As List(Of Array))
2.功能:传入一个一维数组和List (Of Array),求得该一维数组的全排列
3.参数:
NumArray:一维数组,要求全排列的序列
LeftNum:当前求解的索引,调用方法时传入0即可
Result:List (Of Array),用于保存全排列的结果
Private Sub GetFullPerm(ByVal NumArray() As Integer, ByVal LeftIndex As Integer, ByRef Result As List(Of Array)) Dim temp As Integer If LeftIndex = NumArray.Length - 1 Then Dim tempArray(NumArray.Length - 1) As Integer NumArray.CopyTo(tempArray, 0) Result.Add(tempArray) Else temp = NumArray(LeftIndex) For i = LeftIndex To NumArray.Length - 1 NumArray(LeftIndex) = NumArray(i) NumArray(i) = temp ‘对换 GetFullPerm(NumArray, LeftIndex + 1, Result) NumArray(i) = NumArray(LeftIndex) NumArray(LeftIndex) = temp ‘还原对换 Next End If End Sub
2.逆序数
在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数
- 算法原理
1.假设有一个序列{3,1,2,4,5},首先求第一个元素的逆序数,T1=0
2.依次求解第二,三,四和五位置的元素的逆序数,T2=1,T3=1,T4=0,T5=0
3.求得各位置元素逆序数的总和,T=T1+T2+T3+T4+T5=2
- VB.NET自定义函数
1.函数名:GetInverseNum(ByVal NumArray() As Integer)
2.功能:传入一个一维数组,求得该一维数组序列的逆序数
3.参数:
NumArray:一维数组,要求逆序数的序列
Private Function GetInverseNum(ByVal NumArray() As Integer) Dim Num As Integer = 0 For i = 0 To NumArray.Length - 1 For j = i To NumArray.Length - 1 If NumArray(i) > NumArray(j) Then Num += 1 Next Next Return Num End Function