算法基础介绍

一.引入.

假如我们现在要算1+2+3+……+100;如果你不知道高斯求和公式,你可能会写出下面的代码:

#include 
int main()
{
    int sum = 0;
    for (int i = 1; i <= 100; i++)
    {
        sum += i;
    }
    return 0;
}

如果你知道高斯求和公式,你就会直接写出下面的代码:

#include 
int main()
{
    int sum = (1 + 100) * 50;
    return 0;
}

这就是算法的便捷!

二.算法的定义

现在我问你,什么是算法呢?

现在我们给出算法的定义:

算法是解决特定问题求解步骤的描述,在计算几中表现为指令的有限序列,并且每个指令表示一个或多个操作。

三.算法的特性

算法大体分为以下五个特性:

输入,输出,可行性,确定性,有穷性

输入输出:

这个好理解,算法肯定要进行零个或多个输入,一个或多个输出,不然要算法干哈呢,对吧!

有穷性:

定义:是指算法在执行有限的步骤之后,自动结束而不会无限循环,并且每个步骤在可接受时间内完成。

确定性:

算法执行过程中不会出现二义性

可行性:

定义:

算法的每一步都是可行的,也就是说执行有限次完成。

四.算法设计的要求.

设计一个算法应该具备以下的特性:

正确性,可读性,健壮性和时间效率高空间储存低

我们这里只讲下健壮性和时间效率高空间储存低

健壮性定义:

当输入数据不合法时,设计的算法也能进行相应的处理,而不是出现异常结果。

时间效率高空间储存低:

即时间复杂度小,空间复杂度也小。

五.算法效率的度量方法

我们有两种方法进行检查:

事后统计方法和事前分析估算法

事后统计方法:

定义:这种方法通常是通过设计好的程序和数据进行检查,对不同的运行时间进行比较,从而确定算法的效率高低。

缺点:如果花费大量时间成本却得到一个完全不满意的结果,这就是一个非常大的消耗。

所以我们有了事前分析估算法:

定义:在计算机程序编制前,依据统计方法对算法进行评估。

即是时间复杂度与空间复杂度相关的知识,这里我之前已经写过了,就不再讲了,不会的可以点开链接:

时间复杂度与空间复杂度-CSDN博客

最后,感谢大家的支持,我们一起进步吧!冲峰。

你可能感兴趣的:(算法,数据结构)