范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

算法的理论基础

  第1章 算法的基本概念1.1 算法的基本概念
  首先,要明白软件 = 程序+文档 = 数据结构+算法+文档(图1-1),算法 = 数据对象运算和操作 + 控制结构。算法(Algorithm)的概念在计算机科学领域中几乎无处不在,在各种计算机系统的实现中,算法的设计往往处于核心的位置。计算机的问世是20世纪算法是计算机科学的重要基础,就像算盘一样,人们需要为计算机编制各种各样的"口诀"即算法,才能使其工作。
  1-1计算机软件和算法的关系
  1.1.1 算法的特征
  虽然每天都在和算法打交道,但是能严格地指出什么是算法却不是一件容易的事。算法即在有限步骤内解一个数学问题的过程步骤中常常包括某一操作的重复。更广义地说,一个算法就是解一个问题或实现某一目村的逐步过程。一个算法,就是一个有穷规则的集合,规定了一个解决某特定类型问题的运算序列,此外还应具有如下 5 个重要特性。1.输入性
  一个算法要具有0个或多个外部量作为算法的输入,这些外部量通常体现为算法中的组变量,有些输入量需要在算法执行过程中输入。从表面上看,有些算法好像没有输入量实际上是输入量已被嵌入算法之中。2.输出性
  一个算法必须具有一个或多个输出,以反映算法对输入数据加工后的结果,没有输出的算法是毫无意义的。3.确定性
  算法的每一个步骤必须具有确定的定义,即每一步要执行的动作是确定的,是无二义性的。在任何条件下,算法只有唯一的一条执行路径,即对于相同的输入得出的输出结果也是相同的。4.有穷性
  对于任何合法的输入值,算法必须在执行有限个步骤之后结束,并且每一步都可以在有限的时间内完成。5.可行性
  算法中描述的操作都可以通过已经实现的基本运算的有限次执行来实现,即算法的具体实现应该能够被计算机执行。1.1.2 算法的4个标准
  计算学科则把问题作为自己的研究对象,用计算机来解决问题。在计算机专家的头脑中,世界是一个个要解决的问题集合。假如如下分段函数,要求对用户输入的一个自变量 x 的值,给出相应的函数值。
  实现分段函数求值功能的过程可以作以下描述。
  Ø 输入自变量x的值。
  Ø 依据自变量 x 的值进行判断:
  如果x>0,执行 x+4=f(x)操作;
  如果x<0,执行 x-4=f(x)操作;
  如果x=0,执行 4=f(x)操作。
  其中,A=>B 表示将表达式 A 的值赋给变量 B。
  Ø 输出步骤@计算的结果。
  显然,上述描述满足算法的 5 个重要特征,因此,该描述就是一个算法。在现实社会中,不同的人对于同一问题会有不同的看法或解决方法。同样,在计算机领域,对于同一问题可能存在多种算法也是很自然的事情。例如,对于一批数据的排序问题,就存在多种排序方法判断一个算法的好坏主要依据以下 4 个标准。1.正确性
  正确性是设计一个算法的首要条件,如果一个算法不正确,其他方面就无从谈起。一个正确的算法是指在合理的数据输入下,能在有限的时间内得出正确的结果。2.可读性
  算法主要是为了人的阅读与交流,其次才是让计算机执行,因此算法应该易于人的理解;另外,晦涩难读的算法易于隐藏较多错误而使实现该算法的程序的调试工作变得更加困难。3.健壮性
  算法应当具备检查错误和对错误进行适当处理的能力。一般而言,处理错误的方法不应是中断程序的执行,而应是返回一个表示错误或错误性质的值,以便在更高的抽象层次上进行处理。4.效率
  效率是指算法执行时所需计算机资源的多少,包括运行时间和存储空间两方面的要求。运行时间和存储空间都与问题的规模有关。存储空间指的是算法执行过程中所需的最大存储空间。
  在设计一个算法时,要从上述 4 个方面综合考虑。同时还要考虑到算法的使用频率及所使用机器的软硬件环境等因素,这样才能设计出一个好的算法。1.1.3 算法的描述形式
  算法的描述形式多种多样,不同的算法描述形式对算法的质量有一定的影响。描述同一个算法可以采用自然语言,流程图,盒图,伪代码,序设计语言等,常用的描述算法方法有如下4种。1.自然语言描述法
  最简单的描述算法的方法是使用自然语言,用自然语言来描述算法的优点是简单且便于人们对算法的理解和阅读,缺点是不够严谨,易产生歧义,当算法比较复杂且包含很多转移分支时,用自然语言描述就不是那么直观清晰了。2.算法框图法
  使用程序流程图、盒图等算法描述工具来描述算法。其特点是简洁)(明了,(便于理解和
  交流。3.伪码语言描述法
  用上述两种方法描述的算法并不能够直接在计算机上执行。为了解决理解与执行之间的矛盾,人们常常使用一种称为伪码语言的描述方法来对算法进行描述。伪码语言介于高级程序设计语言和自然语言之间,它忽略高级程序设计语言中一些严格的语法规则与描述细节,因此它比程序设计语言更容易描述和被人理解,而比自然语言或算法框图更接近程序设计语言。4.高级程序设计语言描述法
  使用特定的可以直接在计算机上执行的程序描述算法。优点是不用转换直接可以编译执
  行,缺点是需要对特定的程序设计语言比较理解。大部分的算法最终是需要通过能够向计算机发送一系列命令的程序来实现的。所谓"程序"是指对所要解决问题的各个对象和处理规则的描述,或者说是数据结构和算法的描述,因此有人说"数据结构+算法-程序"
  程序与算法不同。
  程序可以不满足算法的第 4 个特性,例如,操作系统,它是在无限循环中执行的程序,因而不是算法。然而可以把操作系统的各种任务看作一些单独的问题,每一个问题由操作系统中的一个子程序通过特定的算法实现,该子程序得到输出结果后便终止。
  算法设计方法主要有分治策略、动态规划、贪心算法、回溯法、分支限界、概率算法等这些将在后面的章节中陆续介绍,并采用 C++ 语言来描述算法。C++ 语言的优点是类型丰富语句精练,具有面向对象和面向过程的双重优点,用 C++ 来描述算法可使整个算法结构紧凑,可读性强。1.2 算法复杂性分析框架
  算法复杂性是算法运行所需要的计算机资源的量,需要时间资源的量称为时间复杂性,需要空间资源的量称为空间复杂性,算法复杂性的度量主要是针对运行该算法所需要的计算机资源的多少。当算法所需要的资源越多,该算法的复杂性越高。反之,当算法所需要的资源越少,算法的复杂性越低。
  算法的时间效率和空间效率都用输入规模的函数进行度量。对于所有的算法,规模更大的输入都需要运行更长的时间。经常使用一个输入规模参数为 n 的函数来研究算法的效率。选择输入规模的合适量度,要受到所讨论算法的操作细节影响。1.2.1 时间复杂度
  通常,对于一个算法的复杂性分析主要是对算法效率的分析,包括衡量其运行速度的时间效率,以及其运行时所需要店用的空间大小。对于算法的时间效率的计算,通常是抛开与计算机硬件、软件有关的因素,仅考虑实现该算法的高级语言程序。
  一般而言,对程序执行的时间复杂度的分析是以分块进行的,先分析程序中的语句,再分析各程序段,最后分析整个程序的执行复杂度,通常以渐进式的 O 形式来表示算法的时间复杂度。
  渐进式的 O 形式表示时间复杂度的主要运算规则有如下两种。
  (1)求和规则
  O(f(n))+ O(g(n))= O(max(f(n),g(n))),其中,f(n)和 g(n)表示与n 有关的一个函数。
  (2) 乘法规则
  O(f(n))* O(g(n))= O(f(n)*g(n)),O(c*f(n))= O(f(n)),c 是一个正常数。
  假设 T(n)是问题规模n(n 为整型数) 的函数,算法的时间复杂度可以定义为 O(f(n)),记作 T(n)=O(f(n))。由于随着问题规模n的增长,算法执行时间的增长增长率和f(n)的增长率相同。因此,T(n)也被称为算法的时间复杂度。
  为了便于比较同一问题的还同算法的效率问题,通常的做法是从算法中选取一种对于所研究问题来说是基本运算的原子操作,以该基本操作重复执行的次数作为算法的时间度量单位。例如,对于如下的两个 NXN 矩阵相乘算法
  for (i=0;i a[j+1] )
  {
  temp=a[j];
  a[j]=a[j+1];
  a[j+1]=temp;
  change=true;
  }
  }
  i++;
  } while (i< n && change);
  }
  一般情况下,当讨论时间复杂度时均指最坏情况下的时间复杂度,且时间复杂度考虑只是对于问题规模 n 的增长率,此时,只需计算出它关于 n 的增长率或阶即可。如上面所的冒泡排序算法时间复杂度为 T(n)=O(n(n-1)/2)=O(
  )。
  小规模输入在运行时间上的差别不足以将高效的算法和低效的算法区分开来,当输入规模增大时,算法的效率就体现出来。
  对于给定算法的实现即程序的时间复杂度的分析主要考虑可执行语句的情况,下面是对于程序进行时间复杂度分析的一些基本规则。
  Ø 对于简单的输入、输出及赋值语句,执行时间为 O(1)。
  Ø 对于顺序结构,需要执行一系列语句所用时间可采用渐进式O的求和规则来进行计
  算。
  Ø 对于选择结构,它的时间复杂度主要体现在对条件判断后所执行的语句上。如判断语句 if(c) {sl;} else{s2;},判断语句所需要的执行时间为O(1),执行语句所需要的执行时间为
  O(max(T(s1),T(s2)))
  Ø 对于循环结构,它的时间复杂度主要体现在循环体语句和循环条件判断语句上,可以
  利用渐进式O的乘积规则来进行计算。
  Ø 对于复杂的算法,可以将它分割成几个容易估算的部分,然后利用渐进式 O 的求和规则与乘法规则计算整个算法的时间复杂度。
  需要指出的是,顺序结构、选择结构和循环结构是算法的三种基本结构。在进行算法的时间复杂度分析时,重点是对这三种结构的语句进行分析。1.2.2 空间复杂度
  一般情况下,一个算法所占用的存储空间包括算法自身、算法的输入、算法的输出及实现算法的程序在运行时所占用空间的总和。
  由于算法的输入和输出所占用的空间基本上是一个确定的值,它们不会随着算法的不同而不同。而算法自身所占用的空间与实现算法的语言和所使用的语句密切相关,如程序越短它所占用的空间就越少。一个算法在运行过程中所占用的空间,特别是算法临时开辟的存储空间单元则是由算法策略及该算法所处理的数据量决定的。因此,对于一个算法的空间复杂度的衡量主要考虑的是算法在运行过程中所需要的存储空间的大小。
  假设 S(n)是问题规模 n(n 为整数)的函数,可以定义算法的空间复杂度为 O(f(n)),记作 S(n)=O(f(n)),与时间复杂度T(n)一样,S(n)也被称为算法的空间复杂度。如上述冒泡排序算法中,其空间复杂度为 S(n)=O(n)。除非特别说明,空间复杂度也是以最坏情况来分析的。

