- 浏览: 79041 次
- 性别:
- 来自: 拜月神教
最新评论
-
huangfenghit:
你绝对的大牛~
答复: 阿里巴巴面试感言 -
liuxuejin:
好!慢慢下载来看看
区间树 -
xiaobian:
看不懂,怎么知道是讲的好呢 ?
数据挖掘 决策树ID3算法原理 -
longay00:
不错,很牛,不过没有原理与实验很难相信它的正确性。从代码上看, ...
决策树C4.5算法 -
yangguo:
用我的study方法就可以了。
答复: java最优算法讨论
package tree; public class TreeNode { TreeNode llink; TreeNode rlink; int info; } package tree; public class Tree { TreeNode root; public Tree() { } public boolean isEmpty() { return root == null; } // 插入 public void insertBinaryTree(int info) { TreeNode node = new TreeNode(); node.info = info; if (root == null) { root = node; } else { TreeNode currentNode = root; TreeNode parent; while (currentNode != null) { parent = currentNode; if (info > currentNode.info) { currentNode = currentNode.rlink; if (currentNode == null) { parent.rlink = node; } } else if (info < currentNode.info) { currentNode = currentNode.llink; if (currentNode == null) { parent.llink = node; } } } } } // 删除 public void treeDelete(int info) { TreeNode tNode = serach(info); TreeNode deleteNode = new TreeNode(); TreeNode dNodeChild = new TreeNode(); if (tNode == null) { System.out.println("node is not exists"); } else if (tNode.llink == null || tNode.rlink == null) { deleteNode = tNode; } else { deleteNode = treeSuccessor(tNode); } if (deleteNode.llink != null) { dNodeChild = deleteNode.llink; } else { dNodeChild = deleteNode.rlink; } if (getFatherNode(deleteNode) == null) { root = dNodeChild; } else { if (deleteNode == getFatherNode(deleteNode).llink) { getFatherNode(deleteNode).llink = dNodeChild; } else { getFatherNode(deleteNode).rlink = dNodeChild; } } if (deleteNode != tNode) { tNode.info = deleteNode.info; } } // 搜索 public TreeNode serach(int info) { return treeSerach(root, info); } // 搜索 public TreeNode treeSerach(TreeNode tNode, int info) { if (tNode == null || tNode.info == info) { return tNode; } if (info < tNode.info) { return treeSerach(tNode.llink, info); } else { return treeSerach(tNode.rlink, info); } } // 最大节点 public TreeNode treeMaxiMum(TreeNode tNode) { while (tNode.rlink != null) { tNode = tNode.rlink; } return tNode; } // 最小节点 public TreeNode treeMiniMun(TreeNode tNode) { while (tNode.llink != null) { tNode = tNode.llink; } return tNode; } // 找后继 public TreeNode treeSuccessor(TreeNode tNode) { if (tNode.rlink != null) { return treeMiniMun(tNode.rlink); } TreeNode currentNode = getFatherNode(tNode); while (currentNode != null && tNode == currentNode.rlink) { tNode = currentNode; currentNode = getFatherNode(tNode); } return currentNode; } // 找前驱 public TreeNode treePrecursor(TreeNode tNode) { if (tNode.llink != null) { return treeMaxiMum(tNode.llink); } TreeNode currentNode = getFatherNode(tNode); while (currentNode != null && tNode == currentNode.llink) { tNode = currentNode; currentNode = getFatherNode(tNode); } return currentNode; } // 找节点的父节点 public TreeNode getFatherNode(TreeNode tNode) { TreeNode current = root; TreeNode trailCurrent = null; while (current != null) { if (current.info == tNode.info) { break; } trailCurrent = current; if (tNode.info < current.info) { current = current.llink; } else { current = current.rlink; } } return trailCurrent; } // 中序遍历 public void inOrder(TreeNode tNode) { if (tNode != null) { inOrder(tNode.llink); System.out.print(tNode.info + " "); inOrder(tNode.rlink); } } // 打印树 public void printTree() { System.out.println("inOrder"); inOrder(root); System.out.println(); System.out.println("preOrder"); preOrder(root); System.out.println(); System.out.println("postOrder"); postOrder(root); System.out.println(); } // 前序遍历 public void preOrder(TreeNode tNode) { if (tNode != null) { System.out.print(tNode.info + " "); preOrder(tNode.llink); preOrder(tNode.rlink); } } // 后序遍历 public void postOrder(TreeNode tNode) { if (tNode != null) { postOrder(tNode.llink); postOrder(tNode.rlink); System.out.print(tNode.info + " "); } } public static void main(String[] args) { Tree tree = new Tree(); System.out.println("insert tree start"); tree.insertBinaryTree(15); tree.insertBinaryTree(5); tree.insertBinaryTree(16); tree.insertBinaryTree(3); tree.insertBinaryTree(12); tree.insertBinaryTree(20); tree.insertBinaryTree(10); tree.insertBinaryTree(13); tree.insertBinaryTree(18); tree.insertBinaryTree(23); tree.insertBinaryTree(6); tree.insertBinaryTree(7); System.out.println("insert tree end"); System.out.println("print tree start"); tree.treeDelete(15); tree.printTree(); System.out.println("print tree end"); } }
哈夫曼树
package tree; /** * @author B.Chen */ public class HuffmanTree { /** * 根节点 */ public TreeNode root; /** * 数组下表 */ public int nodeSize; /** * 长度 */ public int length; /** * 哈夫曼节点数组 */ public TreeNode[] nodeList; /** * 访问控制 */ public boolean[] visited; /** * @param length */ public HuffmanTree(int length) { this.length = length; nodeList = new TreeNode[2 * length-1]; visited = new boolean[2*length-1]; } /** * @param info */ public void addNode(int info) { TreeNode tNode = new TreeNode(); tNode.info = info; if (nodeSize < length) { nodeList[nodeSize++] = tNode; } else { System.out.println("out of size"); } } /** * 构造哈夫曼树 */ public void createHuffmanTree() { int j = length; while (nodeList[2*length -2] == null) { TreeNode lNode = getMiniMumNode(); TreeNode rNode = getMiniMumNode(); TreeNode tNode = new TreeNode(); System.out.println(lNode.info + " " + rNode.info); tNode.llink = lNode; tNode.rlink = rNode; tNode.info = lNode.info + rNode.info; nodeList[j++] = tNode; } root = nodeList[2 * length - 2]; } /** * @return TreeNode */ public TreeNode getMiniMumNode() { TreeNode tNode = null; int size = 0; for(int i=0;i<2*length-1;i++) { if(!visited[i] && nodeList[i] != null) { tNode = nodeList[i]; size = i; for(int j=0;j<2*length-1;j++) { if(!visited[j] && nodeList[j] != null) { if(tNode.info > nodeList[j].info) { tNode = nodeList[j]; size = j; } } } } } visited[size] = true; return tNode; } /** * 中序遍历 * * @param tNode */ public void inOrder(TreeNode tNode) { if (tNode != null) { inOrder(tNode.llink); System.out.print(tNode.info + " "); inOrder(tNode.rlink); } } /** * 打印 */ public void printHuffmanTree() { System.out.println("inOrder"); inOrder(root); } /** * @param args */ public static void main(String[] args) { HuffmanTree hTree = new HuffmanTree(6); hTree.addNode(4); hTree.addNode(4); hTree.addNode(4); hTree.addNode(4); hTree.addNode(5); hTree.addNode(6); hTree.createHuffmanTree(); hTree.printHuffmanTree(); } }
发表评论
-
庞果英雄会 覆盖数字
2013-11-14 15:13 856庞果覆盖数字原题如下 给定整数区间[a,b]和整数区间[x, ... -
2-3 tree
2013-10-09 17:10 772package com.leon.cc; imp ... -
编译原理生成LL1预测分析表
2013-08-11 20:47 5850package com.leon; impo ... -
应用倍增法后缀数组以及RMQ求解N个字符串最长公共子串问题
2011-11-30 16:35 1464/** * @see IOI2009国家集训队论文《后 ... -
谷哥的KOF连招问题
2010-10-09 14:38 1533传说问题是这样的 玩过KOF(拳皇)的人都知道,玩的时候会连招 ... -
KOF
2010-10-09 00:13 0package org.struct.trietree; ... -
ACM/ICPC HDU 1195
2010-09-06 10:37 1897本年度还有8篇博客需要完成 开篇前附加一个看完《盗梦空间》的我 ... -
答复: 阿里巴巴面试感言
2009-10-09 22:27 2185好吧,我承认我闲的蛋疼 问题:3000万条的记录取最大的前50 ... -
正向最大匹配改进算法
2009-05-26 22:11 5894AD.: 2年J2EE经验,熟悉常用数据结构算法,熟悉常 ... -
决策树C4.5算法
2009-05-19 02:05 5259数据挖掘中决策树C4.5预测算法实现(半成品,还要写规则后 ... -
区间树
2008-07-18 15:47 2192package acmcode; /** * ... -
红黑树初版
2008-07-16 17:20 1610package acmcode; /** * R ... -
四则运算的中缀转后缀,逆波兰表达式求值
2008-04-23 23:10 9087首先描述问题 给定一 ... -
最大0,1子矩阵
2008-04-20 21:16 6087首先描述一下问题 /** * * 时间限制(普 ... -
数据挖掘 决策树ID3算法原理
2008-04-11 22:24 11414上一篇博客写了ID3算法的简单实现 这一篇讲讲ID3的原理 写 ... -
决策树ID3算法
2008-04-01 22:18 7607算了,还是自己修正一个BUG.... package gr ... -
ext2.0 的XMLWriter
2008-02-20 21:04 1285做ext相关的一个example项目,把我们的客户端移植成ex ... -
LCS与图算法
2008-02-20 20:46 1236求两个字符串最长公共子串的问题。大体解法是用一个矩阵来记录两个 ... -
《程序员》算法擂台:骑士聚会
2008-02-20 20:40 1217在8×8的棋盘上分布着n个骑士,他们想约在某一个格中聚会。骑士 ...
相关推荐
哈夫曼树与哈夫曼编码是数据结构和算法领域中的一个重要概念,广泛应用于数据压缩、文本编码以及优先队列等场景。哈夫曼编码是一种特殊的前缀编码方法,能够为字符提供一种高效的二进制表示,使得频繁出现的字符具有...
武汉大学程序艺术课件----树与哈夫曼树.ppt
运用哈夫曼算法构造哈夫曼树,并得到哈夫曼编码。 输入格式:10,5,21,18,8,13 二、实验目的 掌握哈夫曼算法。 三、实验内容及要求 1、构造哈夫曼树和哈夫曼编码的存储结构。 2、实现哈夫曼算法,实现哈夫曼树的存储...
哈夫曼树是一种特殊的二叉树,用于解决数据编码和压缩问题,特别是在数据通信和文件压缩领域广泛应用。哈夫曼编码是一种高效的前缀编码方法,它根据数据出现频率分配最短的二进制码,频繁出现的字符拥有较短的编码,...
本话题将深入探讨C++中实现的几个关键数据结构及其应用:二叉排序树(Binary Search Tree, BST)、哈夫曼树(Huffman Tree)与哈夫曼编码(Huffman Coding),以及括号匹配检验,这些都是基于栈(Stack)的应用。...
"哈夫曼树和哈夫曼编码的实现" 哈夫曼树是一种高效的编码树结构,它广泛应用于数据压缩、编码等领域。哈夫曼编码是一种变长前缀编码方法,它可以将符号编码成二进制代码,以达到压缩数据的目的。 哈夫曼树的构建...
哈夫曼树(Huffman Tree)和哈夫曼编码(Huffman Coding)是数据压缩领域中的基础算法,它们主要用于无损数据...通过理解和实现哈夫曼树与哈夫曼编码,我们可以深入理解数据压缩的原理,并能设计出更高效的压缩算法。
哈夫曼树(Huffman Tree)与哈夫曼编码(Huffman Coding)是数据压缩领域中的重要算法,它们主要用于无损数据压缩。哈夫曼编码是一种前缀编码方法,通过构建最优二叉树来实现字符的高效编码,使得常用字符的编码长度...
#### 一、哈夫曼树与哈夫曼编码概念 **哈夫曼树**是一种特殊的二叉树,也被称为最优二叉树,它是一类带权路径长度最短的二叉树。这种树常用于构建高效的编码方案,比如哈夫曼编码,它可以用来压缩数据。 **哈夫曼...
### 哈夫曼树与哈夫曼编码 #### 哈夫曼树的基本概念 哈夫曼树,又称作最优二叉树,是一种特殊的二叉树结构,在数据压缩领域有着重要的应用价值。它主要用于构建一种高效的数据压缩模型,通过减少数据传输或存储时...
哈夫曼树与哈夫曼编码是数据结构和算法领域中的重要概念,主要应用于数据压缩和效率优化。它们是基于贪心策略的高效算法,旨在最小化带权路径长度(WPL),从而达到最佳编码的效果。 哈夫曼树,又称为最优二叉树或...
哈夫曼树是一种特殊的二叉树,用于实现数据的高效编码,特别适用于数据压缩和通信领域。它由赫尔曼·哈夫曼在1952年提出,因此得名哈夫曼编码。哈夫曼编码是通过构建一棵最优二叉树来实现的,这棵树的特性是:频率越...
哈夫曼树与哈夫曼编码是数据压缩领域中的核心概念,它们在计算机科学和信息技术中扮演着重要的角色。哈夫曼编码是一种高效的前缀编码方法,常用于无损数据压缩,以减少数据存储和传输的位数。下面将详细阐述这两个...
小小的实验,用哈夫曼树实现哈夫曼编码,属于cpp文件,
哈夫曼树及哈夫曼编码译码的实现 哈夫曼树是一种特殊的二叉树,它的每个节点的权重是其所有子节点的权重之和。哈夫曼树的应用非常广泛,如数据压缩、编码、译码等。 哈夫曼树的存储结构 哈夫曼树的存储结构可以...