算法导论学习
「已注销」
学生
展开
-
解释为什么“算法A的运行时间至少是O(n^2)“这一表述是无意义的?
假设运行时间为T(n). T(n) >= O(n^2) 意味着对于某些属于集合O(n^2)的函数f(n), . 都有T(n) >=f(n) 然而,对于任一n, g(n) = 0 都属于该集合, 同时只要T(n) 为非负数既满足条件, 因此该表述是无意义的. ...原创 2022-02-11 00:07:31 · 597 阅读 · 0 评论 -
证明:对于任意实常量a和b. 其中b > 0, 有
为了证明 , 我们需要找到存在常量c1, c2, n0 > 0 , 使得对于所有的 n >= n0, 满足不等式 0 <= c1 * (n ^ b) <= (n + a) ^ b <= c2 * (n ^ b) 我们知道: 当 |a| <= n: n + a <= n + |a| <= 2n 另外: 当 |a| <= n/2: n + a >= n - |a| >= n / 2 因此: 当 n >...原创 2022-02-10 23:52:09 · 921 阅读 · 0 评论 -
逆序对问题
假设A[1..n]是一个有n个不同数的数组.若i<j且A[i]>A[j], 则对偶(i, j)称为A的一个逆序对. a.列出数组<2, 3, 8, 6, 1>的五个逆序对 b.由集合{1, 2, ..., n}中的元素构成的什么数组具有最多的逆序对? 它有多少逆序对? c.插入排序的运行时间与输入数组中逆序对的数量之间是什么关系? d.给出一个确定在n个元素的任何排序中逆序对数量的算法,最坏情况需要的时间 a.逆序对是(1, 5),(2, 5),(3, 4),(3, 5原创 2022-02-10 20:08:47 · 947 阅读 · 0 评论 -
证明二分查找的最坏情况运行时间为lgn
二分查找程序需要一个已经排好序的数组A, 所需查找目标值v和我们查找v所在的数组范围[low..high].程序通过将目标值v与数组目标范围中点值进行比较,从而排除一半的范围. 我给出迭代版本和递归版本的伪代码, 每一个版本如果找到了目标值就返回目标值在数组的下标i, 如果没找到则返回NIL. 最开始的调用应该有4个参数 A, v, 1, n. (伪代码第一个元素从1开始). 迭代版本: iterative-binary-search(A, v, low, high) while low &l原创 2022-02-10 19:19:44 · 812 阅读 · 0 评论 -
选择排序分析
伪代码如下: selection-sort(A) n = A.length for j = 1 to (n-1) smallest = j for i = j + 1 to n if A[i] < A[smallest] smallest = i exchange A[j] with A[smallest] 因为子数组A[1..j-1]是已经完成排序,同时这j-1个数是整个数组A[1...n]中最小的j-1个数,因此满足循环不变式.原创 2022-02-10 18:33:41 · 409 阅读 · 0 评论