算法
文章平均质量分 56
institute
这个作者很懒,什么都没留下…
展开
-
算法导论学习笔记之二--分而治之(divide-and-conquer approach)
如果一个问题当它的规模缩小的时候,问题性质不变,并且问题的规模最小的时候简单可解,就可以采用divide-and-conquer 方法。divide-and-conquer 分以下4步进行:直接解答: 如果问题足够下,可以直接给出答案分解: 把问题分解成同样性质的几个子问题攻克:递归解决子问题。合并:把解决好的子问题合在一起,组成原有问题的答案# 假设问题为原创 2014-03-02 17:21:31 · 5089 阅读 · 0 评论 -
循环不变性(loop invariant)-证明算法的正确性的一种方法
循环不变性是在算法中循环的前后都保持不变的一种属性。利用循环不变性证明算法正确应该满足3个条件:(算法导论中提到的)初始条件: 首次循环前不变性成立保持条件: 一次循环前不变性如果成立,则下次循环开始前不变性成立终止条件: 循环结束后,循环不变性应能表明程序的正确性例1(正确的程序)def INSERTION_SORT(A): j = 1 while j原创 2014-03-02 04:21:45 · 15653 阅读 · 0 评论 -
算法导论学习笔记之三--如何理解和记忆master定理
Master 理论中的递归函数:T(n) = aT(n/b) + f(n), (a>=1, b >1)理解:aT(n/b)表示子项繁殖的速度, f(n)表示给定规模所需常规开销记忆:记实例不记公式实例1:merge排序算法复杂度nlog(n)递归函数: 实例2:普通矩阵乘法算法复杂度(n**3)递归函数:原创 2014-03-04 15:59:38 · 1331 阅读 · 1 评论 -
算法导论学习笔记之四--堆排序
def left(i): return i*2 + 1def right(i): return i*2 + 2def parent(i): return (i-1) / 2def max_heapify(A, i): l = left(i); r = right(i); if l A[i]: largest = l原创 2014-03-08 17:48:48 · 510 阅读 · 0 评论 -
算法导论学习笔记之五--同时得到最大和最小值复杂度3(n/2)
def get_min_max(l): if len(l) < 1: return None if len(l) == 1: return (l[0], l[0]) if l[0] < l[1]: min = l[0] max = l[1] else: min = l[1]原创 2014-03-09 01:13:05 · 827 阅读 · 0 评论