算法和算法的衡量

一、算法

算法是为了解决某类问题而规定的一个有限长的操作序列。一个算法必须满足以下五个重要特性:

1.有穷性   对于任意一组合法输入值,在执行又穷步骤之后一定能结束,即:算法中的每个步骤都能在有限时间内完成;

2.确定性   对于每种情况下所应执行的操作,在算法中都有确切的规定,使算法的执行者或阅读者都能明确其含义即如何执行。并且在任何条件下,算法都只有一条执行路径;

3.可行性   算法中的所有操作都必须足够基本,都可以通过已经实现的基本操作运算有限次实现之;

4. 有输入   作为算法加工对象的量值,通常体现为算法中的一组变量有些输入量需要在算法执行过程中输入,而有的算法表面上可以没有输入已被嵌入算法之中;

5.有输出   它是一组与"输入"与确定关系的量值,使算法进行信息加工后得到的结果,这种确定关系即为算法的功能;

二、算法设计的原则

1.正确性   首先,算法应当以特定的"规格说明"方式给出的需求。

其次,对算法是否"正确"的理解可以有以下四个层次:

a.程序中不含语法错误;

b.程序对于几组输入数据能够得出满足要求的结果;

c.程序对于精心选择的、典型、苛刻切带有刁难性的儿组输入数据能够得出满足安求的结果;

d.程序对于一切合法的输入数据都能得出满足要求的结果;

2.可读性   算法主要是为了人的阅读与交流,其次才是为计算机执行。因此算法应该易于人的理解;另一方面,晦涩难读的程序易于隐藏较多错误而难以调试;

3.健壮性   当输入的数据非法时,算法应当恰当地作出反映或进行相应处理,而不是产生莫名奇妙的输出结果。 并且,处理出错的方法不应是中断程序的执行,而应是返回一个表示错误或错误性质的值,以便在更高的抽象层次上进行处理;

4.高效率与低存储量需求    通常,效率指的是算法执行时间;存储量指的是算法执行过程中所需的最大存储空间。两者都与问题的规模有关。

三、算法效率的衡量方法和准则

 事后统计法

缺点:1.必须执行程序

2.其它因素掩盖算法本质

     事前分析估算法

和算法执行时间相关的因素:

1.算法选用的策略

2.问题的规模

(3.编写程序的语言

4.编译程序产生的机器代码的质量

5.计算机执行指令的速度)(一般不考虑)

一个特定算法的"运行工作量"的大小,只依赖于问题的规模(通常用整数量n表示),或者说,它是问题规模的函数。

假如,随着问题规模n的增长,算法执行时间的增长率和f(n)的增长率相同,则可记作:

T(n)=O(f(n))   称T(n)为算法的(渐进)时间复杂度

如何估算算法的时间复杂度?

算法=控制结构+原操作

( 固有数据类型的操作)

算法的执行时间=Σ原操作(i)的执行次数x原操作(i)的执行时间(算法的执行时间与原操作执行次数之和成正比)

从算法中选取一种对于所研究的问题来说是基本操作的原操作,以该基本操作在算法中重复执行的次数作为算法运行时间的衡量准则

