將n列矩陣拆分成固定長度k(k

如有疑問可加QQ:936285470,交流技術扯淡都可以大笑


前兩天朋友讓幫忙寫一個論文裏面的矩陣拆分算法,大概的意思就是有一個m×n的矩陣,給定一個整數k,然後按照k的 值將矩陣拆分成m×k的矩陣,求所有的方案。


看了之後想了一下,最簡單的排列組合算法嘛,就去百度了一段排列組合代碼下來改(不想手寫你懂得)

後面找到了一個排列組合寫的還不錯的博,我這裏面有一部門代碼用的也是他的,大家如果覺得我寫的看不懂的話可以去看看他的

地址:http://www.cnblogs.com/luxiaoxun/archive/2012/08/08/2628153.html


排列組合算法的遞歸實現:

   /**
     * 排列組合函數
     *a[]  將要拆分的矩陣的列號按順序排列的數組
     *b[]  a數組的標記輔助數組
     *start a數組的開始位置
     *end  a數組的結束位置
     */
    void combine(int a[], boolean b[], int start, int end)
    {
        int columnArr[]=new int[a.length];  //子矩陣所包含大矩陣哪幾列的記錄數組
        if(start > end)
        {
            for(int i = 0; i <= end; ++i)
            {
                if(b[i]){
		    System.out.print(a[i] + " ");
                    columnArr[i]=1;
} }


	    System.out.println();
} else { b[start] = true; combine(a,b,start+1,end); b[start] = false; combine(a,b,start+1,end); } }

上面的函數可以把給定的數組拆分成若干個長度不一的子數組,並且輸出所有的方案。

下面我改進了一下上面的函數,控制了子數組的長度,就得到了我想要的矩陣拆分函數。

   /**
     * 矩陣拆分函數
     *a[]  將要拆分的矩陣的列號按順序排列的數組
     *b[]  a數組的標記輔助數組
     *start a數組的開始位置
     *end  a數組的結束位置
     *k  子矩陣的列數
     */
    void combine(int a[], boolean b[], int start, int end,int k)
    {
        int columnArr[]=new int[a.length];  //子矩陣所包含大矩陣哪幾列的記錄數組
        if(start > end)
        {
            int count=0;
            for(int i = 0; i <= end; ++i)
            {
                if(b[i])
                    count++;
            }
            if(count==k){  //對子數組的長度按照k進行控制
                for(int i = 0; i <= end; ++i)
                {
                    if(b[i]) {
                        System.out.print(a[i] + " ");
                        columnArr[i]=1;
                    }
                }
                System.out.println();
            }
        }
        else
        {
            b[start] = true;
            combine(a,b,start+1,end,k,matrixClassArr);
            b[start] = false;
            combine(a,b,start+1,end,k,matrixClassArr);
        }
    }


拆分完成後,按照得到的columnArr數組,就可以拿去拆分大矩陣了。



第一篇博客,寫的不好大家多多見諒。後面還會把多年來積累的葵花寶典慢慢放到博客來,希望大家多多支持。



發佈了38 篇原創文章 · 獲贊 19 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章