首页 > 编程语言 > 详细

Algorithm——何为算法?

时间:2017-03-05 15:55:34      阅读:250      评论:0      收藏:0      [点我收藏+]

摘自:https://zh.wikipedia.org/wiki/算法

  在数学和计算机科学/算学之中,算法/演算法/算则法(Algorithm)为一个计算的具体步骤,常用于计算、数据处理和自动推理。精确而言,算法是一个表示为有限长列表的有效方法。算法应包含清晰定义的指令用于计算函数。

  算法中的指令描述的是一个计算,当其运行时能从一个初始状态和初始输入(可能为空)开始,经过一系列有限而清晰定义的状态最终产生输出并停止于一个终态。一个状态到另一个状态的转移不一定是确定的。随机化算法在内的一些算法,包含了一些随机输入。

  算法的核心是创建问题抽象的模型和明确求解目标,之后可以根据具体的问题选择不同的模式和方法完成算法的设计。

  简而言之,算法就是用来解决一个特定任务的一系列步骤.

  一个有效的算法包含五个重要特性:

  • 输入项(Input):必须有零个或以上的输入
  • 输出项(Output):应有一个或以上输出量,输出量是算法计算的结果。
  • 有限性(Finiteness):如果你设计的算法永无休止地尝试解决问题,那么它是无用的。
  • 明确性(Definiteness):算法的每一步都必须准确定义,在任何场景下指令都应当没有歧义。
  • 有效性(Effectiveness):又称可行性。一个算法被设计用以解决某个问题,那么它就应当能解决这个问题,并且仅仅使用纸和笔就能证明该算法是收敛的。

  还有一个要点需要知道,算法不仅仅应用在计算机科学,同时也在数学领域中使用。实际上,计算机科学中的算法是由数学模型推导而成的,

  算法在中国古代文献中称为“术”,最早出现在《周髀算经》、《九章算术》。要说到最早的算法,就要追朔到公元前300年欧几里得《几何原本》中的辗转相除法。

算法的评定

   同一个问题有多种解法,而一个算法的质量的优劣将影响算法的速度,算法评定用于选择最优算法。一个算法的评定主要有时间复杂度空间复杂度去考虑。

时间复杂度

  算法的时间复杂度就是指算法完成所需要消耗的时间。一般来说,计算机算法是问题规模n 的函数f(n),算法的时间复杂度也因此记做

技术分享

  算法执行时间的增长率与f(n) 的增长率正相关,称作渐近时间复杂度(Asymptotic Time Complexity),简称时间复杂度。

  常见的时间复杂度有:常数阶O(1),线性阶O(n),对数阶O(logn),线性对数阶O(n logn),指数阶O(nk)……随着问题规模n的不断增大,上述时间复杂度不断增大,算法的执行效率越低。

  也有一种特殊的时间复杂度,叫做非确定性多项式时间(NP),所谓的非确定性是指:用极大的数量去解决来达成多项式时间解决的问题。有一个典型的例子,就是输出n个元素的全排列,是一个NP-hard问题(有兴趣的可以查看NP(复杂度))。

空间复杂度

  算法的空间复杂度是指算法需要消耗的内存空间。其计算和表示方法与时间复杂度类似,一般都用复杂度的渐近性来表示。同时间复杂度相比,空间复杂度的分析要简单得多。

个人见解

  个人认为,算法的核心它的思想。从问题中寻找关键点,制定解决方案,最后到优化这一系列步骤中都是有选择的。大部分刚开始学算法的技术人员,似乎都觉得在实际中没有什么用处。但实际上,大部分算法之间是有关联的。

  例如堆排序与二分查找,都是由一次判断而排除了一些的不可能成立或不需要的判断。举个例子,当TestA()成立时TestB()TestC()才有可能成立,那么当TestA()不成立时,TestB()TestC()就可以跳过不判断了,这就是减少了赘余的判断了。

  所以遇见毫无思路的题目,不是把每一种算法都想一遍,看看是否适用,而是用纸把常规的解题方法写下,或者暴力的方法,寻找其中的规律,再套用算法,才是学会算法。

  记住:懂了不是会,会用才算对,

Algorithm——何为算法?

原文:http://www.cnblogs.com/Bita/p/6501454.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!