算法基础
文章平均质量分 75
deadpoet1900
这个作者很懒,什么都没留下…
展开
-
算法基础(1)关于时间复杂度计算之函数增长
算法是什么?简单的说就是一系列计算步骤,用来将输入的数据转换成输出的结果。这是个概念而已,具体的对算法的理解在以后的具体算法中领悟吧(啊。。。多么痛的领悟)首先,我觉得对于算法最先考虑的是时间复杂度,所以我们先从这方面开始吧。这篇算是数学基础吧,以后看解释算法的时间复杂度时更容易些。甚至自己分析是有个基本的概念和方法。好了闲话少说,言归正传(亲们时间紧张的话,这句前面的都可以不看哦)原创 2013-04-22 00:34:35 · 1691 阅读 · 2 评论 -
算法基础(3)分治策略之快速排序
快速排序是排序中的最佳实用选择,虽然在最坏情况下的时间复杂度为O(n^2), 但在随机输入的情况下,其时间复杂度为O(nlogn).一、快速排序也是基于分治策略,其三个步骤为:分解:将待排序数组A[p,r]分解为A[p,q]和A[q+1,r]两个数组,使得A[p,q]中的每个元素都小于A[q+1,r]中的每个元素。q值在分解中计算得到。解决:通过递归调用对两个子数组A[p,q]和A[q原创 2013-04-25 20:49:21 · 935 阅读 · 2 评论 -
递归算法详细分析(转)
原博地址:http://www.cnblogs.com/zhangqqqf/archive/2008/09/12/1289730.htmlC通过运行时堆栈支持递归函数的实现。递归函数就是直接或间接调用自身的函数。 许多教科书都把计算机阶乘和菲波那契数列用来说明递归,非常不幸我们可爱的著名的老潭老师的《C语言程序设计》一书中就是从阶乘的计算开始的函数递归。导致读过这本经书的同学们,看转载 2013-05-03 21:47:35 · 500 阅读 · 1 评论 -
算法基础(4)动态规划之最长子序列
一、动态规划的基本思想1.与分治相同的部分:将待求解的问题分解成若干子问题,先求子问题的解,再将这些子问题合并成原问题的解2.与分治不同的部分:分解的子问题互相之间并不独立,即子问题包含了公共的子子问题。动态规划算法将子子问题只计算一次,其结果保存在一个表格中,从而避免每次遇到都要重复计算。3.动态规划主要用于最优化问题,主要步骤如下:a.刻画最优解的结构;b.用递归的方式定义原创 2013-05-02 19:22:49 · 813 阅读 · 5 评论 -
算法基础(5) 贪心算法
1.贪心算法:贪心算法是通过一系列选择找到最优解,每一个决策点都是做一个在当时看来最优的选择,所以贪心算法不一定总是能找到最优解,但通常可以找到最优解。(敝人理解,找到局部最优解而非全局最优解)。2.适用于贪心算法问题具有的特点: 贪心选择性质:一个全局最优解可以通过贪心选择来表达。最优子结构:一个问题的最优解也包含了它的子问题的最优解。(一个问题是否具备这两个性质,都可以通过证明原创 2013-05-07 21:57:53 · 666 阅读 · 2 评论 -
算法基础(2)分治策略之归并排序
一、分治策略分治思想:将一个复杂的问题分解成若干子问题,子问题可以在分解成更小的问题,直至分解为可直接求解的基本问题。适用条件:1、原问题与子问题为同类问题(这样才可以递归);2、各子问题的解可以合并为原问题的解;3、各子问题间相互独立。解决步骤:分解(Divide)——解决(conquer)——合并(combine)算法复杂性:一个分治问题将原问题分为k个规模为n/m的子问题原创 2013-04-24 22:23:41 · 800 阅读 · 3 评论