数据结构
文章平均质量分 87
s
lucky_白杨
且行且珍惜
展开
-
几种流式数据处理方法的优缺点到TLV格式的演变
文章目录定长记录变长记录+分隔符定长长度+变长记录TLV格式通常需要处理类似字节流的流式数据,那么会面临一个问题就是当数据流源源不断的传输,如何知道数据流中从哪个点开始到那个点结束是一个完整的数据呢?通常有如下种方法:定长记录定义每个记录的固定长度。读方读取到了固定的长度之后,即认为获得了完整数据,每读取固定长度之后,就认定为获取了完整数据。缺点:固定长度必须取最大数据大小,如果其中多数的数据比较的小,那么会造成空间浪费。变长记录+分隔符记录长度不固定,定义一个符号作为记录的分隔符,并在每个原创 2020-10-21 22:44:15 · 3756 阅读 · 0 评论 -
排序算法-堆排序(Heap Sort)
堆排序法介绍堆排序是对简单选择排序法的改进算法,堆排序结合完全二叉树的性质,将序列和完全二叉树结合,每次比较都记录了比较结果,始终维护了每轮比较的最大值或者最小值。上面两个完全二叉树分别是大顶堆和小顶堆,我们发现大顶堆的每个父结点都比子结点要大,而小顶堆的父结点比每个子结点都要小。对于堆的定义是:完全二叉树的每个结点的值都要大于或等于其左右子结点的值,称为大顶堆;完全二叉树的每个结点的值都...原创 2020-01-31 00:07:49 · 1489 阅读 · 1 评论 -
排序算法-希尔排序(Shell Sort)
文章目录希尔排序法介绍希尔排序法算法时间复杂度其他排序法的比较希尔排序法介绍希尔排序法(Shell Sort)是D.L.Shell于1959年提出的一种排序算法,在这之前的排序算法如冒泡排序、简单选择排序、直接插入排序等算法的的时间复杂度都为O(n2)O(n^{2})O(n2),而希尔排序突破了这一时间复杂度。【原理】直接插入排序算法比冒泡排序和简单选择排序性能都要高,尤其在序列基本有序并...原创 2020-01-29 13:04:48 · 2042 阅读 · 1 评论 -
排序算法-直接插入排序
直接插入排序法的思路是:将一个关键字插入到一个已经排好序的有序列表中,得到一个新的有序列表。时间复杂度从最好情况来看,如{1,2,3,4,5,6}这样已经排好的序列,比较次数为n-1次,由于已经排好序了,所以不需要移动,时间复杂度为O(n)O(n)。从最坏情况来看,如{6,5,4,3,2,1}这样的逆序序列....原创 2020-01-12 17:16:00 · 2535 阅读 · 1 评论 -
排序算法-简单选择排序
简单选择排序法就是通过n-i次关键字比较,找到最小的关键字下标,最后在替换n-i下标和最小下标的值。简单排序的思想和冒泡排序的思想的区别是冒泡排序是相邻关键字两两比较,如果小,则直接替换,可能在一轮循环会进行多次值交换。而简单选择排序法是一轮循环找到最小关键字下标,最后进行最多一次替换。简单选择排序算法...原创 2020-01-09 23:17:03 · 3156 阅读 · 1 评论 -
排序算法-冒泡排序
假定需要对序列{9,3,8,5,2,7,4,1,6}做排序,最先想到的就是冒泡排序法,因为最简单。下面的排序算法使用Java来写。最简单的冒泡排序最简单的思路就是每一个关键字都和后面的关键字进行比较,如果大则交换,这样第一个位置的关键字在一次循环后一定变为最小值。代码如下: public static void main...原创 2020-01-09 01:47:07 · 1533 阅读 · 1 评论 -
二叉查找树
文章目录二叉查找树(二叉搜索树、二叉排序树)构造二叉查找树二叉查找树查找结点二叉查找树插入结点二叉查找树删除结点删除叶子结点删除只有左子树的结点删除只有右子树的结点删除同时有左右子树结点删除结点代码实现完整代码二叉查找树(二叉搜索树、二叉排序树)对于有序线性表出来说,查找效率非常高,但是对于插入、删除操作,需要对数据进行移动,所以效率就不怎么高了。那么对于这种问题,我们就可以利用二叉查找树来解...原创 2019-11-03 01:09:53 · 1046 阅读 · 1 评论 -
二叉树遍历算法
前言二叉树的遍历是指从根节点触发,按照某种次序依次访问二叉树中所有的节点。由于不同于线性结构,二叉树达到一个节点需要选择两个子节点的先后顺序,所有遍历方式有很多。二叉树遍历方法二叉树遍历方式有很多,所以如下介绍的遍历方式,我们约定从左往右进行遍历。我们需要遍历的树结构如下:下面的遍历算法用Python实现,不会Python的同学不用担心,因为算法逻辑很简单。先看下我们的节点对象的定...原创 2019-10-27 02:16:33 · 2574 阅读 · 1 评论 -
哈夫曼树(最优二叉树)
文章目录前言哈夫曼树(最优二叉树)定义与原理树的路径长度带权路径长度构造哈夫曼树哈夫曼树生成代码前言二叉树是树结构中的一种特殊形式,适用于折半查找、真假、对错等具有两种情况的事物进行建模。比如需要对学生考试得分评不及格、及格、中等、良好、优秀这几个模糊分数的评级,我们可以很快用如下的代码实现:if score < 60: print("不及格")elif score <...原创 2019-10-28 00:00:16 · 7646 阅读 · 1 评论