详细的代码可见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