听起来很高大上的“算法”,其实一点都不难学!
本栏目用最简洁的语言和逻辑,脱离编程语言的束缚,用最短的时间,从算法概念/程序结构/数据结构/算法思想/应用方法五个方面,与您一起轻松理解算法知识,掌握算法思维。
算法太重要了
“人工智能”、“机器学习”、“大数据”,这些越来越常听到的词汇,其实背后都是“算法”。
很多高科技技术似乎都离不开“算法”的“加持”。
科学家/工程师/技术人员如果不懂一些算法,现在都很尴尬。
算法其实很容易
听这么高大上的“算法”其实一点都不难学!
为什么关于算法的书很难懂?
只是太复杂了。不同的编程语言是不同的。
专栏特点
1.语言和逻辑极少,且复杂易懂,速度快;
2.不要使用编程语言!是的,这是最快的算法入门方式;
3.直奔算法思维的核心,不要在次要知识上浪费时间。
什么是“算法”
算法,从字面上看,一定是“计算方法”的缩写,尤其是“计算机计算方法”。因此,该算法由计算机程序实现。
算法,英文叫Algorithm,是为了让计算机解决一个问题而设计的一套计算方法。这种计算方法的设计依赖于“数学模型”的建立。
也就是说,程序员在设计算法之前,会对实际问题进行理解和分析,总结为一个“具体的数学问题”。
算法是解决问题的计算方法。
算法有这么几个特征
1好的
算法的每一步都有“明确的意义”,对算法结果的预期也是明确的。
2有贫困
算法一直算不完,也停不下来;必须有一个确定的结束条件,否则,“永远”有什么意义?
3可行
有一个笑话说,当一个人面试一个会计师时,他的算术非常快,结果是即时的,但它就是不正确。
4输入和输出
算法是用来解决问题的,源是输入,结果是输出。
复杂的算法也是由小算法组成的。
该算法具有三个元素3354
数学,输入输出方法,算法步骤。
那么,如何设计一个算法呢?
首先,建立待解决问题的数学模型,将原问题转化为数学问题;
然后,将问题的“已知条件”转化为“数据”,输入数学模型;
然后通过对输入的逐步转换/处理/计算,得出结果。
最后,以期望的形式输出结果。
怎么设计一个算法程序呢
比如我们要解决一个问题。3354班有30名学生。现在我们知道了他们的名字和考试成绩,比如小红的90,小刚的97,小明的60等等。班上哪个学生成绩最好?
谁的成绩最好?
那我们就按照上面的步骤设计一个小算法吧。
1把原问题变成数学问题。
找到最大的30个分数值和相应的名称;
2已知条件转换成输入数据。
依次输入30个名字和30个等级值;(名称的数据类型为字符串,分数值的数据类型为整数。我们将在后面详细解释数据类型。)
3逐步计算
这是典型的求最大值问题。方法有很多。这里有一个方法:
3-1取出第一个同学和第二个同学的姓名和年级,比较大小,将较大的年级值存储在一个位置。我们会在这个位置给他取一个名字,叫做当前最大成绩值,然后在另一个位置存储这个更好成绩对应的同学的名字,叫做当前成绩最好的同学的名字;
3-2这样比较第一个和第二个学生的成绩,得出两个学生中成绩最好的学生。信息存储在:当前最大成绩值和成绩最好的学生姓名;
3-3以下是重复性的工作。将获得的当前最大成绩值和具有当前最好成绩的同学的姓名与第三个同学进行比较,较大的成绩值仍存储在当前最大成绩值中,与该较好成绩对应的同学的姓名存储在具有当前最好成绩的同学的姓名中;
3-4这个过程一直进行,直到30个学生的所有信息都比较完。此时,当前最大成就值中存储的值为最佳成就,当前最佳成就同学名下存储的值为最厉害同学的名字。
4输出
按照你想要的格式,显示上面两个存储值,就大功告成了!
举个例子吧
1解决同一个问题可能有各种算法。不同的算法可能执行速度不同,编写难度不同,占用资源不同,甚至计算精度也不同。很多时候,没有最好的算法,只有特定条件下最适合的算法。
每种算法都有其适用条件。如果条件改变,该算法可能工作得很好。比如上面的例子,如果这个班的两个学生成绩完全一样,那么按理说应该输出两个名字和成绩,上面的算法需要改进。
算法3354强逻辑体
如果问题能具体化为一个或几个数学问题,问题就解决了一半。就像在学习和工作中,所谓解决问题的能力,一半是分析问题的能力,可以把大问题分解成小问题,把抽象问题等同于具体问题。
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/235664.html