算法导论自学1-2章

AKamai???????????????

上界(最坏情况分析worst-case-analysis):对用户承诺

average case:T(n)是所有输入的加权平均值,期望时间

bast case(假象):有些算法对特定输入的时间时间更短,但是平均时间和上界可能很长

速度:计算机(速递,相对速度,绝对速度)

渐进分析:忽略依赖于计算机的东西,

关注时间的 -增长- 情况

插入排序(n*n):n小很快,

归并排序(n lg n):n大于30左右就快于插入

递归树

我的归并排序http://my.oschina.net/u/1384842/blog/307885

时间: 2024-10-14 09:29:14

算法导论自学1-2章的相关文章

【算法导论】第五章

开始学习算法导论,看书+笔记+做课后题目+做OJ 计划是每天一个小时看书+写笔记 挑些课后题目来做,然后一道OJ ---------------------------------------- 今天看随机算法与概率分布,又复习了一下概率论 - - 讲到了两个随机算法:其中一个是随机分布优先度,然后按照优先度排列,能证明每一种排列的概率是1/n! ,符合随机性. 第二中是交换法,for i <- 1 to n swap (a[i] , a[random(i,n)]) 也证明了随机性. 这章的收获

算法导论第十二章__二叉搜索数

package I第12章__二叉搜索树; //普通二叉树 public class BinaryTree<T> { // -----------------------数据结构--------------------------------- private int height = 0; private Node<T> rootNode; class Node<T> { T t; int key; Node left; Node right; public Node

算法导论第十五章动态规划

概述: 1.动态规划是通过组合子问题的解而解决原问题的. 2.动态规划适用于子问题不是独立的情况,也就是各子问题的包含公共的子子问题. 3.动态规划对每个子问题只求解一次,将其结果保存在一张表中. 4.动态规划的设计步骤:a.描述最优解的结构b.递归定义最优解的值c.按自底向上的方式计算最优觖的值d.由计算出的结构构造一个最优解 15.1钢条切割 钢条切割问题:给定定长的钢条和价格表,求切割方案,使得收益最大.如果n英寸的钢条的价格足够大,则不需要切割. 代码如下: //朴素递归求解钢条切割收益

算法导论第十九章 斐波那契堆

<算法导论>第二版中在讨论斐波那契堆之前还讨论了二项堆,但是第三版中已经把这块的内容放到思考题中,究极原因我想大概是二项堆只是个引子,目的是为了引出斐波那契堆,便于理解,而且许多经典的算法实现都是基于斐波那契堆,譬如计算最小生成树问题和寻找单源最短路径问题等,此时再把二项堆单独作为一章来讲显然没有必要.类似的堆结构还有很多,如左倾堆,斜堆,二项堆等,下次我打算开一篇博客来记录下它们的异同点. 一.摊还分析(第十七章) 这些高级的数据结构的性能分析一般是基于一个技术——摊还分析,可以理解成一种时

算法导论第十二章 二叉搜索树

一.二叉搜索树概览 二叉搜索树(又名二叉查找树.二叉排序树)是一种可提供良好搜寻效率的树形结构,支持动态集合操作,所谓动态集合操作,就是Search.Maximum.Minimum.Insert.Delete等操作,二叉搜索树可以保证这些操作在对数时间内完成.当然,在最坏情况下,即所有节点形成一种链式树结构,则需要O(n)时间.这就说明,针对这些动态集合操作,二叉搜索树还有改进的空间,即确保最坏情况下所有操作在对数时间内完成.这样的改进结构有AVL(Adelson-Velskii-Landis)

算法导论笔记第6章 堆和堆排序

堆排序结合了插入排序和归并排序的有点:它空间复杂度是O(1), 时间复杂度是O(nlgn). 要讲堆排序,先讲数据结构"堆" 堆: 堆是用数组来存放一个完全二叉树的数据结构.假设数组名是A,树的根节点存放在A[1].它的左孩子存放在A[2],右孩子存放在A[3] 即:对于某个下标位i的节点,它的左孩子是A[2i],  右孩子是A[2i+1].  父节点是A[i/2] PARENT(i) return ?i/2? LEFT(i) return 2i RIGHT(i) return 2i

《算法导论》第六章 练习题 Exercise

6.1-1 在高度为 h 的堆中,元素最多有 2h+1 - 1 个,最少有 2h  个.注意算法导论里的高度是指深度,从 0 开始而不是从 1 开始. 6.1-2 这很好想,但是不好证明. 由已知高度为 h 的堆,它的元素个数满足 2h   <= n <= 2h+1 - 1 ,解出 lg(n+1) - 1 <= h <= lgn ,但是它不够"合理",因为当 n = 2h+1-1 时,n 等于 2的幂 - 1,此时 lg(n+1) -1 = ?lgn? ,所以 

【算法导论】第六章、堆排序

基本过程: 1.保持最大堆的性质:假设两个子堆都满足,只需要根节点依次换下去,复杂度O(lg n) 2.初始化堆:后半段都是叶子,在前半段从后往前,依次执行上述最大堆性质的操作,名义复杂度是O(n lg n),但是有更精确的计算, 在高度为h的节点为O(h), 因此为 n\sigma (h / 2^h),其复杂度为O(n).(思想是高层复杂度才高,指数衰减,而复杂度增长是lg级别,因此被dominate掉了) 堆排序算法:先建最大堆,每次把顶上的位置与合适的位置互换,然后执行过程1, 共执行n次

《算法导论》 - 第6章 - 堆排序 - 习题解答

序 GitHub 见solution.txt 6.1 堆 6.1-1 在高度为h的堆中,最多元素为2(h+1)?1个,最少元素有 2h+1 个 6.1-3 最大堆的特性是除了根结点外的每个结点都有A[PARENT(i)]>=A[i]故,在一个最大堆的某颗子树中最大元素必然位于该子树的根上. 6.1-4 根据最大堆的性质,任何子树的子结点都小于根节点,故整棵树的最小元素必然位于堆的最底层或者倒数第二层的叶子结点. 6.1-5 不一定,是最小堆也可能是最大堆 6.1-6 不是,画出相应堆结构发现元素