什么是算法,表示算法的4种方法(小白必读)

我们知道,计算机解决任何问题都是靠程序驱动完成的。指挥计算机进行操作的一连串指令序列称为程序。计算机的基本原理是存储程序和程序控制,计算机程序可描述为程序=算法+数据。

那么,算法是什么呢?阅读完本节内容,相信大家能找到这个问题的答案。

什么是算法

算法(Algorism)一词最初出现在 12 世纪,是用于表示十进制算术运算的规则。18 世纪,算法 Algorism 演变为 Algorithm,算法概念有了更广的含义。任何定义明确的计算步骤都可称为算法,或者说算法是合乎逻辑、简捷的一系列步骤。

现在算法通常指可以用计算机来解决某一类问题的程序或步骤。

结合自己近 8 年对数据结构的研究,我原创了一整套数据结构和算法教程,它通俗易懂、不学院派,没有晦涩难懂的学术用语,教程提供了完整、可运行的 C 语言程序,非常适合有 C 语言基础、想系统学习数据结构和算法的人。

数据结构与算法教程(C语言版)icon-default.png?t=N7T8https://xiexuewu.github.io

算法的特性

问题不同,解决的思路和采取的方法与步骤就有针对性,所以对应的算法也各不相同。

但是,各种算法有如下共同之处:

  • 首先计算机要有操作对象,通过输入,给予计算机问题所涉及的对象;
  • 最后要能得到运行结果,即有输出;
  • 在输入与输出之间是具体的方法和步骤,这些方法和步骤必须是确定的、正确的、有限的、有效的、通用的。

因而,运行于计算机的各种算法有如下特征:

  • 输入:算法从一个指定集合得到输入值,可以有 0 个、1 个或多个值,由赋值或输入语句实现;
  • 输出:对每个输入值,算法都要从指定的集合中产生输出值,输出值就是问题的解,可以有 1 个或多个输出值,由输出语句实现;
  • 确定性:算法的步骤必须准确定义,不能产生歧义;
  • 正确性:对每一次输入值,算法都应产生正确的输出值;
  • 有限性:对任何输入,算法都应在有限步骤之后产生输出;
  • 有效性:算法每一步必须能够准确地执行,并在有限时间内完成;
  • 通用性:算法不只是用于特定的输入值,应该可以用于满足条件的所有问题。

【实例 1】找出计算机软件专业录取的新生中高考总分的最高分。

这个问题等价于求有限整数序列中最大值的算法,可采取以下步骤。

  • 将序列中第一个整数设为临时最大值(max);
  • 将序列中下一个整数与临时最大值比较,如果这个数大于临时最大值,临时最大值更新为这个整数;
  • 重复第(2)步,一直比较到序列中最后一个数时停止。此时临时最大值就是序列中的最大整数。

在此算法中,输入是软件专业所有新生的高考成绩,输出是高考最高分,算法过程从序列第一项开始,并把序列第一项设为临时最大值的初始值,接着逐项检查,如果有一项超过最大值,就把最大值更新为这一项的值,检查到序列的最后一项结束。

算法每进行一步,要么是比较最大值和这项的大小,要么是更新最大值的值,所以每一步的操作都是确定的,能保证最大值是已检查过的最大整数,结果是正确的。

如果序列包含 n 个整数,经过 n-1 次比较就结束,所以算法步骤是有限的、有效的。这个算法可以用于求任何有限整数序列问题的最大元素,所以它是通用的。

算法的4种表示方法

算法可以用自然语言、程序框图、N-S 图、伪代码、计算机语言表示。上面的实例就是用自然语言描述求整数序列最大值的算法。

1) 程序框图

程序框图又叫流程图,是由一些规定的图形、流程线和文字说明来直观描述算法的图形。程序框及其说明如下表所示。

表 程序框及其说明

例如,画出实例 1 的算法流程图。

图 3

2) N-S图

流程图由一些特定意义的图形、流程线及简要的文字说明构成,它能清晰、明确地表示程序的运行过程。因为在使用过程中发现流程线不是必需的,人们设计了一种新的流程图,它把整个程序写在一个大框内,这个大框图由若干个小的基本框图构成,这种流程图简称 N-S 图。

N-S图是无线的流程图,又称盒图,在 1973 年由美国两位学者 I.Nassi 和 B.Shneiderman 提出。

例如,下面是实例 1 算法的 N-S 图。

图 4

3) 伪代码(Pseudocode)

伪代码是一种介于自然语言与编程语言之间的算法描述语言,便于理解,并不依赖于语言,它用来表示程序执行过程,而不一定能编译运行的代码。使用伪代码的目的是为了使被描述的算法可以容易地以任何一种编程语言实现。

例如:

IF 九点以前 THEN
做私人事务;
ELSE 9点到18点 THEN
工作;
ELSE
下班;
END

4) 计算机语言(Computer Language)

计算机语言的种类非常多,总的来说可以分成机器语言、汇编语言、高级语言三大类。

计算机所能识别的语言只有机器语言,即由 0 和 1 构成的代码。但通常人们编程时,并不采用机器语言,因为它非常难于记忆和识别。汇编语言的实质和机器语言是相同的,都是直接对硬件操作,只不过指令采用了英文缩写的标识符,更容易识别和记忆。

高级语言是目前绝大多数编程者的选择,它并不是特指某一种具体的语言,而是包括了很多编程语言,如目前流行的 C、C++、C#、Java、VB、VC、FoxPro、Delphi 等,这些语言的语法、命令格式都各不相同。

例如,下面是实例 1 算法的C语言程序。

#include <stdio.h>

int main()
{
    int a[100],i,n,max;
    scanf("%d", &n);
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    max=a[0];
    for(i=1;i<=n-1;i++)
    {
        if(a[i]>=max)
        {
            max=a[i];
        }
    }
    printf("%d",max);
}
  • 19
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值