1.2算法和算法评价

1.2.1 算法的基本概念

算法(Algorithm〉是对特定问题求解步骤的一种描述,它是指令的有限序列,其中的每条指令表示一个或多个操作。此外,一个算法还具有下列5个重要特性:
1)有穷性。一个算法必须总在执行有穷步之后结束,且每一步都可在有穷时间内完成。
2)确定性。算法中每条指令必须有确切的含义,对于相同的输入只能得出相同的输出。
3)可行性。算法中描述的操作都可以通过已经实现的基本运算执行有限次来实现。
4)输入。一个算法有零个或多个输入,这些输入取自于某个特定的对象的集合。
5)输出。一个算法有一个或多个输出,这些输出是与输入有着某种特定关系的量。

注:算法必须是有穷的,而程序可以是无穷的。

通常,设计一个“好”的算法应考虑达到以下目标:
1)正确性。算法应能够正确地解决求解问题。
2)可读性。算法应具有良好的可读性,以帮助人们理解。
3)健壮性。输入非法数据时,算法能适当地做出反应或进行处理,而不会产生莫名其妙的输出结果。
4)效率与低存储量需求。效率是指算法执行的时间,存储量需求是指算法执行过程中所需要的最大存储空间,这两者都与问题的规模有关。
高效率:执行速度快,时间复杂度低。
低存储量:不费内存,空间复杂度低。

1.2.2算法效率的度量

算法效率的度量是通过时间复杂度和空间复杂度来描述的。
1.时间复杂度
一个语句的频度是指该语句在算法中被重复执行的次数。算法中所有语句的频度之和记为T(n),它是该算法问题规模n的函数,时间复杂度主要分析T(n)的数量级。算法中基本运算(最深层循环内的语句)的频度与Tn)同数量级,因此通常采用算法中基本运算的频度fn)来分析算法的时间复杂度R。因此,算法的时间复杂度记为 T(n)= O(fn))
O的含义是T(n)的数量级,其严格的数学定义是:若T(n)和f八n)是定义在正整数集合上的两个函数,则存在正常数C和no,使得当n≥no时,都满足0≤T(n)≤Cf(n)。
算法的时间复杂度不仅依赖于问题的规模n,也取决于待输入数据的性质(如输入数据元素的初始状态)。例如,在数组A [ 0····n-1]中,查找给定值k的算法大致如下:

(1)i=n-1;
(2)while(i>=0& & (A[i] !=k))
(3)i--;
(4)return i;

该算法中语句3(基本运算)的频度不仅与问题规模n有关,而且与输入实例中A的各元素的取值及k的取值有关:
①若A中没有与k相等的元素,则语句3的频度f(n)=n。
②若A的最后一个元素等于k,则语句3的频度f(n)是常数0。
最坏时间复杂度 是指在最坏情况下,算法的时间复杂度。
平均时间复杂度 是指所有可能输入实例在等概率出现的情况下,算法的期望运行时间。
最好时间复杂度 是指在最好情况下,算法的时间复杂度。
一般总是考虑在最坏情况下的时间复杂度,以保证算法的运行时间不会比它更长。在分析一个程序的时间复杂性时,有以下两条规则:
a)加法规则
多项相加,只保留最高阶的项,且系数变为1.
b)乘法规则
多项相乘,都保留。

常见的渐近时间复杂度为

记忆口诀:常对幂指阶。
注:①顺序执行的代码只会影响常数项可以忽略。
②只需要挑循环中的一个基本操作分析它的执行次数与n的关系即可。
③如果有多层嵌套循环只需要关注最深层循环循环了几次。
2.空间复杂度
算法的空间复杂度S(n)定义为该算法所耗费的存储空间,它是问题规模n的函数。记为S(n)= O(g(n)) 一个程序在执行时除需要存储空间来存放本身所用的指令、常数、变量和输入数据外,还需要一些对数据进行操作的工作单元和存储一些为实现计算所需信息的辅助空间。若输入数据所占空间只取决于问题本身,和算法无关,则只需分析除输入和程序之外的额外空间。
算法原地工作是指算法所需的辅助空间为常量,即O(1)。

常见的渐近空间复杂度为

记忆口诀:常对幂指阶。

