阿里云服务器ECS    
弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新 [咨询更多]
阿里云存储OSS
简单易用、多重冗余、数据备份高可靠、多层次安全防护安全性更强、低成本 [咨询更多]
阿里云数据库RDS
稳定可靠、可弹性伸缩、更拥有容灾、备份、恢复、监控、迁移等方面的全套解决方案 [咨询更多]
阿里云安全产品
DDoS高防IP、web应用防火墙、安骑士、sll证书、态势感知众多阿里云安全产品热销中 [咨询更多]
阿里云折扣优惠    
云服务器ECS、数据库、负载均衡等产品新购、续费、升级联系客服获取更多专属折扣 [咨询更多]
如何表达算法
2020-6-18    点击量:
  如何表达算法?表达算法的方法多种多样,例如自然语言、伪代码、流程图、编程语言、动态图表、控制表等等。严格地说,算法是对特定问题求解步骤的一种描述,是指令的有限序列。一般地,一个问题的算法并不唯一,可能有很多种,一个给定的算法解决一个特定的问题。
  使用自然语言表达算法不够清晰,因此很少用于复杂或技术算法
  使用自然语言表达算法不够清晰,因此很少用于复杂或技术算法。伪代码、流程图、drakon图和控制表是表达算法的结构化方法,因为与自然语言相比,它们可以避免许多歧义。编程语言旨在以可由计算机执行的形式表达算法。
  
  在计算机系统中,算法是由软件开发人员以他们选择的任何编程语言编写的逻辑。但是,在设计算法时,我们需要记住一些规则。其中包括:
  
  输入:算法至少需要一个或多个输入值。如果没有给出输入,那么算法将产生什么输出呢?
  
  输出:算法至少应产生一个输出。如果没有产生任何结果,则无需设计算法。
  
  效率:算法应该保证高效利用计算和内存资源。产生的输出应该又正确又快。
  
  简单性:算法不应过于复杂。
  
  可扩展性:算法必须能够在不更改核心逻辑的情况下进行扩展。
  
  有限性:算法必须在有限步骤后终止。假设输入错误的情况下,算法在第一步就终止,我们将永远无法得知算法有什么问题。而且,算法也不能陷入无限循环。
  

  不依赖于编程语言:算法必须与语言无关,也就是说,它必须是可以用任何一种语言都可以实现的简单指令,但是无论任何语言,输出都应当相同。

为了测试这个算法

  下面,我们来构建一个简单的算法:两个数字的加法(且满足上述要求)。
  
  第1步:开始;
  
  第2步:声明变量num1,num2和sum;
  
  第3步:读取值num1和num2;
  
  第4步:将num1和num2相加,然后将值赋给sum。
  
  第5步:显示和;
  
  第6步:停止。
  
  下面,为了测试这个算法,我们使用一种编程语言来实现它,我选择用Java语言来实现,你可以任意选择其他语言。
  表达算法为了测试这个算法
  输出如下:
  
  表达算法
  
  我们的算法运作良好,且满足上述要求。
  
  算法必须高效。算法的效率取决于时间和空间。一个好的算法占用的时间更少,占用的空间也更少,我们无法时刻兼顾两者。如果减少时间,则则空间可能会增加,反之亦然。因此,我们必须妥协一方。算法的空间复杂度表示算法运行时占用或需要的总空间。时间复杂度是指算法花完成任务所需的操作数。以最少操作数执行任务的算法就是最有效的算法。此外,算法花费的时间还取决于计算机的计算速度,但是在我们考虑算法的效率率时,通常不会考虑这些外部因素。衡量算法效率的一种方法是测量算法在不同输入下找到答案所需的操作次数。
  
  什么是算法(Algorithm)?是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。
  
  算法中的指令描述的是一个计算,当其运行时能从一个初始状态和(可能为空的)初始输入开始,经过一系列有限而清晰定义的状态,最终产生输出并停止于一个终态。一个状态到另一个状态的转移不一定是确定的。随机化算法在内的一些算法,包含了一些随机输入。
  
  形式化算法的概念部分源自尝试解决希尔伯特提出的判定问题,并在其后尝试定义有效计算性或者有效方法中成形。这些尝试包括库尔特·哥德尔、Jacques Herbrand和斯蒂芬·科尔·克莱尼分别于1930年、1934年和1935年提出的递归函数,阿隆佐·邱奇于1936年提出的λ演算,1936年Emil Leon Post的Formulation 1和艾伦·图灵1937年提出的图灵机。即使在当前,依然常有直觉想法难以定义为形式化算法的情况。
  表达算法特征
  一个算法是为解决某一特定类型的问题而制定的一个实现过程,例如,建造一栋楼之前要先在图纸上绘出其构造图,算法就是在编写程序前先整理出的基本思路。它具有下列特征:
  
  (1)有穷性
  
  一个算法必须在执行有穷步之后结束且每一步都可在有穷时间内完成,不能无限地执行下去。
  
  (2)确定性
  
  算法的每一个步骤都应当是确切定义的,对于每一个过程不能有二义性,将要执行的每个动作必须严格而清楚地规定。
  
  (3)可行性
  
  算法中的每一步都应当能有效地运行,也就是说算法应是可行的,并要求最终得到正确的结果。
  
  (4)输入
  
  一个算法应有零个或多个输入,输入是在执行算法时需要从外界取得必要的信息,即算法所需的初始量等信息。
  
  (5)输出
  
  一个算法有一个或多个输出,什么是输出?输出就是算法最终所求的结果。
  
  因为"well-defined procedure"缺少数学上精确的定义,19世纪和20世纪早期的数学家、逻辑学家在定义算法上出现了困难。20世纪的英国数学家图灵提出了著名的图灵论题,并提出一种假想的计算机的抽象模型,这个模型被称为图灵机。图灵机的出现解决了算法定义的难题,图灵的思想对算法的发展起到了重要作用。

联系客服免费领取更多阿里云产品新购、续费升级折扣,叠加官网活动折上折更优惠