算法(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.量子算法

posted on 2016-08-31 21:07  kim001  阅读(163)  评论(0编辑  收藏  举报