首飞40年长二丙运载火箭探索太空背后的故事新华社北京9月9日电题首飞40年长征二号丙运载火箭探索太空背后的故事新华社记者胡喆宋晨40年前的9月9日,长征二号丙运载火箭在酒泉卫星发射中心首飞成功,将我国首颗应用型返回式卫星送王子文吴永恩恩爱翻车后,让人看到了爱情完整的一面自恋爱综艺怦然再心动热播以来,35岁姐姐王子文通过综艺找到帅气海归男朋友的故事,一直备受粉丝们关注。一方面,俊男靓女的组合让人忍不住多看两眼。另一方面,王子文作为35岁的单亲母亲,女排娘家,那些平凡的故事在漳州体育训练基地的冠军楼旁,五棵芒果树郁郁葱葱,与旁边建筑的白墙相映成趣,勾勒出一幅宁静闲适的闽南风景画。这个基地被称为女排娘家,中国女排曾先后48次到此集训,中国女排的辉煌历史热火斜刺杀出有意威少?威少下一站能否联手巴特勒再回巅峰当年休赛期各种交易之所以令人期待,其中最重要的一个原因则是不到最后一刻正式官宣,谁也不知道究竟会生出多大变数。即使球员和球队达成口头协议,最后球员变卦的事例依旧不在少数。当年小乔丹不就17岁奥运冠军半退役!1年胖一大圈急流勇退,全红婵需提防?管晨辰处在了半退役状态,她已经递交了退役申请,但还没有得到批复,不过她自己已经决定未来4年好好在浙江大学上学。管晨辰处在了身体发育期,她从去年全运会过后有些松懈,如今成为了胖姑娘。西甲要崛起?传统三强欧冠皆取胜,仅塞维利亚不敌英超霸主欧冠小组赛首轮比赛,西甲球队的表现让人眼前一亮传统三强皇家马德里巴塞罗那马德里竞技全部取胜,只有塞维利亚败给了如日中天的英超霸主曼彻斯特城。在经历了几年的低迷后,西甲有了重新崛起之11!巴萨太惨,4场不胜鱼腩,哈维目标复仇4连胜巴萨克的在望9月11日凌晨西甲联赛战火重起,届时巴塞罗那将客战加的斯。在赛前,巴萨拥有10分,位列积分榜次席而加的斯遭遇全败,以0分垫底。巴萨新赛季,在西甲取得3胜1平,在欧冠上收世锦赛真的是中国女排的魔咒?排球星空,与你分享排球资讯与快乐。看了上一篇菜文的一位相熟的老朋友犀利地挑了不少毛病,说是此文太过鸡汤,分析得不透彻,不敢直面现状,也没提出针对性的具体措施,更没有大胆预测能打第几五冠王巴西能在卡塔尔戴上第六枚戒指吗?激动人心的2022卡塔尔世界杯还有俩月就要开幕了。而更让我心驰神往的巴西足球队又将要在世界杯上抛头露面了,想到这,我的心中无比激动,像个小孩一样天天在期盼那群穿着黄球衣的健儿快点登9月现超50度高温!地球5个气候临界点或被突破,北半球冬季需警惕天天说,年年说,气候变化带来的危机已经非常明显了,留给人类改变气候的时间真的不多了。从2022年的气候模式大家应该也看到了,极端性的气候现象在全球肆虐。高温,降雨都出现了极其罕见的印度首富14年身家飙百倍,比肩马斯克据美国商业杂志富比士的即时全球富豪榜7日排名显示,印度首富阿达尼的1491亿美元身家超过亚马逊创办人贝佐斯,成为全球第3大富豪,仅次于特斯拉执行长马斯克(ElonMusk)和LVM
娱乐八卦大爆料1倪妮有一次在小区门口碰到了一个偷拍她的狗仔,那狗仔有点尴尬,装作什么都没发生,倪妮看到了之后还特地拿了瓶水过去跟这个狗仔打招呼。2关晓彤接了一个婚纱的代言合作,但不允许在宣传的时庆余年2倒计时,8位主角在线公布,言冰云人选引百万热议庆余年是猫腻同名小说改编的古装电视剧,2019年由张若昀陈道明主演上映便取得很高的收视率。虽然该剧已经结束两年半了,但它一直是观众最喜欢的十大古装剧之一,其受欢迎程度可想而知!网上歌唱家阎维文25岁娶初恋,陪妻子抗癌33年,如今终于苦尽甘来1988年,31岁的阎维文正准备参加央视的第三届青歌赛,结果赛前他的妻子刘卫星被查出患上了癌症,为了安心照顾妻子,他决定放弃比赛。刘卫星知道阎维文好不容易才等到这个可以发展得更好的零纪元高阶宠物玩法,升级技能的训练果实哪里得呢?零纪元是一款由万游引力开发,嘻哈部落独家代理运营的2。5D未来幻想大型多人角色扮演网络游戏,以末日后的重建蒸汽世界为题材,呈现一个魔幻与科技并存的神秘新世界。零纪元中宠物的玩法有许原神真没见过这么离谱的芭芭拉,这一套给心海,那就更有趣了游戏中的笔杆王者,每日靠玩游戏过日子,玩网游也有20个年头,我有自己独特的见解,作为一个10年不脱坑的老玩家,如果文章写的有什么问题,请重喷!如果大家觉得好,请转发加点赞!非常感谢火焰纹章风花雪月新手攻略持续更新中教会线希尔妲加入后,大概15,16章左右有个剧情是金鹿老大寄信来问是否合作,选择合作后,第二天希尔妲就触发对话,好感到S。研究了几天,我来写一篇比较硬核的攻略。本攻略目标困难难度,三国杀光靠嘴牌是赢不了的,小内主公别开枪,自己人大家好,我是小洛。对于三国杀这款游戏,小洛觉得还是玩面杀比较好玩,最好还是那种标准武将,技能也没那么复杂,玩起来比较轻松愉快。毕竟现在移动版的三国杀环境还是很吓人的,一言不合就容易三国杀神将重铸计划(林)林包重铸林包的特点是加入了翻面机制,这点在神曹操和神吕布上都有体现。下面重铸神曹操和神吕布超世之英杰神曹操体力4勾玉原技能归心当你受到1点伤害后,你可以获得每名其他角色区域里的一张多喝热水存在健康隐患!这样喝水才科学水是生命之源人体内的水分大约占体重的65喝太烫的水会致癌吗?口渴了再喝水就晚了?为啥餐前餐后不要大量喝水?如何科学喝水?喝太烫的水会致癌吗?经常食用特别烫的食物和热饮会存在健康隐患胆囊健康日丨不吃早餐饮食肥腻,这些坏习惯正在影响你的胆囊胆囊在身体内发挥着重要功能,将肝脏分泌的胆汁储存起来浓缩胆汁,进食后排出浓缩胆汁帮助食物消化和吸收分泌黏液,保护胆道黏膜,维持胆道内环境平衡胆囊还可调节胆道内部压力,分泌免疫球蛋白胃癌患者在手术前后如何饮食有利于治疗吃可以致癌,也可以治癌。即使已经患癌,但是积极治疗后,按照合理的针对性饮食方式进行调养,也能成为抗癌的营养武器!胃癌患者在手术前后如何饮食有利于治疗?手术前如何饮食?术前,胃癌患者