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

算法的理论基础

  第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)。除非特别说明,空间复杂度也是以最坏情况来分析的。

小个子不管穿什么裙子,尽量避开这3个长度,免得显矮又显胖女性天生就是爱美的,面对琳琅满目的化妆品和各式各样的服装与首饰,我们目不暇接,难免会有些失措。不管是高挑出众的时尚御姐,还是普通身高的温柔女性,又或者是小个子的萝莉型girl,都有大盘今天大概率这样走上午来看,三大指数集体高开,得益于美联储昨晚会议结束,符合预期,全球股市昨晚集体大涨,表现狂欢。行情方面来看行情大幅度回暖,上涨股票家数超4000家,下跌股票家数不到500家,北向要明白,真正层次高的人,连说话都不一样不知道大家有没有过这样的经历努力地想要融入一个新环境却不知道如何表达,明明自己有能力却不知道如何和领导交流,被别人误解却不知道如何解释。归根结底,这一切问题的缘由就是不会说话,这让关于激情的正能量语言及诗词一感悟激情1激情是所有伟大成就取得过程中最具活力的因素。2激情是一种洋溢在外的热情,是一种积极向上的态度,是瞬间燃起把黑夜照得满天彤红的熊熊烈火,是横扫一切奔涌前来的滔天巨浪。3激XboxSeriesX的5款最佳电视2022年冬季评测如果您拥有XboxSeriesX或计划购买一台,您可能需要一台新电视来搭配它,这样您才能充分利用SeriesX的潜力。最好,您想寻找具有120Hz面板和HDMI2。1带宽的东西,因iphone如何查看电池循环次数iphone电池健康在设置中可以便捷地去查看,但是却看不了电池循环次数。循环次数还是具有一定的意义的(详细可以看上篇文章),下面为大家分享便捷的方法,希望对大家能有帮助。一电脑版爱一加和平精英挑战赛来袭,感兴趣的赶紧关注起来稳住全局,一击制胜!3月17日,一加和平精英挑战赛正式启动,为怀揣电竞梦想的人们开启争夺冠军的逐梦之旅。本次赛事福利十分丰厚,其中包括了十万奖品池海岛决赛明星嘉宾面对面以及一加新品言传身教二十多年前,初为人父的我真真正正地体会到了童言无忌和言传身教的厉害。来自网络鸣谢作者俗话说父母是孩子最好的老师,你的一言一行,孩子不经意间就学会了。即便一句话,他不懂好坏照单全收,满是伤感的情绪文案1。有些乐章一旦开始唱的就是曲终人散2。认真过努力过尽力过挽留过最后什么都没有3。我好像又缓不过来了又开始变得越来越不想说话暴躁懒惰焦虑失眠拿起手机又不知道干嘛我不知道我怎么了4。简短不失道理的小文案,朋友圈高质量经典短句永远做一个三观比五官正的女孩遇见记得给我买束花温柔迷人且落落大方不要预支明天的烦恼不做任何人的第二选择允许存在误解接纳和不喜欢失望的时候道歉是没有用的热爱的人和事都要义无反顾做自己除了毛衣和卫衣,这四件内搭显瘦又美貌,足够承包你90的时髦一到秋冬,天气变冷,整个人就想躲在舒舒服服的被窝里,暖暖和和过冬。但还是要出门上班怎么办?不如给自己挑几件舒适貌美的内搭让自己一天比一天更加美好,才是正事!梦幻泡泡袖女孩们一定都有
农村粮价会不会涨了?事关每个人,警惕另一个不好的苗头三月份以来,受到外围市场的影响,国内粮价开启了新一轮上涨。以小麦为领头羊,玉米大豆紧跟其后。受俄乌冲突的巨大影响,本轮上涨的幅度和力度较大。其中,小麦最高价格摸至1。8元斤,玉米突全球有望出现一股人民币结算热潮根据高盛的消息,沙特正在与中国商讨人民币结算石油的问题,这意味着人民币结算越来越受到全球各国的重视,有望进一步扩大结算范围,石油人民币不是新名词,伊朗早就使用人民币结算了,土耳其也一夜蒸发数亿人民币,康师傅变成糠师傅,严钦武后悔莫及一场3。15晚会,让湖南插旗菜业成为众矢之的,随之而来的是媒体的持续曝光,和对创始人严钦武的舆论抨击。所谓的土坑酸菜,更是成为新闻热点,连带着康师傅统一等多家知名食品公司跟着遭了殃康师傅屋漏又逢酸菜门斑马消费陈晓京在方便面业务下行之际,康师傅又在土坑酸菜事件中中招,方便面一哥被逼进墙角。便捷的外卖琳琅满目的自热锅和预制菜产品,已席卷方便食品市场,靠提价和走高端路线,方便面厂商终清明节的思念文案ampampquot死亡不是永别,遗忘才是ampampquot忙完这一生,我就去看您。死亡不是永别,遗忘才是。寻梦环游记清酒一杯,盛满了对亲人的思念菊花一朵,包裹着对逝者的牵挂泪水千行,寄托着对往昔的回忆青烟缕缕,飘荡着对祖先的怀念。花开清明东航坠机事件只想告诉你不要再说自己不会是不幸的那一个东航坠机事件后,看着纷杂的各类新闻和评论心情一直很沉重,出于对遇难者的尊重,也真的不想蹭热点,几次欲言又止。当大家慢慢沉静下来时,我还是想结合自己对人生体验,反思这次震撼人心的突发经典情感语录人生感悟快来看看1爱是两个人的事,如果你还执着着,纠缠着,原地打滚痛苦地爱着。时过境迁之后,你会发现,是自己挖了个坑,下面埋葬的全部都是青春。2思念若是一种病,那我已病入膏肓想念若是一种情,那我已换上台积电4nm!曝骁龙8Plus或5月份登场小米12Ultra首批搭载据此前消息,高通会在年中发布一款换用台积电4nm工艺的骁龙8芯片,传闻将被命名为骁龙8Plus。根据爆料博主数码闲聊站最新消息,骁龙8Plus的首批机型将会在5月或6月正式登场,由bebird三合一可视采耳仪安全舒爽,让你停不下来前段时间耳朵很痒,于是买了一包棉棒去掏,不过并没有缓解多少,有时候还会出现咚咚咚响,本来想去医院耳科看看,疫情又不太方便,我看到小红书上有推荐一款可视采耳仪,所以就想看看到底耳道里最全的吸尘器推荐来啦当下比较热门的吸尘器品牌有小狗,斐纳TOMEFON,戴森,飞利浦,米家等等推荐一小狗小狗是专做吸尘器的品牌,就像宣传的品牌理念22年始终专注于吸尘器领域的研发与创新。家里之前用过小还能买到的四款入门相机最低只要1200元在智能手机的冲击下,入门级便携相机在2018年后逐步淡出大众视野。而在过去两年里,疫情和半导体元件短缺则让所有品牌都出现了不同程度的缺货涨价情况。结果就是今天的相机普遍更贵了,花三