大剑无锋之如何评判一个算法的优劣【面试推荐】
①时间复杂度:同样的输入规模(问题规模)花费多少时间
②空间复杂度:同样的输入规模花费多少空间(主要是内存)
以上两点越小越好
③稳定性(健壮性):不会因为输入的不同而导致不稳定的情况发生
④算法思路是否简单(可读性):越简单越容易实现越好
补充:
同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。一个算法的评价主要从时间复杂度和空间复杂度来考虑。
时间复杂度
算法的时间复杂度是指执行算法所需要的计算工作量。一般来说,计算机算法是问题规模n 的函数f(n),算法的时间复杂度也因此记做。
T(n)=Ο(f(n))
因此,问题的规模n 越大,算法执行的时间的增长率与f(n) 的增长率正相关,称作渐进时间复杂度
空间复杂度
算法的空间复杂度是指算法需要消耗的内存空间。其计算和表示方法与时间复杂度类似,一般都用复杂度的渐近性来表示。同时间复杂度相比,空间复杂度的分析要简单得多。
正确性
算法的正确性是评价一个算法优劣的最重要的标准。
可读性
算法的可读性是指一个算法可供人们阅读的容易程度。
健壮性
健壮性是指一个算法对不合理数据输入的反应能力和处理能力,也称为容错性。
扩展资料
算法可大致分为基本算法、数据结构的算法、数论与代数算法、计算几何的算法、图论的算法、动态规划以及数值分析、加密算法、排序算法、检索算法、随机化算法、并行算法,厄米变形模型,随机森林算法。
算法可以宏泛的分为三类:
一,有限的,确定性算法 这类算法在有限的一段时间内终止。他们可能要花很长时间来执行指定的任务,但仍将在一定的时间内终止。这类算法得出的结果常取决于输入值。
二,有限的,非确定算法 这类算法在有限的时间内终止。然而,对于一个(或一些)给定的数值,算法的结果并不是唯一的或确定的。
三,无限的算法 是那些由于没有定义终止定义条件,或定义的条件无法由输入的数据满足而不终止运行的算法。通常,无限算法的产生是由于未能确定的定义终止条件。
参考资料:算法--百度百科
大剑无锋之如何评判一个算法的优劣【面试推荐】相关推荐
- 大剑无锋之Kafka的Patition的作用【面试推荐】
首先介绍patition的概念: Partition:为了实现扩展性,一个非常大的topic可以分布到多个broker (即服务器)上,一个topic可以分为多个partition,每个partiti ...
- 大剑无锋之TCP和HTTP的区别【面试推荐】
1.TCP连接 手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接.TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在"无差别&qu ...
- 大剑无锋之delete、drop、truncate【面试推荐】
一.delete 1.delete是DML,执行delete操作时,每次从表中删除一行,并且同时将该行的的删除操作记录在redo和undo表空间中以便进行回滚(rollback)和重做操作,但要注意表 ...
- 大剑无锋之内存泄漏是什么?【面试推荐】
百度词条给出的解释: 内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果. 理解点说☞: 一 ...
- 从C语言的角度重构数据结构系列(二)-如何衡量一个算法的优劣?
前言 在学习具体的数据结构和算法之前,每一位初学者都要掌握一个技能,即善于运用时间复杂度和空间复杂度来衡量一个算法的运行效率. 在这里给自己打个广告,需要的小伙伴请自行订阅. python快速学习实战 ...
- C语言中如何衡量算法的正确性,从C语言的角度重构数据结构系列(二)-如何衡量一个算法的优劣?...
前言 在学习具体的数据结构和算法之前,每一位初学者都要掌握一个技能,即善于运用时间复杂度和空间复杂度来衡量一个算法的运行效率. 在这里给自己打个广告,需要的小伙伴请自行订阅. python快速学习实战 ...
- 如何衡量一个算法的优劣?
一.通过计算算法的效率来衡量 算法效率分析分为两种:第一种是时间效率,第二种是空间效率.时间效率被称为时间复杂度,而空间效率 被称作空间复杂度. 时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度 ...
- 大剑无锋之如何查看一个java进程的堆内存使用情况(jps,jstack,jmap)【面试推荐】
jps jps主要用来输出JVM中运行的进程状态信息. 命令行参数选项说明如下: 1 -q 不输出类名.Jar名和传入main方法的参数 2 -m 输出传入main方法的参数 3 -l 输出main类 ...
- 大剑无锋之你了解HTTPS吗?那么它为什么安全?【面试推荐】
在面试中,我们经常遇到像HTTP方面的知识.比如: 大剑无锋之HTTP连接https://blog.csdn.net/qq_41946557/article/details/101155935 大剑无 ...
最新文章
- Android include 标签使用
- xpath 第一个元素_XPath
- Java千百问_03基本的语法(005)_二进制是如何做位运算的
- 双网卡上网冲突解决_双网卡冲突解决方法——route命令
- 【QT】QT从零入门教程(五):图像文件操作 [新建打开保存]
- 登录时判断用户还是管理员_高低温试验仪器出现内漏时如何判断是高压还是低压内漏?...
- OLAP-druid-大数据Week13-DAY2-druid
- php json 小红点,关于PHP的json_encode的一个小技巧
- ZYNQ7020 FPGA如何从Flash启动的详细步骤
- CREO图文教程:三维设计案例之水龙头的螺旋弹簧设计图文教程之详细攻略
- 项目文档说明前端部分怎么写?写进readme.md文件里面。
- 爬取豆瓣电影top250
- 懂点excel作图, 怎么让pyechart作的图更具“职场范“呢?丨pyechart工作作图模板
- C语言 梯形面积
- 串口DCB定义,配置例程
- 【案例23】NCC2005 was集群报非法登录的解决方案
- 磁盘阵列和存储服务器的区别
- SpringBoot中业务层标准开发和快速开发(大全)
- 一套完整的软件开发流程是怎样的?
- AP 计算机科学 全方位解读
热门文章
- CodeForces - 1459D Glass Half Spilled(dp)
- CodeForces - 1368F Lamps on a Circle(交互+贪心)
- LightOJ - 1404 Sending Secret Messages(最小费用最大流)
- CodeForces - 1203F1 Complete the Projects (easy version)(贪心)
- 使用二维码识别技术的好处_人脸识别技术什么场景都能使用吗?
- EOJ_1057_排名汇总
- EOJ_1020_铁路调度
- 表达式ya是不合法的c语言标识符,《C语言程序设计》试题3及答案
- 【Boost】boost库中thread多线程详解10——condition条件变量
- cocos2d-x游戏实例(9)-A星算法(5)