时间复杂度

算法的时间复杂度

天大地大妈咪最大 提交于 2019-11-28 22:58:03
算法的时间复杂度 算法的时间复杂度 :在进行算法分析时,语句总的执行次数T(n)是关于问题 n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间度量,记:T(n)=O(f(n))。他表示随问题n的增加,算法执行时间的增长率和f(n)的增长率相同,f(n)是问题规模的某个函数。 一般情况:随着输入规模n的增加,T(n)增加最慢的算法为最优算法。一般表示法:O(1) O(n) O(n2)等等 那么如何分析一个算法的时间复杂度呢?即如何推导出大O阶呢,整理如下: –用常数1代替运行时间中的所有加法常数,例如:某个算法运行时间是1+1+1则认为是常数1表示O(1),常数都用1来代替。 –在修改后的运行函数中,只保留最高阶 –如果最高阶存在且不唯1,则去除与这个项相乘的常数 –得到的结果就是大O阶 线性阶 一般含有非嵌套循环涉及线性阶,线性阶就是随着问题规模n的扩大,对应计算次数呈直线增长。 平方阶 一般含有嵌套循环涉及平方阶,也就是说有两个for循环。 来源: https://blog.csdn.net/weixin_42050661/article/details/100084704

算法的时间复杂度

五迷三道 提交于 2019-11-28 22:31:39
1.度量一个程序(算法)执行时间的两种方法 事后统计的方法     这种方法可行, 但是有两个问题:     一是要想对设计的算法的运行性能进行评测,需要实际运行该程序;     二是所得时间的统计量依赖于计算机的硬件、软件等环境因素, 这种方式,要在同一台计算机的相同状态下运行,才能比较那个算法速度更快。 事前估算的方法通过分析某个算法的时间复杂度来判断哪个算法更优.   2.时间频度   基本介绍    时间频度 :一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。         一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)。       举例说明-基本案例        比如计算1-100所有数字之和, 我们设计两种算法:                  举例说明-忽略          来源: https://www.cnblogs.com/Diyo/p/11430775.html

排序——01

谁说胖子不能爱 提交于 2019-11-28 21:45:35
本文主要内容: 1.插入排序 2.希尔排序 3.直接选择排序 4.堆排序 1.排序:默认情况下为非降序排序 2.稳定性:能够保证排序过程中相同的数据排序前后相对位置不变 3.插入排序:减治算法排序 每次从无序区间选择第一个数插入到有序区间的合适位置(打牌) 时间复杂度:最坏o(n的平方):完全逆序 最好o(n):完全有序[从后往前找] 一般情况:o(n的平方) 越接近有序,执行时间效率越高 空间复杂度:o(1) 稳定性:稳定 计时:long begin = System.naoTime ();long end = System.naoTime (); System.out.println(end-begin); 4.希尔排序(Shell Sort):分组进行插入排序 分组越多:大数据可以很快走到最后,每次分组排序后,数据不太有序 分组越少:每次分组排序后,数据更有序 size = 10;gap = size; gap = gap/3+1;[4,2,1] gap = gap/2;[5,2,1] 前提:利用插入排序中,数据越接近有序,时间效率越高。在插入排序之前做预排序(分组插排),使数据尽可能接近有序。 如何分组:一开始分很多组,越来越少 时间复杂度:最好:o(n) 平均:O(n 1.3,n 1.4) 最坏:O(n^2) 空间复杂度:O(1) 稳定性:不稳定

十大经典排序算法

