算法是什么?算法的特性有哪些?详解算法相关知识
算法()是解决特定问题的求解步骤,在计算机中表现为有限的一组操作,每一个操作都能完成特定的功能。
例如,求 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) 有穷性()有穷性指的是算法在执行有限的步骤之后,自动结束而不会出现无限循环,并且每一个步骤在可接受的时间内完成。
2) 确定性()算法的每个步骤都具有确定的含义,不会出现二义性。算法在一定条件下只有一条执行路径,也就是相同的输入只能有一个唯一的输出结果。
3) 可行性()算法的每个操作都能够通过执行有限次基本运算完成。
4) 输入(Input)算法具有零个或多个输入。 5) 输出()算法至少有一个或多个输出。输出的形式可以是打印输出,也可以是返回一个或多个值。
算法的描述算法的描述方式有多种,如自然语言、类语言(或称为伪代码)、程序流程图及程序设计语言(如 Java、、C、C++)等。

其中,自然语言描述可以是汉语或英语等文字描述;类语言类似于程序设计语言形式,但是不能直接运行;程序流程图的优点是直观,但是不易直接转化为可运行的程序;采用程序设计语言描述算法,就是直接利用像 Java、、C、C++ 等语言来表述,其优点是可以直接在计算机上运行。
例如,判断正整数 m 是否为质数,算法可用以下几种方式描述。 1) 程序流程图

图 1 判断m是否为质数的程序流程图
采用程序流程图描述算法比较直观,可读性强,缺点是不能直接转换为计算机程序,移植性不好。
2) 自然语言利用自然语言描述“判断m是否为质数”的算法如下: 输入正整数m,令i=2。 若 i≤ m 的平方根,则令 m 对 i 求余,将余数送入中间变量 r;否则输出“m是质数”,算法结束。 判断 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是质数!"); // 输出信息
}
可以看出,类语言的描述除了没有变量的定义、输入和输出的写法外,与程序设计语言的描述差别不大,类语言的描述可以转换为直接运行的计算机程序。
























