假如我们现在要算1+2+3+……+100;如果你不知道高斯求和公式,你可能会写出下面的代码:
#include <stdio.h>
int main()
{
int sum = 0;
for (int i = 1; i <= 100; i++)
{
sum += i;
}
return 0;
}
如果你知道高斯求和公式,你就会直接写出下面的代码:
#include <stdio.h>
int main()
{
int sum = (1 + 100) * 50;
return 0;
}
这就是算法的便捷!
现在我问你,什么是算法呢?
现在我们给出算法的定义:
算法是解决特定问题求解步骤的描述,在计算几中表现为指令的有限序列,并且每个指令表示一个或多个操作。
算法大体分为以下五个特性:
输入,输出,可行性,确定性,有穷性
输入输出:
这个好理解,算法肯定要进行零个或多个输入,一个或多个输出,不然要算法干哈呢,对吧!
有穷性:
定义:是指算法在执行有限的步骤之后,自动结束而不会无限循环,并且每个步骤在可接受时间内完成。
确定性:
算法执行过程中不会出现二义性
可行性:
定义:
算法的每一步都是可行的,也就是说执行有限次完成。
设计一个算法应该具备以下的特性:
正确性,可读性,健壮性和时间效率高空间储存低
我们这里只讲下健壮性和时间效率高空间储存低
健壮性定义:
当输入数据不合法时,设计的算法也能进行相应的处理,而不是出现异常结果。
时间效率高空间储存低:
即时间复杂度小,空间复杂度也小。
我们有两种方法进行检查:
事后统计方法和事前分析估算法
事后统计方法:
定义:这种方法通常是通过设计好的程序和数据进行检查,对不同的运行时间进行比较,从而确定算法的效率高低。
缺点:如果花费大量时间成本却得到一个完全不满意的结果,这就是一个非常大的消耗。
所以我们有了事前分析估算法:
定义:在计算机程序编制前,依据统计方法对算法进行评估。
即是时间复杂度与空间复杂度相关的知识,这里我之前已经写过了,就不再讲了,不会的可以点开链接:
最后,感谢大家的支持,我们一起进步吧!冲峰。