算法(1)
算法(algorithm)
一、什么是算法
从字面意义上也比较好理解,算法也就是用于计算的方法,通过这种方法可以达到预期的计算结果。
专业解释是,算法是解决实际问题的一种精确描述方法、算法是对特定问题的求解步骤的一种精确描述方法等。
算法是模型分析的一组可行的、确定的和又穷的规则。
一个典型的算法都可以从中抽象出5个特征:有穷性、确切性、输入、输出、可行性。
二、算法的分类
1.按照应用分类
按照算法的应用领域,也就是解决的问题,算法可以分为基本算法、数据结构相关算法、几何算法、图论算法、规划算法、数值分析算法、加密/解密算法、排序算法、查找算法、并行算法和数论算法等。
2.按照确定性来分类
按照确定性来分类,可以分为确定性算法和非确定性算法
确定性算法:这类算法在有限的时间内完成计算,得到的结果是唯一的,且经常取决于输入值。
非确定性算法:这类算法在有限的时间内完成计算,但是得到的结果往往不是唯一的,也就是存在多只性。
3.按照算法的思路来分类
按照算法的思路来分类,算法可以分为递推算法、递归算法、穷举算法、贪婪算法、分治算法、动态规划算法和迭代算法等多种。
三、算法相关概念的区别
1、公式是算法,但算法不一定是公式
2.数据结构+算法+程序设计语言=程序 这里,数据结构往往表示处理的对象,算法是计算和处理的核心方法,程序设计语言是算法的实现方法。这几者的综合便构成一个实实在在的陈谷
四、算法的表示
算法可以采用自然语言表示、流程图表示、N-S图(盒图)表示和伪代码表示
五、算法的性能评价
好的算法执行效率高,所耗费的时间短;差的算法则往往需要耗费更多的时间,导致效率很低。
一个算法的优劣往往通过算法复杂度来衡量,算法的复杂度包括时间复杂度和空间复杂度两个方面。
1.时间复杂度
时间复杂度也就是通常所说的算法执行所需要耗费的时间,时间越短,算法越好。
2.空间复杂度
空间复杂度指的是算法程序在计算机中执行所需要消耗的存储空间。空间复杂度其实分为如下两个方面
(1)程序保存所需要的存储空间,也就是程序的大小(2)程序在执行过程中所需要消耗的存储空间资源,例如程序在执行过程中的中间变量等。
六、算法实例
查找数字
在一个数组中查找数据是经常用的操作(程序随机生成20个整数数据的数组,然后输入要查找的数据,接着,可以采用最简单的逐个对比的方法进行查找,也就是顺序查找)
伪代码如下
变量x<-输入待查找的数据
变量arr<-随机生出数据素组
for 1 to 20
if arr[i]==x
break;找到数据
else
输出该数据的位置
程序结束
完整代码:
import java.util.Random;
import java.util.Scanner;
public class p1 {
static int N = 20;
public static void main(String[] args) {
int[] arr = new int[N];
int x, n, i;
int f = -1;
Random r = new Random(); // 随机种子
for (i = 0; i < N; i++) {
arr[i] = r.nextInt(100); // 产生数组
}
System.out.println("随机生成的数据序列:\n");
for (i = 0; i < N; i++) {
System.out.print(arr[i] + " "); // 输出序列
}
System.out.println("\n\n");
System.out.println("输入要查找的整数:");
Scanner input = new Scanner(System.in);
x = input.nextInt(); // 输入要查找的数
for (i = 0; i < N; i++) { // 顺序查找
if (x == arr[i]) { // 找到数据
f = i;
break;
}
}
if (f < 0) { // 输出查找结果
System.out.println("没找到数据:" + x);
} else {
System.out.println("数据" + x + "位于数组的第" + (f + 1) + "个元素处.\n");
}
}
}
七、算法的新进展
1.并行算法与串行算法
2.遗传与进化算法
3.量子算法