无人久伴 提交于 2019-11-28 19:59:43
排序概念 对一序列对象根据某个关键字进行排序。 算法总结 名词解释: n: 数据规模 k: “桶”的个数 In-place: 占用常数内存,不占用额外内存 Out-place: 占用额外内存 专业术语: 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面; 不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面; 内排序:所有排序操作都在内存中完成; 外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行; 时间复杂度: 一个算法执行所耗费的时间。 空间复杂度:运行完一个程序所需内存的大小。 算法分类 比较和非比较的区别 常见的 快速排序、归并排序、堆排序、冒泡排序 等属于 比较排序 。 在排序的最终结果里,元素之间的次序依赖于它们之间的比较。每个数都必须和其他数进行比较,才能确定自己的位置。 在 冒泡排序 之类的排序中,问题规模为n,又因为需要比较n次,所以平均时间复杂度为O(n²)。在 归并排序、快速排序 之类的排序中,问题规模通过 分治法 消减为logN次,所以时间复杂度平均 O(nlogn) 。 比较排序的优势是,适用于各种规模的数据,也不在乎数据的分布,都能进行排序。可以说, 比较排序适用于一切需要排序的情况。 计数排序、基数排序、桶排序 则属于 非比较排序 。非比较排序是通过确定每个元素之前,应该有多少个元素来排序

Java集合之ArrayList源码分析

混江龙づ霸主 提交于 2019-11-28 18:25:40
Java集合之ArrayList源码分析 个人开发环境 java环境:Jdk1.8.0_60 编译器:IntelliJ IDEA 2017.1.4 源码连接:待整理 原文链接: https://juejin.im/post/5cb161b3e51d456e7c0cdad4#heading-16 (个人附加了英文注释,以及为了更好阅读调整了一下,英文不好趁看源码机会冲冲电,理解不当望大佬们指出,仅供个人学习总结使用,如有侵权,联删!!!) UML图 源码解析 属性 /** * Default initial capacity. * 默认初始化容量为 10 */ private static final int DEFAULT_CAPACITY = 10; /** * Shared empty array instance used for empty instances. * 一个空数组,当用户指定该ArrayList为0时,返回该空数组 */ private static final Object[] EMPTY_ELEMENTDATA = {}; /** * Shared empty array instance used for default sized empty instances. * We distinguish this from EMPTY_ELEMENTDATA

【算法之常见的时间复杂度】

与世无争的帅哥 提交于 2019-11-28 17:37:19
原文: http://blog.gqylpy.com/gqy/341 补充 空间复杂度:用来评估算法占用内存大小的式子。 什么是算法? 算法(Algorithm):一个计算过程,解决文件的方法 时间复杂度 先总结 时间复杂度是用来评估算法运行时间的一个式子(单位)。 一般来说,时间复杂度高的算法比复杂度低的算法慢。 长安的时间复杂度(按效率排序): O(1) < O(logn) < O(n) < O(nlogn) < O(n2) < O(n2logn) < O(n3) 不常见的时间复杂度: O(n!) O(2n) O(nn) 对应的复杂度 下面这张图和上面这张一样,其复杂度不变。 不管for循环内执行多少代码,有x层for循环,复杂度就是O(nx)。 原文: http://blog.gqylpy.com/gqy/341 来源: https://www.cnblogs.com/ggg566/p/11416686.html

程序员须知:面试中最容易被问到的18个算法题(附答案!)

孤街浪徒 提交于 2019-11-28 16:47:07
原创 IT168企业级 2017-09-20 17:21 算法是比较复杂又基础的学科,每个学编程的人都会学习大量的算法。而根据统计,以下这18个问题是面试中最容易遇到的,本文给出了一些基本答案,供算法方向工程师或对此感兴趣的程序员参考。 1)请简单解释算法是什么? 算法是一个定义良好的计算过程,它将一些值作为输入并产生相应的输出值。简单来说,它是将输入转换为输出的一系列计算步骤。 2)解释什么是快速排序算法? 快速排序算法能够快速排序列表或查询。它基于分割交换排序的原则,这种类型的算法占用空间较小,它将待排序列表分为三个主要部分: 小于Pivot的元素 枢轴元素Pivot(选定的比较值) 大于Pivot的元素 3)解释算法的时间复杂度? 算法的时间复杂度表示程序运行完成所需的总时间,它通常用大O表示法来表示。 4)请问用于时间复杂度的符号类型是什么? 用于时间复杂度的符号类型包括: Big Oh:它表示小于或等于目标多项式 Big Omega:它表示大于或等于目标多项式 Big Theta:它表示与目标多项式相等 Little Oh:它表示小于目标多项式 Little Omega:它表示大于目标多项式 5)解释二分法检索如何工作? 在二分法检索中,我们先确定数组的中间位置,然后将要查找的值与数组中间位置的值进行比较,若小于数组中间值,则要查找的值应位于该中间值之前,依此类推

