相信你已经完成了语言入门,可以使用C++写一些简单的程序了。算法是解决问题的步骤指南,提升效率、确保准确,是现代科技的核心。掌握算法,让我们在信息时代游刃有余。
所以让我们开始学习算法之旅吧!
1 算法的定义
下面是百度百科中对算法的定义:
算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间,空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。
1.1 算法的特征
在上述定义中,我们大概可以感觉到一个算法应该有以下特征:
有穷性:算法必须在执行有限个步骤之后终止,即算法的执行时间是有限的。(算法必须在有限步骤内完成。)
确定性:算法的每一步骤都必须有明确的定义,即每一步的执行都是没有歧义的,算法的描述不应有模棱两可的情况。(算法中的每一步骤都必须是明确无误的。)
输入:算法可以具有零个或多个输入,这些输入是算法开始执行前所需要的已知条件或数据。(算法需要接收明确规定的输入。)
输出:算法至少应有一个输出,它是算法执行完成后得到的结果。该结果应与输入有某种确定的关系。(算法必须产生符合要求的输出。)
可行性:算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现的,即算法中的操作必须是足够基本的,可以在有限时间内完成。(算法中的每一个操作都必须是有效的,并能被精确执行)
2 算法与生活
算法并非仅仅是枯燥的代码堆砌,,而是解决实际问题时衍生出的思维框架和步骤序列。在解决复杂问题时,往往需要综合运用多种算法策略。
我将算法称为解决特定问题的方法或程序。
比如:如何把大象关进冰箱里?为了解决这个问题,大概可以分成三个步骤:
1.打开冰箱门。
2.把大象放进冰箱。
3.关闭冰箱门。
在这个例子中,这些步骤能够指导我们完成一个具体的任务——即将一个大型动物(如大象)安全地放入并关闭一个封闭空间(如冰箱)。
3 时空复杂度
解决一个问题往往有很多方法,有些比较简单而有些比较复杂,通俗的说就是有好方法与坏方法。算法也是类似,那么在正确解决问题的前提下,怎么算是好算法,好算法与坏算法有什么区别呢?
通常情况下我们通过时空复杂度(时间复杂度与空间复杂度)来区分算法的好坏。
3.1 时间复杂度
时间复杂度,顾名思义,计算的是代码运行所花费的时间。但是我们知道,一个程序是在电脑上运行的,而电脑不同,同一个程序的运行时间也是不同的。同样的一套程序,我们用十年前的电脑和现在的电脑分别运行,最终的运行时间肯定是不同的。
所以,此处所说的时间复杂度并不是真正的代码运行所需的时间,而是一个程序中 代码所运行的次数 。然后将这个次数写成一个 数学函数表达式。此时,这个表达式就是这个程序的时间复杂度。
我们通常通过计算算法中基本操作(如赋值、比较、循环等)的执行次数来评估时间复杂度。这种评估方法采用大O渐进表示法,即只关注执行次数的最高次项,并忽略低次项和系数。
3.2 空间复杂度
空间复杂度则关注算法在执行过程中临时占用的存储空间大小。这里的“空间”主要指算法运行过程中创建的变量个数,而非程序实际占用的物理内存字节数。同样采用大O渐进表示法来量化空间复杂度。