2006年中 My Favorite Java Site

1.TheServerside.com  依然是地位无可动摇的CCTV1。

2.InfoQ.com Floyd Marinescu 在离开 TSS 后另起炉灶,2006年中最重要推荐。视野不再局限于Java 而是包括Java,.Net, Ruby ,SOA, Agile方法等热门话题。

3.JDJ的电子杂志 在JDJ首页的最底处订阅,文章质量丝毫不低于5-7的传统三强。

4.SWik.net  收集了大量OpenSource Project的资源聚合。其中如Spring,Hibernate的更新度非常高,出现什么和Spring有关的blog,article,project都会马上被聚合。

5.IBM DeveloperWorks 传统、稳定的Java文章来源地。

6.JavaWorld 传统、稳定的Java文章来源地。

7.OnJava  传统、稳定的Java文章来源地。

8.Artima.com 类似于TSS而略逊,其中Spotlight 文章值得关注,而Java News是聚合了所有其他Java站点的大聚合。

9.JavaLobby  站内的Announcements 是大大小小Java  Project的发布声明区,Trips and Tricks 有很多的Tips。

10. No Fluff Just Stuff 的Blogs 聚合 一直缺一个所有优秀Java Blogger的rss总聚合,NFJS这里勉强算一个。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,我理解了你的问题。首先,让我们来看看建立哈夫曼树的步骤: 1. 统计每个字符的出现频率。 2. 将出现频率作为权值,将每个字符看作一个节点,构建一棵初始的只包含叶子节点的二叉树。 3. 选择两个权值最小的节点,将它们合并为一个新节点,并将新节点的权值设置为两个子节点的权值之和。将这个新节点插入到二叉树,重复这个过程,直到所有节点都被合并到一起,形成一棵完整的哈夫曼树。 下面是用Java实现哈夫曼编码和译码的代码,其包括了构建哈夫曼树、生成编码表和对给定文本进行编码和译码等功能: ```java import java.util.*; class HuffmanNode implements Comparable<HuffmanNode>{ char c; int freq; HuffmanNode left; HuffmanNode right; public HuffmanNode(char c, int freq){ this.c = c; this.freq = freq; } public boolean isLeaf(){ return left == null && right == null; } @Override public int compareTo(HuffmanNode o) { return this.freq - o.freq; } } public class HuffmanEncoding { private Map<Character, String> encodingTable = new HashMap<>(); private void buildEncodingTable(HuffmanNode root, String code){ if (root.isLeaf()){ encodingTable.put(root.c, code); return; } buildEncodingTable(root.left, code + "0"); buildEncodingTable(root.right, code + "1"); } public void encode(String text){ // step 1: build frequency table Map<Character, Integer> freqTable = new HashMap<>(); for (char c : text.toCharArray()){ freqTable.put(c, freqTable.getOrDefault(c, 0) + 1); } // step 2: construct initial binary tree PriorityQueue<HuffmanNode> pq = new PriorityQueue<>(); for (Map.Entry<Character, Integer> entry : freqTable.entrySet()){ pq.offer(new HuffmanNode(entry.getKey(), entry.getValue())); } // step 3: build Huffman tree while (pq.size() > 1){ HuffmanNode left = pq.poll(); HuffmanNode right = pq.poll(); HuffmanNode parent = new HuffmanNode('\0', left.freq + right.freq); parent.left = left; parent.right = right; pq.offer(parent); } // step 4: build encoding table HuffmanNode root = pq.peek(); buildEncodingTable(root, ""); // step 5: encode text StringBuilder sb = new StringBuilder(); for (char c : text.toCharArray()){ sb.append(encodingTable.get(c)); } System.out.println("Encoded text: " + sb.toString()); // step 6: decode text StringBuilder decodedText = new StringBuilder(); HuffmanNode curNode = root; for (char c : sb.toString().toCharArray()){ if (c == '0'){ curNode = curNode.left; } else { curNode = curNode.right; } if (curNode.isLeaf()){ decodedText.append(curNode.c); curNode = root; } } System.out.println("Decoded text: " + decodedText.toString()); // step 7: print encoding table System.out.println("Encoding table:"); for (Map.Entry<Character, String> entry : encodingTable.entrySet()){ System.out.println(entry.getKey() + ": " + entry.getValue()); } } public static void main(String[] args) { HuffmanEncoding huffmanEncoder = new HuffmanEncoding(); huffmanEncoder.encode("THIS PROGRAM IS MY FAVORITE"); } } ``` 上述代码,我们首先构建了一个哈夫曼节点类 `HuffmanNode`,其包含字符、出现频率、左子节点和右子节点等属性。在 `HuffmanEncoding` 类,我们实现了哈夫曼编码和译码的所有步骤。 我们首先通过 `buildFrequencyTable` 方法来统计每个字符的出现频率,然后构建了一个初始的只包含叶子节点的二叉树。接着,我们通过不断合并两个权值最小的节点来构建哈夫曼树,在这个过程同时生成了编码表。最后,我们使用编码表对给定文本进行编码,并使用哈夫曼树对编码后的二进制串进行译码,得到原始的文本。 最后,我们输出了每个字符(包括空格)的编码表。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值