算法
文章平均质量分 74
刚入行的小白
这个作者很懒,什么都没留下…
展开
-
《算法导论》读书笔记--堆排序
预备知识: 堆通常被看做一个近似完全的二叉树,使用数组A[1...N]表示堆,数组中一个元素代表堆上一个结点,堆存在以下性质: 根节点:A[1] 父结点:Parent[i] = i/2 左子节点:Left[i] = 2i 右子节点:Right[i] = 2i + 1 数组长度为:A.length 数组中有效数据长度为:A.heap-size 堆分为最大堆和最小堆,在最大堆中 Par原创 2016-01-08 16:35:10 · 918 阅读 · 0 评论 -
《算法导论》读书笔记--快速排序
快速排序是最坏情况时间复杂度为O(n²),最优时间复杂度为O(nlgn),平均时间复杂度为O(nlgn)。 最坏情况出现在每一层划分子问题时,分别包含了n-1个元素和0个元素,此时的时间复杂度为O(n²),与插入排序相同;在数组已经有序时其时间复杂度依旧为O(n²),此时插入排序的时间复杂度为O(n)。 快速排序使用了分治思想,将数组A[p..r]划分为两个子数组A[p..q-1]和A原创 2016-01-10 14:08:22 · 340 阅读 · 0 评论 -
《算法导论》读书笔记--计数排序&基数排序
计数排序是用空间换取时间的算法,其假设n个输入元素中的每一个都在0到k区间内的一个整数,其中k为某个整数。当k=O(n)时,排序的运行时间为Theta(n)。 基本思想:对每一个输入元素x,确定小于x的元素个数。利用这一信息,就可以直接把x放到它在输出数组中的位置上了。 输入数组为A[1..n] 辅助数组:B[1..n]存放排序的输出,C[1..k]提供临时存储空间(存放A中数组元素值的出现原创 2016-01-11 19:59:29 · 446 阅读 · 0 评论 -
《算法导论》读书笔记--顺序量选择
在一个由n个元素组成的集合中,第i个顺序统计量是该集合中第i小的元素。 求数组A[p..r]的第i个顺序量: RADOMIZED_SELECT(A,p,r,i) 1 if p == r 2 return A[p] 3 q = RANDOMIZED_PARTITION(A,p,r)//随机化的快速插入排序,与插入排序不同的是,其“主元”的下标是调用random在原创 2016-01-14 15:02:49 · 340 阅读 · 0 评论