百度测试实习面试记录

北城以北 提交于 2019-11-28 16:21:05
内推QA实习后当晚收到电话确认面试时间,一面为电话面试,时间大概30多分钟。网络电话效果不好,需要找个安静的地方才能接听电话。 1.简述下自己做过的项目 2.在项目中负责哪些部分,主要解决的问题 项目因为是NLP方向的,和面试的内容不符合,就没有再深入的提问了 3.介绍一下TCP协议 4.TCP协议的三次握手及四次挥手具体的过程 5.linux的命令是否熟悉,占用cpu前5的app如何进行查看 ps -aux | sort -k4nr | head -N head表示显示行数,ps显示瞬间进程的状态,sort表示按照第几列进行排序 top -M top -P top命令是实习进行监控的,-M表示内存,-P表示CPU 6.linux下查看日志的命令 # uname -a # 查看内核/操作系统/CPU信息 # cat /etc/issue # cat /etc/redhat-release # 查看操作系统版本 # cat /proc/cpuinfo # 查看CPU信息 # hostname # 查看计算机名 # lspci -tv # 列出所有PCI设备 # lsusb -tv # 列出所有USB设备 # lsmod # 列出加载的内核模块 # env # 查看环境变量 资源: # free -m # 查看内存使用量和交换区使用量 # df -h # 查看各分区使用情况 # du

函数调用的时间复杂度

北城以北 提交于 2019-11-28 16:08:40
函数调用的时间复杂度 常数阶 O(1) 举例:245087 线性阶 O(n) 举例:3n+4 平方阶 O(n2) 举例:3n2+4n+5 对数阶 O(logn) 举例:3log(2)n+4 nlogn阶 O(nlogn) 举例:2n+3nlog(2)n+4 立方阶 O(n3) 举例:3n3+n2+4n+5 指数阶 O(2n) 举例:2n 常用的时间复杂度耗费的时间从小到大依次是:O(1)< O(logn)< O(n)< O(nlogn)< O(n的2次幂)< O(n的3次幂)< O(2的n次幂)< O(n!)< O(n的n次幂) 来源: https://blog.csdn.net/weixin_42050661/article/details/100084794

算法的时间复杂度

我的梦境 提交于 2019-11-28 16:06:06
算法的时间复杂度 算法的时间复杂度:在进行算法分析时,语句总的执行次数T(n)是关于问题 n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间度量,记:T(n)=O(f(n))。他表示随问题n的增加,算法执行时间的增长率和f(n)的增长率相同,f(n)是问题规模的某个函数。 一般情况:随着输入规模n的增加,T(n)增加最慢的算法为最优算法。一般表示法:O(1) O(n) O(n2)等等 那么如何分析一个算法的时间复杂度呢?即如何推导出大O阶呢,整理如下: --用常数1代替运行时间中的所有加法常数,例如:某个算法运行时间是1+1+1则认为是常数1表示O(1),常数都用1来代替。 --在修改后的运行函数中,只保留最高阶 --如果最高阶存在且不唯1,则去除与这个项相乘的常数 --得到的结果就是大O阶 线性阶 一般含有非嵌套循环涉及线性阶,线性阶就是随着问题规模n的扩大,对应计算次数呈直线增长。 平方阶 一般含有嵌套循环涉及平方阶,也就是说有两个for循环。 来源: https://blog.csdn.net/weixin_42050661/article/details/100084753