随笔分类 - 算法
摘要:堆: 二叉堆数据结构是一种数组对象,可以被视为一棵完全二叉树 父节点:Parent(i) = i/2 左子节点:Left(i) = 2i 右子节点:Right(i) = 2i+1最大堆: 除了根以外的节点的值至多和父结点的值一样大,最大元素就在根节点最小堆: 相反堆排序算法:优先级队列: 快速排序的一个好的实现往往优于堆排序 优先级队列是一种用来维护由一组元素构成的集合S的数据结构,这一组元素中的每一个都有一个关键字key 一个最大优先级队列支持以下操作: 1 insert:插入 2 maximum:返回S中具有最大关键字的元素 3 extract-max:...
阅读全文
posted @ 2013-12-17 07:54
褐色键盘
摘要:次排序算法基于计算的一种比较网络模型,可以同时执行多个比较操作比较网络: 排序网络是总能对其他输入进行排序的比较网络 比较网络仅由线路和比较器构成 比较器是具有两个输入x和y以及两个输出x'和y'的一个装置,它执行下列函数: x'=min(x,y); y'=max(x,y); 我们把具有n个输入的比较网络画成一个由n条水平线和垂直伸展的比较器的组合。 运行时间:从输入线路接收到其值的时刻,到所有输出线路收到其值所话费的时间 深度: 比较网络的输入线路深度为0 比较器的输出线路的深度为:max(输入线路深度)+1 比较器的深度为其输出线路的深度 比较...
阅读全文
posted @ 2013-12-05 21:33
褐色键盘
摘要:在描述某一给定图G=(V,E)上的一个图算法的运行时间时,通常以图中的顶点数|V|和边数|E|来度量输入的规模用V[G]来表示一个图G的顶点集,用E[G]来表示其边集图的搜索技术是图算法领域的核心图的表示: 要表示一个图G=(V,E),有两种标准的方法,即邻接表和邻接矩阵,这两种表示法既可以用于有向图,也可以用于无向图 通常采用邻接表表示法 图G=(V,E)的邻接表表示由一个包含|V|个列表的数组Adj所组成,其中每个列表对应于V中的一个顶点,每个和V相连的边都包 含在Adj数组中, 如果G是一个有向图,则所有邻接表的长度之和为|E|, 如果G是一个无向图,所有邻接表的长度之和为2...
阅读全文
posted @ 2013-12-05 19:57
褐色键盘
摘要:可合并堆的数据结构,支持下面操作: 1 MAKE-HEAP:创建并返回一个不包含任何元素的新堆 2 INSERT:将结点x插入堆H中 3 MINIMUM:返回一个指向堆H中包含最小关键字的节点的指针 4 EXTRACT-MIN:将堆H中包含最小关键字的结点删除,并返回一个指向该结点的指针 5 UNION:创建并返回一个包含堆1和2中所有节点的新堆,同时1和2被这个操作删除 6 DECREASE-KEY:将新关键字值k赋给堆中的结点x 7 DELETE:从堆H中删除结点x一个二项堆由一组二项树所构成二项树: 是一种递归定义的有序树,二项树有以下的性质: 1 共有2的k次方个...
阅读全文
posted @ 2013-11-29 08:07
褐色键盘
摘要:B树是为磁盘或其他直接存取存储设备而设计的一种平衡查找树,许多数据库系统使用B树或B树的变形来存储信息B树与红黑树的不同在于,B树的结点可以有许多子女,从几个到几千个为什么针对磁盘设计的数据结构不同于针对随机存取的主存而设计的数据结构: 磁盘的读写速度慢,数据量大不能完全加载到内存中一颗B树T是具有如下性质的有根树(根为root[T]): 1 每个节点X有以下域: a n[x],当前存储在结点x中的关键字数 b n[x]个关键字本身,以非降序存放,因此key1[x]=2来表示 a 每个非根的结点必须至少有t-1个关键字,每个非根的内结点至少有t个子女,如果树是非空的,则根...
阅读全文
posted @ 2013-11-26 08:06
褐色键盘
摘要:贪心算法是使所做的选择看起来都是当前最佳的,期望通过所做的局部最优选择来产生出一个全局最优解贪心算法是通过做一系列的选择来给出某一问题的最优解,对算法中的每一个决策点,做一个当时最佳的选择贪心算法的步骤: 1 决定问题的最优子结构 2 设计出一个递归解 3 证明在递归的任一阶段,最优选择之一总是贪心选择,那么,做贪心选择总是安全的 4 证明通过做贪心选择,所有子问题(除一个以外)都为空 5 设计出一个实现贪心策略的递归算法 6 将递归算法转换成迭代算法也可以根据如下步骤设计贪心算法: 1 将优化问题转化成这样的一个问题,即先做出选择,再解决剩下的一个子问题 2 证明原问题总是有...
阅读全文
posted @ 2013-11-20 07:46
褐色键盘
摘要:和分治法一样,动态规划是通过组合子问题的解而解决整个问题的。分治法算法是指将问题划分成一些独立的子问题,递归地求解各子问题,然后合并子问题的解而得到原问题的解。动态规划适用于子问题不是独立的情况,也就是各子问题包含公共的子子问题。动态规划算法对每个子子问题只求解一次,将其结果保存在一张表中,从而避免每次遇到各个子问题时重新计算答案。 动态规划通常应用于最优化问题,此类问题可能有很多种可行解,我们希望找出一个具有最优值的解,可能存在多个取最优值的解 动态规划算法的设计可以分为如下4个步骤: 1 描述最优解的结构 2 递归定义最优解的值 3 按自底向上的方式计算最优解的值...
阅读全文
posted @ 2013-11-15 07:44
褐色键盘
摘要:如果一颗二叉查找树满足下面的红黑性质,则为一颗红黑树: 1 每个节点或是红的,或是黑的 2 根节点是黑的 3 每个叶节点是黑的 4 如果一个节点是红的,则它的两个儿子都是黑的 5 对每个节点,从该节点到其子孙节点的所有路径上包含相同数目的黑节点插入: 向一颗含n个节点的红黑树中插入一个新节点的操作可在O(lgn)时间内完成。 1 将一个节点Z插入树T内,就好像T是一棵普通的二叉查找树一样 2 将Z着为红色 3 为保证红黑性质能继续保持,调用一个辅助程序来对节点重新着色并旋转在插入过程中,那些红黑性质可能会被破坏: 性质1:不会 性质2:有可能,因为Z为红色,如...
阅读全文
posted @ 2013-11-14 06:51
褐色键盘
摘要:课时6 顺序统计 中值 同时找出最小值和最大值:先将一对输入元素互相比较,然后把较小者与当前最小值比较,把较大者与当前最大值比较。 randomized-select算法:查找数组中的第i小的元素 依靠快速排序,把数组分为2部分,看要查找的元素在哪个部分中,接着查找。 T(n)=Ο(n),在平均情况下,任何顺序统计量都可以在线性时间内得到 select算法:是一个最坏情况运行时间为Ο(n)的选择算法,基本思想是保证对数组的划分是个好的划分 1 将数组划分为n/5组,每组5个元素,最后一组由(n mod 5)个元素组成 2 寻找每组的中位数,插入排序 3 找出...
阅读全文
posted @ 2013-09-08 18:43
褐色键盘
摘要:课时3 分治法:二分查找算法:在一个已排序的数组中找到一个数 1:分:把这个数和数组的中间元素相比较 2:治:在一个字数组中递归 3:合并 T(n)=T(n/2)+Θ(1)=Θ(lgn);连乘问题:n个x相乘 1 偶数:x^n=x^(n/2)*x^(n/2) 2 奇数:x^n=x^(n-1/2)*x^(n-1/2)*x T(n)=T(n/2)+Θ(1)=Θ(lgn);课时4快速排序: 选取一个数,划分数组,让前面的比它小,后面的比它大最坏的情况:划分过程产生的两个区域分别包含n-1个元素和1个0元素的时候,如果算法每一次递归调用中都出现了这种不对称划分,T(n)=Θ(n^2)...
阅读全文
posted @ 2013-09-02 11:15
褐色键盘
摘要:课时1:在程序设计方面,什么是比性能更重要的?1 正确性 2 简洁 3 可维护性 4 程序员的时间成本5 健壮性 6 特性(功能)7 模块化 8 安全 9 用户友好为什么关注性能?1 性能的好与坏,直接决定着可行还是不可行2 算法是一种描述程序行为的语言,广泛应用于计算机科学领域,被所有的实践者所采用的理论语言,一种让程序最为简洁的思考方式。性能是基础insert on sort(插入排序)运行时间的问题: * 输入是否有序 * 输入规模:将输入的规模将其参数化,time=f(input size); * 运行时间的上限最需要关注的一种分析:最坏情况分析T(n)定义为输入规模为n时的最长...
阅读全文
posted @ 2013-08-29 20:18
褐色键盘

浙公网安备 33010602011771号