首页 > 编程笔记 > Java笔记

什么是算法,看完本文就彻底明白了!

算法(Algorithm)是解决特定问题的求解步骤,在计算机中表现为有限的一组操作,每一个操作都能完成特定的功能。

例如,求 n 个数中最大者的问题,其算法描述如下:
1) 定义一个数组对象 a 并赋值,用数组中第一个元素初始化 max,即初始时假定第一个数最大。
int a[]={60,36,12,31,78,93,82,26};
max=a[0];
2) 依次把数组 a[] 中其余的 n-1 个数与 max 进行比较,遇到较大的数时,将其赋值给 max。
for(i=0; i < a.length; i++) // for循环处理
    // 判断是否满足 max 小于 a[i] 的条件
    if(max < a[i])
        // 若满足条件,则将 a[i] 赋值给 max
        max = a[i];
System.out.println("max=:" + max);
最后,max 中的数就是 n 个数中的最大者。

算法的5个特性

算法具有以下 5 个特性。

1) 有穷性(Finiteness)

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

2) 确定性(Definiteness)

算法的每个步骤都具有确定的含义,不会出现二义性。算法在一定条件下只有一条执行路径,也就是相同的输入只能有一个唯一的输出结果。

3) 可行性(Feasibility)

算法的每个操作都能够通过执行有限次基本运算完成。

4) 输入(Input)

算法具有零个或多个输入。

5) 输出(Output)

算法至少有一个或多个输出。输出的形式可以是打印输出,也可以是返回一个或多个值。

算法的描述

算法的描述方式有多种,如自然语言、类语言(或称为伪代码)、程序流程图及程序设计语言(如 Java、Python、C、C++)等。

其中,自然语言描述可以是汉语或英语等文字描述;类语言类似于程序设计语言形式,但是不能直接运行;程序流程图的优点是直观,但是不易直接转化为可运行的程序;采用程序设计语言描述算法,就是直接利用像 Java、Python、C、C++ 等语言来表述,其优点是可以直接在计算机上运行。

例如,判断正整数 m 是否为质数,算法可用以下几种方式描述。

1) 程序流程图


图 1 判断m是否为质数的程序流程图

采用程序流程图描述算法比较直观,可读性强,缺点是不能直接转换为计算机程序,移植性不好。

2) 自然语言

利用自然语言描述“判断m是否为质数”的算法如下:
  1. 输入正整数m,令i=2。
  2. 若 i≤ m 的平方根,则令 m 对 i 求余,将余数送入中间变量 r;否则输出“m是质数”,算法结束。
  3. 判断 r 是否为零。若为零,则输出“m不是质数”,算法结束;若 r 不为零,则令 i 增加 1,转到第二步执行。

不难看出,采用自然语言描述算法直观性和可读性不强。

3) 类语言

类 Java 语言描述如下:
void IsPrime() // 判断 m 是否为质数的函数
{
    input(m);  // 输入正整数 m
    for(i=2; i <= sqrt(m); i++) // for循环处理
    {
        r = m % i; // 求余数
        if(r == 0) // 如果 m 能被整除
        {
            print("m不是质数!"); // 输出信息
            break; // 退出循环
        }
    }
    print("m是质数!"); // 输出信息
}

4) 程序设计语言

Java 语言描述如下:
// 判断m是否为质数
void IsPrime(){
    Scanner sc = new Scanner(System.in);
    System.out.print("请输入一个正整数:"); // 输出信息
    int m = sc.nextInt(); // 输入正整数m
    for (int i = 2; i <= Math.sqrt(m); i++) // for循环处理
    {
        r = m % i; // 求余数
        if (r == 0) // 如果 m能被整除
        {
            System.out.println("m不是质数!"); // 输出信息
            break; // 退出循环
        }
    System.out.print("m是质数!"); // 输出信息
}
可以看出,类语言的描述除了没有变量的定义、输入和输出的写法外,与程序设计语言的描述差别不大,类语言的描述可以转换为直接运行的计算机程序。

声明:《Java系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。