码迷,mamicode.com
首页 > 其他好文 > 详细

行列式(二):全排列与逆序数

时间:2015-04-29 19:10:53      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:

   由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

 

行列式(二):全排列与逆序数

标签:

原文地址:http://www.cnblogs.com/experdot/p/4466485.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!