例一

  for(i=l;i<=n; ++i)
  for(j=l;j<=n; ++j)
  {c[ij]=0;
  for(k=l;k<=n; ++k)
  c[ij] += a[i,k]*b[kj];
  基本操作:乘法操作
  时间复杂度:O( n3)
 例二
  void sclect sort(int a[], int n) {
  将a中整数序列重新排列成自小至大有序的整数序列
  for(i=0; i<n-l; ++i){
   j=i;
  for(k=i+l:k<n; ++k )
  if(a[k]<a[j]) j=k;
  if(j!=i) a[j]←→a[i]
  }// select sort
基本操作:比较(数据元素)操作
时间复杂度:O(n2)
四、算法的存储空间需求
算法的空间复杂度
S(n)=O(g(n))
表示随着问题规模n的增大,算法运行所需存储量的增长率与g(n)的增长率相同。
算法的存储量包括:
              输入数据所占空间
              程序本身所占空间 
              辅助变量所占空间
若输入数据所占空间只取决与问题本身,和算法无关,则只需要分析除输入程序之外的辅助变量所占的额外空间。
若所需额外空间相对于输入数据量来说是常数,则称此算法为原地工作.

C语言数据结构(二)的更多相关文章

  1. R语言数据结构二

    上节我们讲到R语言中的基本数据类型,包括数值型,复数型,字符型,逻辑型以及对应的操作和不同数值类型之间的转换.众所周知,R语言的优势在于进行数据挖掘,大数据处理等方面,因此单个的数据并不能满足我们的需 ...

  2. 学习javascript数据结构(二)——链表

    前言 人生总是直向前行走,从不留下什么. 原文地址:学习javascript数据结构(二)--链表 博主博客地址:Damonare的个人博客 正文 链表简介 上一篇博客-学习javascript数据结 ...

  3. 使用C语言实现二维,三维绘图算法(1)-透视投影

    使用C语言实现二维,三维绘图算法(1)-透视投影 ---- 引言---- 每次使用OpenGL或DirectX写三维程序的时候, 都有一种隔靴搔痒的感觉, 对于内部的三维算法的实现不甚了解. 其实想想 ...

  4. 使用C语言实现二维,三维绘图算法(3)-简单的二维分形

    使用C语言实现二维,三维绘图算法(3)-简单的二维分形 ---- 引言---- 每次使用OpenGL或DirectX写三维程序的时候, 都有一种隔靴搔痒的感觉, 对于内部的三维算法的实现不甚了解. 其 ...

  5. 使用C语言实现二维,三维绘图算法(2)-解析曲面的显示

    使用C语言实现二维,三维绘图算法(2)-解析曲面的显示 ---- 引言---- 每次使用OpenGL或DirectX写三维程序的时候, 都有一种隔靴搔痒的感觉, 对于内部的三维算法的实现不甚了解. 其 ...

  6. Swift语言指南(二)--语言基础之注释和分号

    原文:Swift语言指南(二)--语言基础之注释和分号 注释 通过注释向自己的代码中注入不可执行的文本,作为你自己的笔记或提示.Swift编译器运行时会忽略注释. Swift的注释与C语言极其相似,单 ...

  7. #r语言(二)笔记

    #r语言(二)笔记 #早复习 #概述:R是用于统计分析.绘图的语言和操作环境 #对象: #数据类型--统称为对象 #向量(vector):用于存储数值型.字符型或逻辑型数据的一维数组. #定义向量: ...

  8. 从零开始学习R语言(二)——数据结构之“因素(Factor)”

    本文首发于知乎专栏:https://zhuanlan.zhihu.com/p/60101041 也同步更新于我的个人博客:https://www.cnblogs.com/nickwu/p/125370 ...

  9. C语言数据结构----栈与递归

    本节主要说程序中的栈函数栈的关系以及栈和递归算法的关系. 一.函数调用时的栈 1.程序调用时的栈是也就是平时所说的函数栈是数据结构的一种应用,函数调用栈一般是从搞地质向低地址增长的,栈顶为内存的低地址 ...

随机推荐

  1. tdf sample

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net ...

  2. C#并行库(TaskParallelLibrary)用法 z

    1. Task.Factory.StartNew(() => DoSomeWork());是异步的 下面的代码会先输出ddd,因为Task.Factory.Startnew不阻塞: var ta ...

  3. Vue项目中引入ElementUI

    前提:创建好的vue项目. 1.安装ElementUI 转到项目根目录,输入命令:#cnpm install element-ui --save-dev 2.在 main.js 引入并注册 impor ...

  4. IOS UIImagePickerController(拍照或者读取相册)

      UIImagePickerController ● 使用UIImagePickerController就可以进行拍照或者读取相册 ● 通过sourceType属性来决定拍照还是读取相册 ➢ UII ...

  5. (转)C++11使用emplace_back代替push_back (其中有关于右值引用)

    最近在写一段代码的时候,突然很好奇C++11中对push_back有没有什么改进以增加效率,上网搜了一些资料,发现果然新增了emplace_back方法,比push_back的效率要高很多. 首先,写 ...

  6. maven之构建多模块maven工程

    (一)环境搭建 1.Maven下载   ;   http://maven.apache.org/download.cgi 第一个在Linux使用,第二个是在Windows,第三和第四是源码: 我们将下 ...

  7. 【luogu P1455 搭配购买】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1455 一句话题目做法:并查集合并+01背包 启示:要每次再find一遍.路径压缩会快.因为合并的时候如果是1 ...

  8. 【luogu P3390 矩阵快速幂】 模板

    题目链接:https://www.luogu.org/problemnew/show/P3390 首先要明白矩阵乘法是什么 对于矩阵A m*p  与  B p*n 的矩阵 得到C m*n 的矩阵 矩阵 ...

  9. PAT1064. Complete Binary Search Tree

    1064. Complete Binary Search Tree 题目大意 给定一个序列, 求其 生成Complete BST 的层序遍历. 思路 最开始把这个题想复杂了, 还想着建立结构体, 其实 ...

  10. 时空隧道FQ

    给你推荐一款海外网站加速工具,为科技工作者.海外归国人员.企业团队.外贸工作者提供海外上网服务,永久免费. 国外网址:https://chrome.google.com/webstore/detail ...