算法导论 学习笔记
m0_46233340
这个作者很懒,什么都没留下…
展开
-
第七章 快速排序
快速排序的描述使用分治的思想,分成三步分解:分成A[p…q-1]和A[q+1…r],此时A[q]已经被放在了正确的位置,A[q]:pivot解决:通过递归调用对子数组排序合并:因为子数组已经有序,故不需要合并操作QUICKSORT(A,p,r)if p < r q = PARTITION(A,p,r) QUICKSORT(A,p,q-1) QUICKSORT(A,q+1,r) PARTITION(A,p,r)x = A[r]i = p - 1for j = p to r原创 2021-03-31 15:08:02 · 88 阅读 · 0 评论 -
第六章 堆排序
堆排序时间复杂度:O(nlgn)O(n\lg n)O(nlgn),和归并排序一样堆一个近似完全的二叉树根节点A[1]A[i]的父节点A[⌊i/2⌋\lfloor i/2 \rfloor⌊i/2⌋]A[i]左子节点A[2i]A[i]右子节点A[2i+1]最大堆:子节点小于等于父节点,根节点最大,用于堆排序(一个叶子节点本身是一个最大堆)最小堆:子节点大于等于父节点,根节点最小,用于构造优先级队列n个节点的堆的高度 ⌊lgn⌋\lfloor \lg n \rfloor⌊lgn⌋维原创 2021-03-24 18:18:56 · 131 阅读 · 1 评论 -
第五章 概率分析和随机算法
5.1 雇佣问题HIRE-ASSISTANT(n)best = 0for i = 0 to n interview candidate i if candidate is better than candidate best best = i hire candidate i最坏情形分析应聘者质量按出现的次序严格递增如何求平均情况?随机算法5.2 指示器随机变量定义:I{A}={1如果A发生0如果A不发生I\lbrace A\rbrace=\begin{cases} 1\原创 2021-03-17 21:29:13 · 79 阅读 · 1 评论 -
第四章 分治策略
第四章 分治策略Divide-Conquer-Combine4.1 最大子数组问题FIND-MAX-CROSSING-SUBARRAY(A,low,mid,high) /* 接受数组A和下表low,mid,high为输入, 返回一个下标元组划定跨越种点的最大子数组的边界,并返回最大子数组中值的和 */left-sum = -∞sum = 0for i = mid downto low sum = sum + A[i] if sum > le原创 2021-03-17 13:30:21 · 61 阅读 · 0 评论 -
第三章 函数的增长
第三章 函数的增长渐进记号Θ记号:等于(即f(n) = Θ(g(n)),f(n) = g(n),下同)O记号:小于等于、最坏情况,时间复杂度上界Ω记号:大于等于o记号:小于ω记号:大于常用函数多项式指数对数阶乘多重函数(多重对数函数lg*n)斐波那契数...原创 2021-03-11 18:24:06 · 75 阅读 · 0 评论 -
第二章 算法基础
第二章 算法基础2.1 插入排序for j <- 2 to length[A] do key <- A[j] //将A[j]插入A[1...j-1] i = j - 1 while i > 0 and A[i] > key A[i + 1] <- A[i] i <- i - 1 A[i + 1] <- key正确性证明:循环不变式A[1…j-1]初始化:循环第一次迭代前为真保持:若循原创 2021-03-08 15:38:16 · 77 阅读 · 0 评论