算法和算法分析

1.算法

算法(algorithm)是对特定问题求解步骤的一种描述,它是指令有限序列,其中每一条指令表示一个或多个操作;此外,一个算法还具有下列5个重要特性:

(1)有穷性

(2)确定性

(3)可行性

(4)输入

(5)输出

2.算法设计的要求

通常设计一个“好”的算法应考虑达到以上目标:

(1)正确性(correctness)---算法应当满足具体问题的需求。

(2)可读性(readability)---算法主要是为了人的阅读与交流,其次才是机器执行。

(3)健壮性()---当输入数据非法时,算法也能适当地做出反应或进行处理,而不会产生莫明其妙的输出结果。

(4)效率与低存储量需求---效率指的是算法执行的时间。对于同一个问题如果有多个算法可以解决,执行时间短的算法效率高。存储量需求指算法执行过程中所需要的最大存储空间,效率与低存储量需求这两者都与问题的规模有关。

3.算法效率的度量

算法执行时间需通过依据该算法编制的程序在计算机上运行时所消耗的时间来度量,而度量一个程序的执行时间通常有两种方法。

(1)事后统计的方法

(2)事前分析估算的方法---一个用高级程序语言编写的程序在计算机上运行时所消耗的时间取决于下列因素:

=>依据的算法选用何种策略;

=> 问题的规模;

=>书写程序的语言,对于同一个算法,实现语言的级别越高,执行效率就越低;

=>编译程序产生的机器代码的质量;

=>机器执行指令的速度;

一个算法是由控制结构(顺序、分支和循环3种)和原操作(指固有数据类型的操作)构成的,则算法时间取决于两者的综合效果。为了便于比较同一问题的不同算法,通常的做法是从算法中选取一种对于所研究的问题(或算法类型)来说是基本操作的原操作,以该基本操作重复执行的次数作为算法的时间量度。

4.算法的存储空间需求

类似于算法的时间复杂度,本教学资源以“空间复杂度度”(space complexity)作为算法所需存储空间日量度,记作:

S(n)=O(f(n))  //n为问题的规模( 或大小)。

演示1:试写一算法,自大至小依次输出顺序读入的三个整数X,Y和Z的值

时间: 2024-11-21 01:53:53

算法和算法分析的相关文章

数据结构基本概念及算法和算法分析 -- 引自《新编数据结构习题与解析》(李春葆等著)

本文引自<新编数据结构习题与解析>(李春葆等著)第1章. 1. 数据结构的基本概念 1.1 数据 数据是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称.例如,整数.实数和字符串都是数据. 1.2 数据元素 数据元素也称为节点,是表示数据的基本单元,在计算机程序中通常作为一个整体进行考虑和处理. 1.3 数据项 数据项是数据的最小单位.数据元素可以由若干个数据项组成.例如,学生记录就是一个数据元素,它由学号.姓名.性别等数据项组成. 1.4 数据对象

数据结构与算法:算法分析

目录 实验研究 常用函数 渐近分析  一.实验研究(Experimental studies) 1.运行时间测量 时钟时间 time.time() CPU时间 time.clock() 基准时间 timeit.timeit() 在执行算法的时候,我们可以通过改变输入规模的大小和记录花费的时间来研究运行时间. 在python中使用time模块的time函数来记录算法的运行时间: from time import time start_time=time() run algorithm end_ti

普林斯顿公开课 算法1-1:算法分析

为什么要分析算法 分析算法能够预測算法的性能,比較算法之间的优劣,保证算法的正确性,理解算法的理论基础. 成功算法的样例 离散傅立叶变换,假设使用暴力方法,那么算法的复杂度是是N^2,假设使用FFT高速傅立叶变换能够实现O(N logN)复杂度 N-body模拟:使用Barnes-hut算法能够将复杂度减少到N logN 顺便发一张N-body模拟的炫图 Barnes-Hut算法示意图 算法分析的步骤 观察问题的特征和想到得到的结果 依据观察结果提出如果 使用如果来预測可能发生的情况 检測预測结

无限大整数相加算法的C语言源代码

忙里偷闲,终于完成了无限大整数相加算法的C语言代码,无限大整数相加算法的算法分析在这里. 500位的加法运行1000次,不打印结果的情况下耗时0.036秒,打印结果的情况下耗时16.285秒. 下面是源码: #include <stdio.h> #include <stdlib.h> #include<string.h> #include <time.h> #define MAXNUM 1000000000000000000 /* 存储数据用的结构 long

Javascript之排序算法

常用排序方法 算法简介 算法描述 算法实现 算法分析 插入算法 通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入.插入排序在实现上,通常采用in-place排序(即只需要用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间. 1.从第一个元素开始,该元素可以认为已经被排序: 2.取出下一个元素,在已经排序的元素序列中从后向前扫描: 3.如果该元素(已排序)大于新元素,将该元素移到下一个位置: 4.重复步

算法艺术与信息学竞赛书摘

<算法艺术与信息学竞赛>这本书我详细看了1.1.1.2.1.3,之后就看得不是很懂了,所以还是把摘要写出来,方便让我知道到底能学到什么. 第一章 算法与数据结构 “数据结构+算法=程序设计” 从理论分析和实际应用两方面阐述了算法与数据结构的基本知识. 1.1 概括的叙述了算法.数据结构.以及计算理论的一些概念. 1.2从实例出发,概括的介绍了一些基本算法,包括美剧.贪心.递归.递推. 1.3介绍基本数据结构,包括线性表队列.栈.树.二叉树.以及图遍历与拓扑排序. 1.4介绍了一些实用数据结构,

数据结构基本概念和算法分析

一.数据结构基本概念 1. 数据:数据是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称. 2. 数据元素:数据元素是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理.一个数据元素可由若干个数据项组成.数据项是数据的不可分割的最小单位. 3. 数据对象:数据对象是性质相同的数据元素的集合,是数据的一个子集,如整型数据对象. 4. 数据结构:数据结构是相互之间存在一种或多种特定关系的数据元素的集合.根据数据元素之间关系的不同特性,通常有下列4类

分治策略(2)&mdash;&mdash;算法导论(4)

1. 引言     这一篇博文首先会介绍基于分治策略的矩阵乘法的Strassen算法,然后会给出几种求解递归式的方法.   2. 矩阵乘法的Strassen算法 (1) 普通矩阵乘法算法     矩阵乘法的基本算法的计算规则是:         若A=(aij)和B=(bij)是n×n的方阵(i,j = 1,2,3...),则C = A · B中的元素Cij为:     下面给出Java实现代码: public static void main(String[] args) { int[][]

几种常见的排序算法分析学习

目录(?)[-] 冒泡排序 选择排序 1 直接插入排序 1 二分查找插入排序 希尔入排序 快速排序 归并排序 总结 本篇博客知识点 分别描述了 冒泡,选择,直接插入,二分插入,希尔,快速以及归并排序.同时还有Java实现代码,算法分析和示意图 冒泡排序 算法描述 设待排序记录序列中的记录个数为n 一般地,第i趟起泡排序从1到n-i+1 依次比较相邻两个记录的关键字,如果发生逆序,则交换之. 其结果是这n-i+1个记录中,关键字最大的记录被交换到第n-i+1的位置上,最多作n-1趟. 算法实例 经