算法设计与分析
Algorithms Design and Analysis
前言
![ba3f2851d14abcf9bd7f67e964354eb3.gif](https://i-blog.csdnimg.cn/blog_migrate/40a7a8e3ae4411485da0999e74260ed4.gif)
算法分析与设计是计算机科学技术中处于核心地位的一门专业基础课,越来越受到重视。因此,算法分析与设计是我们掌握了编程语言之后所要学习的一门有趣的必修课。
现在,让我们进入算法的世界,一起来了解算法的前生今世以及用算法解决问题的例子,感受算法的独特魅力!
01
![f4fd3b10740ab5fcb714e6cc4b0f8764.gif](https://i-blog.csdnimg.cn/blog_migrate/4c87c93a349a0f3dddf855f7ea3c00b7.gif)
算法概念与起源
Concept and origin
算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令。代表着用系统的方法描述解决问题的策略机制。它能够对一定规范的输入,在有限时间内获得所要求的输出。算法与计算机的结合,把人类从繁复的运算中解放出来。
![44764660b0eb0e12b665836630a74803.png](https://i-blog.csdnimg.cn/blog_migrate/832266a6aed74a7c8b2a13972b90c842.png)
02
![f4fd3b10740ab5fcb714e6cc4b0f8764.gif](https://i-blog.csdnimg.cn/blog_migrate/4c87c93a349a0f3dddf855f7ea3c00b7.gif)
算法基本内容
Basic content of algorithm
⭐算法的五大基本特征:
可行性丨Effectiveness
算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步,即每个计算步都可以在有限时间内完成(也称之为有效性)。
确切性丨Definiteness
算法的每一步骤必须有确切的定义。
输入项丨Input
一个算法有0个或多个输入,以刻画运算对象的初始情况。
输出项丨Output
一个算法有一个或多个输出,以反映对输入数据加工后的结果。
有穷性丨Finiteness
算法的有穷性是指算法必须能在执行有限个步骤之后终止。
⭐算法评估标准:
![e82c7f00e878d36428218667ee25d49f.png](https://i-blog.csdnimg.cn/blog_migrate/689a2fb7c59692259530a77b8890c7c4.png)
⭐常见算法:
![0b9205ade55ca86b6a16fdae85bddd44.png](https://i-blog.csdnimg.cn/blog_migrate/4c87becadf5621b740ea2b5088a408e7.png)
03
![f4fd3b10740ab5fcb714e6cc4b0f8764.gif](https://i-blog.csdnimg.cn/blog_migrate/4c87c93a349a0f3dddf855f7ea3c00b7.gif)
算法介绍
Algorithm introduction
到这里,相信大家对什么是算法已经有了初步的认识,接下来,就让我们来看一个经典的例子——动态规划算法求解0-1背包问题来感受一下算法在问题求解中的应用。
动态规划 · 0-1背包问题
![2fd108abfcd5e1e26f39f3ae76c63190.png](https://i-blog.csdnimg.cn/blog_migrate/508ef327c23048d204d3392659a1526d.png)
问题描述
给定n种物品和一背包。物品i的重量是wᵢ,其价值为vᵢ,背包的容量为C。问应如何选择装入背包的物品,使得装入背包中物品的总价值最大?
对于一种物品,要么装入背包,要么不装。所以对于一种物品的装入状态可以取0和1。我们设物品i的装入状态为xᵢ,xᵢ∈(0, 1),此问题称为0-1背包问题。
过程分析
对于这个问题,若是采用暴力计算的求解方法,即依次计算对每个物品放与不放入背包是否超过背包的承重,若没超过那么已放入物品的总价值是多少,并且记录下来最大的总价值即是问题的解。显然,若是按照这种方法计算则要考虑2ⁿ种情况,恐怕也只有计算机能完成如此恐怖的计算量了,那么是否有更好的方法来简化求解过程呢?
答案是肯定的,有多种更优秀的算法来简化0-1背包的求解过程,这里只举出一个动态规划算法求解的例子。
动态规划算法求解0-1背包
现构造一个(n+1)*(C+1)的矩阵V,其中第i行第j列的数字V[i, j](i=0, 1, ..., n; j=0, 1, ..., C)表示从前 i 个物品中取出部分物品装入承重为 j 的背包,所得的最大价值。那么矩阵第n行第C列的值,即V[n, C]就是原问题的解。
![7463f965d5f69d5f9077f81f0d98c0fb.png](https://i-blog.csdnimg.cn/blog_migrate/925416cee5365c4fea19e63ed06d6d88.png)
对于该矩阵第0行和第0列的所有元素显然均为0。而对于任意的第i行第j列的元素分析过程如下:
①如果第i个物品的重量大于背包承重j,它不可能被放进背包中,取V[i-1, j]作为V[i, j]的值;
②如果第i个物品的重量小于等于背包承重j,这个物品可以被放进背包中,则需要进行比较。假设这个物品重为w,价值为v,比较V[i-1, j]与V[i-1, j-w]+v的值,取两者间更大的一方作为V[i, j]的值。
![1221e71ff1dd444acdab46467ef480dd.png](https://i-blog.csdnimg.cn/blog_migrate/1607290a5a261cf86aa24f60963a627c.png)
按照这一方法逐个遍历矩阵的每一个元素,只需要进行n*C次尝试即可得到正确答案。
04
![f4fd3b10740ab5fcb714e6cc4b0f8764.gif](https://i-blog.csdnimg.cn/blog_migrate/4c87c93a349a0f3dddf855f7ea3c00b7.gif)
算法成就
Algorithm achievement
![51267d37734aa1eb2536963487683741.png](https://i-blog.csdnimg.cn/blog_migrate/23bd078fc31e35fb769810d994c00217.jpeg)
图灵奖
有“计算机界的诺贝尔奖”之称。专门奖励那些对计算机事业作出重要贡献的个人。其名称取自计算机科学的先驱、英国科学家艾伦·麦席森·图灵(Alan M. Turing)。图为艾伦·麦席森·图灵。
![ecf5b33f5f22bcfa27e9a8d0690a8fb0.png](https://i-blog.csdnimg.cn/blog_migrate/5895ba3baea70681397810c2e44c149d.jpeg)
国际知名期刊
如SCI、IE、Nature等每年收录大量计算机论文,截止目前,计算机已成为国际论文的一大板块。
![20af10196929cb8199f3ddca79f80e26.png](https://i-blog.csdnimg.cn/blog_migrate/764d281a65d0902eedc53f7c1c2a02bb.jpeg)
优秀的算法学家
图为Edsger Wybe Dijkstra
从算法诞生以来,许多优秀的算法学家出现,为算法的发展做出了巨大的贡献,其中比较杰出的有Don E.Knuth、Udi Manber、Edsger Wybe Dijkstra等。
05
![f4fd3b10740ab5fcb714e6cc4b0f8764.gif](https://i-blog.csdnimg.cn/blog_migrate/4c87c93a349a0f3dddf855f7ea3c00b7.gif)
未来发展
Future development
![81b8d21ac6ee9aff645d496612886f40.png](https://i-blog.csdnimg.cn/blog_migrate/975f8a00e8b1838a8d5ec5ac39565caf.png)
算法的崛起
虽然每个人都知道摩尔定律的魔力(集成电路上可以容纳的晶体管数目在大约每经过24个月便会增加一倍,换言之,处理器的性能每隔两年翻一倍),驱动数字经济发展的性能改进遵循的就是摩尔定律,但鲜有人知道,在很多领域,算法所产生的性能改进已经超过了硬件所带来的性能提升。实际上,2010年的一份官方报告表明,算法已经为很多领域带来了显著的性能提升,比如语音识别、神经语言处理和物流。“更加令人感到吃惊但同时又令人难以理解的是,在很多领域,算法为性能带来的提升已经远远超过了处理器速度提升所带来的性能改进。”
因此,未来属于算法,而不是代码!