摘要:
1.为什么要有图 1)线性表局限于一个直接前驱和一个直接后继的关系 2)树也只能有一个直接前驱也就是父节点 3)当我们需要表示多对多的关系时, 这里我们就用到了图 2.图的举例说明 图是一种数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边。 结点也可以称为顶点。如图: 3.图的 阅读全文
摘要:
1.二叉树问题分析 二叉树的操作效率较高,但是也存在问题, 请看下面的二叉树 1)二叉树需要加载到内存的,如果二叉树的节点少,没有什么问题,但是如果二叉树的节点很多(比如1亿, 就存在如下问题 2)问题1:在构建二叉树时,需要多次进行i/o操作(海量数据存在数据库或文件中),节点海量,构建二叉树时, 阅读全文
摘要:
1.为什么需要平衡二叉树? 二叉排序树可能的存在的问题 给你一个数列{1,2,3,4,5,6},要求创建一颗二叉排序树(BST), 并分析问题所在. 上图BST存在的问题分析: 左子树全部为空,从形式上看,更像一个单链表。 插入速度没有影响 查询速度明显降低(因为需要依次比较), 不能发挥BST的优 阅读全文
摘要:
1.为什么要用二叉排序树 使用数组 数组未排序,优点:直接在数组尾添加,速度快。 缺点:查找速度慢. 数组排序,优点:可以使用二分查找,查找速度快,缺点:为了保证数组有序,在添加新数据时,找到插入位置后,后面的数据需整体移动,速度慢。 使用链式存储-链表 不管链表是否有序,查找速度都慢,添加数据速度 阅读全文
摘要:
1.基本介绍 赫夫曼编码是赫哈夫曼树在电讯通信中的经典的应用之一。 赫夫曼编码广泛地用于数据文件压缩。其压缩率通常在20%*~90%之间。 赫夫曼码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,称之为最佳编码。 2.原理剖析 1.定长编码 2.变长编码 3.赫夫曼编码 阅读全文
摘要:
1.版本控制 1.1什么是版本控制 版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。 实现跨区域多人协同开发 追踪和记载一个或者多个文件的历史记录 组织和保护你的源代码和文档 阅读全文
摘要:
1.基本介绍 给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。 赫夫曼树是带权路径长度最短的树,权值较大的结点离根较近。 路径和路径长度:在一棵树中,从一个结点往下可以达到的孩子或孙子结点之 阅读全文
摘要:
1.堆排序基本介绍 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏、最好的平均时间复杂度均为O(nlogn),它是不稳定排序; 堆是具有一下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆,注意:没有要求结点的左孩子的值和右孩子的值的大小关系。 阅读全文
摘要:
0.遗留问题(只实现中序,没有实现前序和后序) 1.为什么需要线索二叉树 答: 如上图所示,有些结点的左右指针并没有完全得到利用 为了使所有的指针都得到利用,线索二叉树是有效的解决办法。 2.线索二叉树基本介绍 n个结点的二叉链表中含有n+1个空指针{公式2n-(n-1)=n+1;2n表示总指针域数 阅读全文
摘要:
1.基本概念 从数据存储方式来看,数组存储方式和树的存储方式可以相互转换,即数组可以转换成树,树也可以转换成数组。 2.顺序存在二叉树的特点 顺序存储二叉树通常只考虑完全二叉树 第n个元素的左子结点为 2*+1(对应于数组的下标值) 第n个元素的右子结点为 2 * n + 2(对应于数组的下标值) 阅读全文