数据结构算法
yhc166188
路虽远,行则将至;事虽难,做则必成!
展开
-
红黑树RBTree原理(超易懂)
红黑树脑图目录文章目录红黑树的定义四点特征为什么红黑树是近似平衡的(1)首先,我们来看,如果我们将红色节点从红黑树中去掉,那单纯包含黑色节点的红黑树的高度是多少呢?(2)现在把红色节点加回去,高度会变成多少呢?基本思想旋转插入删除应用二叉查找树由于在频繁的动态更新过程中,可能会出现树的高度远大于 log2n的情况,所以就会导致各个操作效率下降,最坏的情况下就会退化为链表,变为O(n).很明...原创 2020-04-25 23:02:00 · 2154 阅读 · 0 评论 -
平衡二叉搜索树(AVL)总结(超易懂)
在二叉搜索树中,已经知道search、insert和remove等主要接口的运行时间均正比于树的高度。但是在最坏的情况下,二叉搜索树可能退化成列表,此时查找的效率会降至O(n)。因此,通常通过控制树高,来控制最坏情况下的时间复杂度。AVL树脑图对于节点数目固定的BST,越是平衡,最坏情况下的查找速度越快,如下图所示:二叉搜索树只有保持平衡时其查找效率才会高。AVL树的特征左子树...原创 2020-04-25 21:38:44 · 511 阅读 · 0 评论 -
数据结构和算法
1.O(n^2)排序算法之 选择、插入、冒泡、希尔排序 及 优化 选择排序 思想 首先在数组中找出第一名的位置(即最小的数字 1),将它与目前数组中第一名(即数字8)进行交换。此时数组中第一个位置已是最小数字,接着在其余位置中找寻最小数字,与其数组中目前的第二个位置进行交换。后面过程依次类推,直到剩下最后一个位置,已无需排序,已为最大值。 ...转载 2019-10-03 14:57:45 · 199 阅读 · 0 评论 -
字节、字、位、比特,这四者之间的关系是什么?
字节、字、位、比特之间的关系是:1位=1比特;1字=2字节;1字节=8位;1字=16位。1、位位是计算机存储的最小单位,简记为b,也称为比特(bit)计算机中用二进制中的0和1来表示数据,一个0或1就代表一位。位数通常指计算机中一次能处理的数据大小;2、比特比特(bit)是由英文BIT音译而来,比特同时也是二进制数字中的位,是信息量的度量单位,为信息量的最小单位;3、字节...转载 2019-10-03 11:30:02 · 1913 阅读 · 0 评论 -
o(1), o(n), o(logn), o(nlogn) 复杂度
在描述算法复杂度时,经常用到o(1), o(n), o(logn), o(nlogn)来表示对应算法的时间复杂度, 这里进行归纳一下它们代表的含义:这是算法的时空复杂度的表示。不仅仅用于表示时间复杂度,也用于表示空间复杂度。O后面的括号中有一个函数,指明某个算法的耗时/耗空间与数据增长量之间的关系。其中的n代表输入数据的量。比如时间复杂度为O(n),就代表数据量增大几倍,耗时也增大几倍。...原创 2018-07-23 10:02:06 · 7896 阅读 · 1 评论 -
深入剖析mmap-从三个关键问题说起
概述对于mmap,您是否能从原理上解析以下三个问题:mmap比物理内存+swap空间大情况下,是否有问题? MAP_SHARED,MAP_PRIVATE,MAP_ANONYMOUS,MAP_NORESERVE到底有什么区别? 常听说mmap的读写比传统的系统调用(read, write)快,但真的是这样子吗?原因是什么?要解决这些疑问,可能还需要在操作系统层面多了解。本文将尝试通过...转载 2019-09-10 09:41:03 · 1042 阅读 · 0 评论 -
各种排序算法的稳定性和时间复杂度小结
选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。关于排序稳定性的定义通俗地讲就是能保证排序前两个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同。在简单形式化一下,如果Ai = Aj,Ai原来在位置前,排序后Ai还是要在Aj位置前。冒泡法:这是最原始,也是众所周知的最慢的算法了。他的名字的由来因为...转载 2019-06-15 14:03:56 · 986 阅读 · 0 评论 -
基本数据结构――堆的基本概念及其操作
堆是一种完全二叉树结构,这意味着它具有完全二叉树的性质,其中一点如下所示:设完全二叉树的一元素编号为i,1 <= I <= n,n为元素总数。有以下关系成立:1、如果i=1,则该元素为二叉树的根节点,若i>1,则其父节点的编号为(int)(i/2);(去除余数)2、如果2*i > n,则该元素无左孩子。否则,其左孩子的编号为2 * i;3、如果1 + 2*i &g...转载 2019-06-12 16:16:40 · 467 阅读 · 0 评论 -
c++ STL vector堆(heap)操作
vector是一个动态数组当你需要多少空间时就会自动分配多少空间给你先加头文件 #include<vector> 声明: vector<参数> 变量名 然后要什么类型就在参数里写什么类型这里我们只需要用int就行 vector<int> a这样我们就有一个可以存放数字的动态数组a了,接着学习几个基本操作加入数据 ...转载 2019-06-12 15:33:51 · 2646 阅读 · 0 评论