数据结构-矩阵-三角矩阵(Java语言)

详细的代码可见github:

https://github.com/AbitGo/myClassWork/tree/master/workspace_ds

三角矩阵是方形矩阵的一种,因其非零系数的排列呈三角形状而得名。三角矩阵分上三角矩阵和下三角矩阵两种。上三角矩阵的对角线左下方的系数全部为零,下三角矩阵的对角线右上方的系数全部为零。三角矩阵可以看做是一般方阵的一种简化情形。比如,由于带三角矩阵的矩阵方程容易求解,在解多元线性方程组时,总是将其系数矩阵通过初等变换化为三角矩阵来求解;又如三角矩阵的行列式就是其对角线上元素的乘积,很容易计算。有鉴于此,在数值分析等分支中三角矩阵十分重要。一个所有顺序主子式不为零的可逆矩阵A可以通过LU分解变成一个单位下三角矩阵L与一个上三角矩阵U的乘积。

具体实现类:

package com.company.ch5;

public class HuffmanTree {
    public int[][] huffmanfiCoding(int[] w){
        //字符个数
        int n = w.length;
        //结点数
        int m = 2*n -1;
        HuffmanNode[] HN = new HuffmanNode[m];
        int i;
        for(i = 0;i<n;i++){
            HN[i]=new HuffmanNode(w[i]);
        }
        for(i = n;i<m;i++){
            HuffmanNode min1 = selctMin(HN,i-1);
            min1.flag = 1;
            HuffmanNode min2 = selctMin(HN,i-1);
            min2.flag = 1;

            HN[i] = new HuffmanNode();
            min1.parent = HN[i];
            min2.parent = HN[i];
            HN[i].lchild = min1;
            HN[i].rchild = min2;
            HN[i].weight = min1.weight+min2.weight;
        }

        int[][] HuffCode = new int[n][n];
        for(int j = 0;j<n;j++){
            int start = n-1;
            for(HuffmanNode c = HN[j],p = c.parent;p!=null;c = p,p = p.parent){
                if(p.lchild.equals(c))
                    HuffCode[j][start--]=0;
                else
                    HuffCode[j][start--]=1;
            }
            HuffCode[j][start]= -1;
        }
        return HuffCode;
    }

    private HuffmanNode selctMin(HuffmanNode[] HN,int end){
        HuffmanNode min = HN[end];
        for(int i = 0;i<=end;i++){
            HuffmanNode h = HN[i];
            if(h.flag==0 && h.weight <min.weight){
                min = h;
            }
        }
        return  min;
    }

    public static void main(String[] args) {
        int[] w = {23,11,5,3,29,14,7,8};
        HuffmanTree t = new HuffmanTree();
        int[][] HN = t.huffmanfiCoding(w);
        System.out.println("哈夫曼编码为:");
        for(int i = 0;i<HN.length;i++){
            System.out.print(w[i]+": ");
            for(int j = 0;j<HN[i].length;j++){
                if(HN[i][j]==-1){
                    for(int k =j+1;k<HN[i].length;k++){
                        System.out.print(HN[i][k]);
                    }
                    break;
                }
            }
            System.out.println();
        }
    }
}

测试类:

package com.company.ch4.Matrix;

public class TriangularMatrixTest {
    public static void main(String[] args) {
        System.out.println("上三角矩形");
        TriangularMatrix triangularMatrix1 = new TriangularMatrix(8,true,99);
        triangularMatrix1.autoGenerate();
        triangularMatrix1.disPlay();

        System.out.println("下三角矩形");
        TriangularMatrix triangularMatrix2 = new TriangularMatrix(8,false,88);
        triangularMatrix2.autoGenerate();
        triangularMatrix2.disPlay();
    }
}

测试结果:

上三角矩形
99	1	2	2	3	4	3	4	
99	99	2	3	4	3	4	5	
99	99	99	3	4	5	6	4	
99	99	99	99	4	5	6	7	
99	99	99	99	99	5	6	7	
99	99	99	99	99	99	6	7	
99	99	99	99	99	99	99	7	
99	99	99	99	99	99	99	99	
下三角矩形
0	88	88	88	88	88	88	88	
1	2	88	88	88	88	88	88	
2	3	4	88	88	88	88	88	
3	4	5	6	88	88	88	88	
4	5	6	7	8	88	88	88	
5	6	7	8	9	10	88	88	
6	7	8	9	10	11	12	88	
7	8	9	10	11	12	13	14	
发布了84 篇原创文章 · 获赞 39 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/Abit_Go/article/details/104162581