冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。运作步骤如下: 冒泡 ...
分类:
编程语言 时间:
2018-09-22 14:36:10
阅读次数:
162
快速排序 上述的快速排序实现很好理解,就是每次遍历当前的arr,将比中间值小的放到left,大的放到right。这是前端通常的版本,但是这样的版本是有问题的。正常的我们说快排的时间复杂度平均和最好都是O(nlogn),最坏情况下是O(n^2),空间复杂度为O(nlogn)。这个代码中,空间复杂度为O ...
分类:
编程语言 时间:
2018-09-19 13:31:35
阅读次数:
154
一、前言 归并排序由冯?诺依曼于1945年在EDVAC上首次编程实现,归并排序(mergesort)的构思朴实却亦深刻,作为一个算法既古老又仍不失生命力。在排序算法发展的历史上,归并排序具有特殊的地位,它是第一个可以在最坏情况下依然保持O(nlogn)运行时间的确定性排序算法。 时至今日,在计算机早 ...
分类:
编程语言 时间:
2018-09-07 20:10:10
阅读次数:
213
[POI2017]Sabota? 题目大意: 一棵$n(n\le5\times10^5)$个结点的树,初始时有一个未知的黑点,其余全为白点。对于一个点,如果其子树中黑点所占比例超过$x$,则这整棵子树也都会变成黑点。求最小的$x$,使得最坏情况下,黑点的个数不会超过$k$。 思路: 树形DP。 $f ...
分类:
其他好文 时间:
2018-09-01 21:50:06
阅读次数:
130
红黑树是AVL树的另一变种,他也能在动态变化的过程中保持某种意义的平衡,对红黑树的操作最坏情况下也只有O(logN)的复杂度,而且下面我们会看到,对于插入而言我们有另外一种比AVL树更容易的实现方法,非递归的。在具体谈到技术细节之前,我们或许会有疑问:已经有AVL这种渐进复杂度很低的结构了,也能保持 ...
分类:
其他好文 时间:
2018-09-01 00:44:34
阅读次数:
405
二叉树的问题,这里主要关心一下时间复杂度。 先回忆一下求二叉树深度的问题,T(n) = 2T(n/2)+1 -> O(n) 本题 T(n) = 2T(n/2) + O(n) -> O(nlogn) 最坏情况是O(n^2) 可以继续优化,一旦发现子树不是平衡的,返回-1,最后只要判断 f(root)! ...
分类:
其他好文 时间:
2018-08-25 11:38:17
阅读次数:
103
AVL树得名于它的发明者。 AVL树是带有平衡条件的二叉查找树。这个平衡条件必须要容易保持,而且它须保证树的深度是O(logN)。 查找、插入和删除在平均和最坏情况下都是O(log n)。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。 AVL树本质上还是一棵二叉搜索树(因此读者可以看到我后 ...
分类:
其他好文 时间:
2018-08-23 12:06:17
阅读次数:
188
红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。 红黑树和AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能。 它虽然是复杂的,但它的最坏情况运行时间也是非常良好的,并且在实践 ...
分类:
其他好文 时间:
2018-08-22 22:00:54
阅读次数:
256
递归方法,逻辑简洁清晰。这个算法还是很重要的,需要重点记忆理解,面试经常考,与傅里叶变换等并称“20世纪十大算法”。 快速排序算法的平均时间复杂度是 O(nlogn),最坏情况时间复杂度是 O(n^2)。 ...
分类:
其他好文 时间:
2018-08-13 12:21:34
阅读次数:
156
文字描述 1 二叉树的顺序存储 用一组地址连续的存储单元自上而下,自左至右存储完全二叉树上的结点元素。 这种顺序存储只适用于完全二叉树。因为,在最坏情况下,一个深度为k且只有k个结点的单支树却需要长度为2k-1的一维数组。 2 二叉树的链式存储(二叉链表): 链表中的结点至少包含3个域:数据域,左指 ...
分类:
其他好文 时间:
2018-08-07 20:28:39
阅读次数:
181