【数据结构】之算法和算法评价相关推荐

  1. 二、【绪论】算法和算法评价

    算法和算法评价 1 算法的基本概念 算法(Algorithm)是对特定问题求解步骤的一种描述,它是指令的有限序列,其中的每条指令表示一个或多个操作.一般具有下列5个重要特性: 有穷性:一个算法必须在执 ...

  2. 走进算法和数据结构(一)——算法绪论(一)

    14天阅读挑战赛 很偶然的机会,看到了CSDN举办14天阅读打卡活动,是关于算法的有关内容,正巧,自己也想写写算法.数据结构的知识,于是,借助这个机会,开始自己写算法和数据结构的专题内容. 算法和数据 ...

  3. 数据结构与算法:算法简介

    数据结构与算法:算法简介 雪柯 大工生物信息 提笔为写给奋进之人 已关注 你说呢 . shenwei356 等 70 人赞同了该文章 引用自算法图解,作者[美] Aditya Bhargava 译袁国 ...

  4. 标准发布丨央行发布《人工智能算法金融应用评价规范》

    2021-05-11 11:12:26 来源:中国人民银行 为全面提升人工智能技术在金融领域应用和管理水平,推动金融与科技深度融合协调发展,中国人民银行制定了<人工智能算法金融应用评价规范> ...

  5. javascript数据结构与算法---检索算法(二分查找法、计算重复次数)

    javascript数据结构与算法---检索算法(二分查找法.计算重复次数) /*只需要查找元素是否存在数组,可以先将数组排序,再使用二分查找法*/ function qSort(arr){if (a ...

  6. 算法与数据结构_数据结构与算法专题--算法基本概念

    很多开发者都知道"程序=数据结构+算法"这个著名的公式,并不真正明白算法的定义或概念.究竟什么是算法呢?从字面意义上理解,算法即用于计算的方法,通过这种方法可以达到预期的计算结果. ...

  7. 【算法与数据结构专场】BitMap算法基本操作代码实现

    上篇我们讲了BitMap是如何对数据进行存储的,没看过的可以看一下[算法与数据结构专场]BitMap算法介绍 这篇我们来讲一下BitMap这个数据结构的代码实现. 回顾下数据的存储原理 一个二进制位对 ...

  8. 数据结构-常用的查找算法

    总第124篇/张俊红 本篇讲讲数据结构里面常用的几个查找算法,数据结构理论篇系列差不多接近尾声了,接下来会分享一些比较特殊的概念,比如KMP.郝夫曼树等等,讲完概念以后会进入刷题阶段.刷题会用Pyth ...

  9. Python数据结构与算法(一)--算法和时间复杂度

    最近下班一直在学习和总结Python,最近在整理数据结构和算法这方面的知识,虽然大学的时候也学过数据结构(c语言版本),但是工作这几年一直在做前端所以,这方面的知识也忘了差不多,所以就想整理一下,方便 ...

最新文章

  1. Python-anaconda-Spyder使用matplotlib画图无法显示报错解决:Figures now render in the Plots pane by default. To mak
  2. POJ_3685_Matrix_(二分,查找第k大的值)
  3. Python3NumPy——数组(2)之数学空间与NumPy空间
  4. parallelstream启动的线程数_谈谈并行流parallelStream
  5. JPA中实现双向一对一的关联关系
  6. [翻译]ElasticSearch官方文档-安装
  7. python文件管理
  8. 通过实现IHttpModule初始化Nhibernate的Session
  9. 解决filezilla中无法显示中文的文件名
  10. SVG_16_defs标签_use标签_style标签_红绿灯效果
  11. SNF快速开发平台2020版
  12. 耗时10个小时用纯HTML和CSS写成的小兔鲜儿
  13. LeetCode198打家劫社(线性动态规划)
  14. 2022-2027年中国企业社交网络市场规模现状及投资规划建议报告
  15. Python爬虫实战+数据分析+数据可视化(豆瓣八佰电影影评)
  16. Axure RP9教程 内部框架
  17. 上海财经大学如何构建量化高频数据中心?
  18. mysql-readme
  19. 苹果ios手机如何更换微信图标详细图文+视频教程,附微信图标下载
  20. [医疗信息化][DICOM教程]DICOM标准简介

热门文章

  1. java控制语句案例_Java基础语法—流程控制语句
  2. mysql用sql语句怎么做个脚本备份_mysql备份脚本
  3. Linux 系统中的定时任务及延时任务
  4. ceil和floor
  5. 排查指南 | 两个案例学会从埋点排查 iOS 离线包
  6. 如何将业务系统的数据抽取汇聚到数据中台?
  7. Knative 快捷操作命令 Kn 介绍
  8. 道旅:使用ARMS做业务监控数据清洗
  9. 命令行工具开发:如何快速实现命令行提示?
  10. 一眼看穿的最佳图像标记工具!