什么是数据结构?
严格定义是:数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及他们之间的关系和操作等的学科。
数据结构也就是类似表、树、图、集合,相互之间一种或多种特定关系的数据的集合。二元组(D,S)D代表数据集,S是D上的关系。有数据,有数据之间的关系,这就是数据结构。
什么是数据类型?
一个值的集合以及定义在这个值的集合上的一系列的操作。Int float 结构体,对象都是的。
抽象数据模型ADT是指一个数学模型以及定义在该模型上的一组操作。(D,S,P)P是D上的操作。
什么是算法?
算导的定义是算法是定义良好的计算过程,取一个或一组值作为输入,然后产生一个或多个输出。算法就是一系列的计算步骤,用来将输入数据转化为输出数据。算法也是一个工具,用来解决简单或者复杂问题的方法。
基本性质:
1 有穷性。必须在有限的时间内结束。
2正确性.没有二义性,每个步骤都有确切的含义。任何时候,相同的输入都会等到相同的输出。
3可行性。算法的每个操作必须是可以实现的运算过程。
4输入。0个或者多个输入。
5输出。至少有1个输出,没有输出的算法是毫无意义的;(为什么呢,有些算法不是没有返回值什么的吗?不要这样理解,算法必然有输出,比如排序,dp,都是会有输出的,因为要解决问题。输入可以初始化,0个。)
Wiki:
算法中的指令描述的是一个计算,当其运行时能从一个初始状态和(可能为空的)初始输入开始, 经过一系列有限而清晰定义的状态最终产生输出并停止于一个终态。一个状态到另一个状态的转移不一定是确定的。随机化在内的一些算法,包含了一些随机输入。
算法的应用领域是很广泛的,可以解决很多的问题,各种领域的。
算法的核心是创建问题抽象的模型和明确求解目标,之后可以根据具体的问题选择不同的模式和方法完成算法的设计。
常用设计模式
完全遍历法(穷举法)和不完全遍历法: 在问题的解是有限离散解空间,且可以验证正确性和最优性时,最简单的算法就是把解空间的所有元素完全遍历一遍,逐个检测元素是否是我们要的解。这是最直接的算法,实现往往最简单。但是当解空间特别庞大时,这种算法很可能导致工程上无法承受的计算量。这时候可以利用不完全遍历方法——例如各种搜索法和规划法——来减少计算量。
分治法:
分治法是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这种求解思路带来的好处之一是便于进行并行计算。
动态规划法:
动态规划是一种在数学和计算机科学中使用的,用于求解包含重叠子问题的最优化问题的方法。其基本思想是,将原问题分解为相似的子问题,在求解的过程中通过子问题的解求出原问题的解。动态规划的思想是多种算法的基础,被广泛应用于计算机科学和工程领域。动态规划程序设计是对解最优化问题的一种途径、一种方法,而不是一种特殊算法。
贪心算法:
贪心算法是一种对某些求最优解问题的更简单、更迅速的设计技术。用贪婪法设计算法的特点是一步一步地进行,常以当前情况为基础根据某个优化测度作最优选择,而不考虑各种可能的整体情况,它省去了为找最优解要穷尽所有可能而必须耗费的大量时间,它采用自顶向下,以迭代的方法做出相继的贪心选择,每做一次贪心选择就将所求问题简化为一个规模更小的子问题, 通过每一步贪心选择,可得到问题的一个最优解,虽然每一步上都要保证能获得局部最优解,但由此产生的全局解有时不一定是最优的,所以贪婪法不要回溯。 当问题的整体最优解不是(或无法证明是)由局部最优解组成,且对解的最优性没有要求的时候,可以采用的一种方法。
回溯法:
回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”
线性规划法:是目标函数和约束条件都是线性的最优化问题。
简并法: 把一个问题通过逻辑或数学推理,简化成与之等价或者近似的、相对简单的模型,进而求解的方法。
递推法:递推算法是一种用若干步可重复的简运算(规律)来描述复杂问题的方法.
递归法 :
程序调用自身的编程技巧称为递归( recursion)。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。
迭代法:
迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法(或者称为一次解法),即一次性解决问题。迭代法又分为精确迭代和近似迭代。“二分法”和“牛顿迭代法”属于近似迭代法。
分枝界限法:
分支定界法的基本思想是对有约束条件的最优化问题的所有可行解(数目有限)空间进行搜索。该算法在具体执行时,把全部可行的解空间不断分割为越来越小的子集(称为分支),并为每个子集内的解的值计算一个下界或上界(称为定界)。在每次分支后,对凡是界限超出已知可行解值那些子集不再做进一步分支。这样,解的许多子集(即搜索树上的许多结点)就可以不予考虑了,从而缩小了搜索范围。这一过程一直进行到找出可行解为止,该可行解的值不大于任何子集的界限。因此这种算法一般可以求得最优解。
穷举法:
穷举法,或称为暴力破解法,其基本思路是:对于要解决的问题,列举出它的所有可能的情况,逐个判断有哪些是符合问题所要求的条件,从而得到问题的解。它也常用于对于密码的破译,即将密码进行逐个推算直到找出真正的密码为止。 同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。一个算法的评价主要从时间复杂度和空间复杂度来考虑。 1时间复杂度(要高效率) 算法的时间复杂度是指执行算法所需要的计算工作量。一般来说,计算机算法是问题规模n 的函数f(n),算法的时间复杂度也因此记做。T(n)=Ο(f(n))因此,问题的规模n 越大,算法执行的时间的增长率与f(n) 的增长率正相关,称作渐进时间复杂度(Asymptotic Time Complexity)。 2空间复杂度(要低存储量需求) 算法的空间复杂度是指算法需要消耗的内存空间。其计算和表示方法与时间复杂度类似,一般都用复杂度的渐近性来表示。同时间复杂度相比,空间复杂度的分析要简单得多。 3.正确性 算法的正确性是评价一个算法优劣的最重要的标准。正确是分很多层次的,一般只要对典型苛刻带有刁难的输入能够满足得到正确的结果即可。。要测试所有的输入是不现实的。 4.可读性 算法的可读性是指一个算法可供人们阅读的容易程度。写出来的代码不仅仅是给机器看的,也是要给人看的。可读性好可以帮助别人理解算法,更好的交流。 5.健壮性 健壮性是指一个算法对不合理数据输入的反应能力和处理能力,也称为容错性。 算法也是一种技术。 即使是计算机无限快,存储器是免费的,我们仍然需要算法来解决我们需要的问题。而不仅仅是空间和时间。计算机的整体性能都要靠算法,而不仅仅是硬件。好的硬件也需要好的算法来设计。GUI图形库也需要算法。网络技术也需要。比如网络路由的寻找路由的算法。PS:基本算法
枚举搜索深度优先搜索广度优先搜索启发式搜索遗传算法数据结构的算法数论与代数算法计算几何的算法凸包算法图论的算法哈夫曼编码树的遍历最短路径算法最小生成树算法最小树形图网络流算法匹配算法动态规划其他数值分析加密算法排序算法检索算法随机化算法
转载请注明出处http://blog.csdn.net/sustliangbo/article/details/9234613

被折叠的 条评论
为什么被折叠?



