贪心算法哈夫曼java_哈夫曼编码采用贪心算法,百度上的,可是还是有问题,求大神...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

package huffmancode;

import java.util.ArrayList;

public class HuffmanCode{

public static void main(String[] args) {

ArrayList list=new ArrayList();

list.add(new HuffmanNode(null,null,"A",0.3f));

list.add(new HuffmanNode(null,null,"B",0.1f));

list.add(new HuffmanNode(null,null,"C",0.35f));

list.add(new HuffmanNode(null,null,"D",0.05f));

list.add(new HuffmanNode(null,null,"E",0.2f));

print(getHuffmanCodeNode(list));

}

public static HuffmanNode getHuffmanCodeNode(ArrayList list){

while(list.size()>=2){

srotNodeListByKey(list);

HuffmanNode newNode=combine2SmallestNode(list.get(0),list.get(1));

list.remove(0);

list.remove(0);

list.add(0,newNode);

}

return list.get(0);

}

public static void print(HuffmanNode node){

System.out.print("丨"+node.getData()+","+node.getPercent()+"丨");

if(node.getLeftN()!=null){

print(node.getLeftN());

}

if(node.getRightN()!=null){

print(node.getRightN());

}

}

public static void srotNodeListByKey(ArrayList list){

for(int i=0;i

for(int j=i=1;j

if(list.get(i).getPercent()>list.get(j).getPercent()){

list.add(i,list.get(j));

list.remove(j+1);

list.add(j,list.get(i+1));

list.remove(i+1);

}

}

}

}

private static HuffmanNode combine2SmallestNode(HuffmanNode leftNode,HuffmanNode rightNode){

HuffmanNode parentNode=new HuffmanNode(leftNode,rightNode,leftNode.getData()+rightNode.getData(),leftNode.getPercent()+rightNode.getPercent());

return parentNode;

}

}

class HuffmanNode{

private HuffmanNode leftN;

private HuffmanNode rightN;

private String data;

private float percent;

public HuffmanNode(HuffmanNode leftN,HuffmanNode rightN,String data,float key){

super();

this.leftN=leftN;

this.rightN=rightN;

this.data=data;

this.percent=key;

}

public float getPercent(){

return percent;

}

public void setPercent(float percent){

this.percent=percent;

}

public HuffmanNode getLeftN(){

return leftN;

}

public void setLeftN(HuffmanNode leftN){

this.leftN=leftN;

}

public HuffmanNode getRightN(){

return rightN;

}

public void setRightN(HuffmanNode rightN){

this.rightN=rightN;

}

public String getData(){

return data;

}

public void setData(String data){

this.data=data;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值