摘要:1. 定义分三种:先序遍历:先访问根节点,然后是左孩子,然后是右孩子(根,左,右)中序遍历:左,根,右后序遍历:左,右,根层次遍历:从根节点开始,从上至下逐层遍历,同一层中,按从左至右顺序遍历2. 递归解法树表现为一种链表结构,链表问题大都可以采用递归实现。树更是常常有递归解法。先、中、后遍历的递归...
阅读全文
随笔分类 - algorithm
摘要:1. 定义分三种:先序遍历:先访问根节点,然后是左孩子,然后是右孩子(根,左,右)中序遍历:左,根,右后序遍历:左,右,根层次遍历:从根节点开始,从上至下逐层遍历,同一层中,按从左至右顺序遍历2. 递归解法树表现为一种链表结构,链表问题大都可以采用递归实现。树更是常常有递归解法。先、中、后遍历的递归...
阅读全文
摘要:1. 定义对表达式的不同记法,区别在于 运算符相对操作数的位置:中缀:运算符在操作数中间:如(3 + 4) × 5 - 6。 人习惯的表达方式前缀:运算符在操作数之前:如- x + 3 4 5 6。 计算机方便操作的方式:从右至左数据入栈,遇到操作符,弹出栈顶两个数运算,并将结果入栈后缀:运算符在操...
阅读全文
摘要:1. Problem代码实现表达式运算。2. Solution2.1 中缀表达式计算中缀表达式即通常所见的算术表达式,如(1+2)*3-4当前要参与运算的:两个数,一个操作符。当前两个数可以直接运算的条件:操作符是*或/,或下一个操作符不是*或/否则,应该更新第二个数,即将其与接下来的数进行乘除运算...
阅读全文
摘要:转自:http://blog.chinaunix.net/uid-20773165-id-1847742.html1.稳定性比较插入排序、冒泡排序、二叉树排序、二路归并排序及其他线形排序是稳定的选择排序、希尔排序、快速排序、堆排序是不稳定的2.时间复杂性比较插入排序、冒泡排序、选择排序的时间复杂性为...
阅读全文
摘要:1、二分查找常见错误:死循环:循环体外的初始化条件,与循环体内的迭代步骤, 都必须遵守一致的区间规则,也就是说,如果循环体初始化时,是以左闭右开区间为边界的,那么循环体内部的迭代也应该如此.如果两者不一致,会造成程序的错误.溢出:middle=left+(right-left)/2终止条件:一般来说...
阅读全文
摘要:转自:http://blog.csdn.net/mayao11/article/details/7444586动态规划英文名Dynamic Programming,这个名称总让人有一种时曾相识的感觉,可能是因为容易和“线性规划”之类的概念搞混。 首先,适用动态规划的问题十分广泛和常见——地图路...
阅读全文
摘要:http://baike.baidu.com/link?url=TG_aVjVWoeLX9DN4h-BaGV6f8eqZyRqxaDLWkEhxtdSSF5NMrRCPScN2UpZntpL5VuyYNZ-St_Vzxku63hvrWahttp://www.cnblogs.com/kkgreen/archive/2011/06/10/2077923.htmlhttp://blog.csdn.net/sworder_001/article/details/1297481http://blog.sina.com.cn/s/blog_7121ea680100sfsg.htmlhttp://www.x
阅读全文
摘要:1、概念好算法:Edmonds与1975年提出:具有多项式时间(O(nk)的算法为好算法。P类问题:存在多项式时间算法的问题。如:货郎问题、调度问题、最大团问题、最大独立集问题、Steiner树问题、背包问题、装箱问题。NP:( Non-Deterministic Polynomial ),多项式非确定性问题。可以在多项式时间内验证一个非确定性算法给出的解是否是正解。如:梵塔问题、推销员旅行问题。NP完全问题:该问题的所有可能答案,都可以在多项式时间内进行正确与否的验算。SAT问题:(satisfiability)可满足性问题。2、NP完全问题的特征NP完全问题是否存在有效算法是未知的。如果N
阅读全文
摘要:1、思想采用分治法:将原问题分解成n个规模较小而结构与原问题相似的子问题;递归地解决这些子问题;合并其结果,即得解。2、伪代码分很简单,就是把n个元素分成n/2个元素的子序列。重点是合并,为了避免检查是否每个堆都是空的,我们在每一堆的底部放一个哨兵,它包含一个特殊的值∞。合并的伪代码如下: 1 //...
阅读全文
摘要://插入排序伪代码1 INSERTION-SORT(A)2 for( j=2; j0 && A[i]>key )7 do A[i++] = A[i];8 i--;9 A[i+1] = key;/...
阅读全文
摘要:1、定义算法就是一系列的计算步骤,用来将输入数据转换为输出结果。2、算法的共同特征1)有很多候选的解决方案,其中大部分不是我们所需要的。2)有着实际的应用。如最短路。3、章节框架1)伪代码描述 2)证明算法正确性(循环不变式) 3)时间效率分析3.1 循环不变式有三个性质:1)初始化:它在循环的第一轮迭代开始之前,应该是正确的。2)保持:如果在循环的某一次迭代开始之前它是正确的,那么,在下次迭代开始之前,它也应该保持正确。3)终止:当循环结束时,不变式给了我们一个有用的性质,它有助于表明算法是正确的。3.2 算法的时间分析算法的运行时间:指在特定输入时,所执行的基本操作数(或步数)一般我们..
阅读全文
摘要:1、定义分支定界法(branch and bound)是一种求解整数规划问题的最常用算法。这种方法不但可以求解纯整数规划,还可以求解混合整数规划问题。2、算法步骤第1步:放宽或取消原问题的某些约束条件,如求整数解的条件。如果这时求出的最优解是原问题的可行解,那么这个解就是原问题的最优解,计算结束。否则这个解的目标函数值是原问题的最优解的上界。第2步:将放宽了某些约束条件的替代问题分成若干子问题,要求各子问题的解集合的并集要包含原问题的所有可行解,然后对每个子问题求最优解。这些子问题的最优解中的最优者若是原问题的可行解,则它就是原问题的最优解,计算结束。否则它的目标函数值就是原问题的一个新的上界
阅读全文
|