目录 前言 复杂度 分析方法 大 O 复杂度表示法 例子-评估累加和的各种算法执行效率 算法 1(for 循环): 算法 2(嵌套 for 循环): 大 O 表示 时间复杂度分析 关注执行最多的一段代码 加法规则 乘法规则 常见时间复杂度 常量阶 O(1) 对数阶 O(logn).O(nlogn) 多参数阶 O(m+n).O(m*n) 空间复杂度分析 小结 前言 本笔记主要记录如何分析.统计算法的执行效率和资源消耗. 必须学会分析复杂度分析. 李柱明博客:https://www.cnblogs.…
我们都知道,数据结构和算法本身解决的是“快”和“省”的问题,即如何让代码运行得更快,如何让代码更省存储空间.所以,执行效率是算法一个非常重要的考量指标. 那如何来衡量你编写的算法代码的执行效率呢?这里就要用到我们今天要讲的内容:时间.空间复杂度分析.其实,只要讲到数据结构与算法,就一定离不开时间.空间复杂度分析.而且,我个人认为,复杂度分析是整个算法学习的精髓,只要掌握了它,数据结构和算法的内容基本上就掌握了一半. 复杂度分析实在太重要了,因此我准备用两节内容来讲.希望你学完这个内容之后,无论在…
数据结构解决的问题:“快” + “省”,即为时间,空间复杂度分析 1:为什么需要复杂度分析? 因为通过统计手段分析的结果受到两个因素的影响,一:测试结果非常依赖测试环境,二:测试结果受数据规模的影响很大 2:大O复杂度表示法 所有代码的执行时间T(n)与每行代码的执行次数n成正比. T(n) = O(f(n)) 3:时间复杂度分析: 渐进时间复杂度 1:只关注循环执行次数最多的一段代码 2:加法法则:总复杂度等于量级最大的那段代码的复杂度 3:乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘…
.katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > .katex-html { display: block; } .katex-display > .katex > .katex-html > .tag { position: absolute; right: 0px; } .katex { font: 1.21em/1.2 KaTeX_M…
三行代码实现.NET MVC统计显示页面的执行时间 超简单的实现方法 分析页面执行效率    博客页脚处添加了页面执行时间统计显示,如下图所示,也可以直接查看网页页脚处. 实现方法非常简单,只需三行代码(只算主要代码)即可: 第1行:在Controllers中添加一个BaseController类继承自System.Web.Mvc.Controller, 然后把其他的Controller类都继承自这个BaseController类,这里不算行数 public abstract class Bas…
上一节,我们讲了复杂度的大 O 表示法和几个分析技巧,还举了一些常见复杂度分析的例子,比如 O(1).O(logn).O(n).O(nlogn) 复杂度分析.掌握了这些内容,对于复杂度分析这个知识点,你已经可以到及格线了.但是,我想你肯定不会满足于此. 今天会继续给你讲四个复杂度分析方面的知识点,最好情况时间复杂度(best case time complexity).最坏情况时间复杂度(worst case time complexity).平均情况时间复杂度(average case tim…
目录 数据结构与算法 java描述 笔记 第一章 算法及其复杂度 算法的定义 算法性能的分析与评价 问题规模.运行时间及时间复杂度 渐进复杂度 大 O 记号 大Ω记号 Θ记号 空间复杂度 算法复杂度及其分析 O(1)⎯⎯取非极端元素 O(logn)⎯⎯进制转换 O(n)⎯⎯数组求和 O(n$^2$ )⎯⎯起泡排序 O(2$^r$ )⎯⎯幂函数 计算模型 递归 线性递归 递归算法的复杂度分析 递归跟踪法 递推方程法 二分递归 多分支递归 数据结构与算法 java描述 笔记 第一章 算法及其复杂度…
一.分类 1.内部排序和外部排序 内部排序:待排序记录存放在计算机随机存储器中(说简单点,就是内存)进行的排序过程. 外部排序:待排序记录的数量很大,以致于内存不能一次容纳全部记录,所以在排序过程中需要对外存进行访问的排序过程. 2.比较类排序和非比较排序 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序. 非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较…
一.动图演示 二.思路分析 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序:随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止. 简单插入排序很循规蹈矩,不管数组分布是怎么样的,依然一步一步的对元素进行比较,移动,插入,比如[5,4,3,2,1,0]这种倒序序列,数组末端的0要回到首位置很是费劲,比较和移动元素均需n-1次. 而希尔排序在数组中采用跳跃式分组的策略,通过某个增量将数组元素划分为若干组,然后分组进行插入排序,随后逐步缩…
一.动图演示 二.思路分析 例如从小到大排序: 1.  从第二位开始遍历, 2.  当前数(第一趟是第二位数)与前面的数依次比较,如果前面的数大于当前数,则将这个数放在当前数的位置上,当前数的下标-1, 3.  重复以上步骤,直到当前数不大于前面的某一个数为止,这时,将当前数,放到这个位置, 1-3步就是保证当前数的前面的数都是有序的,内层循环的目的就是将当前数插入到前面的有序序列里 4.  重复以上3步,直到遍历到最后一位数,并将最后一位数插入到合适的位置,插入排序结束. 根据思路分析,每一趟…
评估算法的性能 评价标准 正确性 可读性和易维护性 运行时间性能 空间性能(内存) 度量算法的运行时间 示例 """ Print the running times for problem sizes that double, using a aingle loop """ import time print("%12s%16s" % ("Problem Size", "Seconds"…
1.算法:算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作. 那么一个怎样的算法才能称得上是好算法,也就是说有没有什么标准来评判一个算法的好坏? 在此之前,咱们先来做个试验: 用两种方式来实现求裴波那契数列第n项的值,一种方式用递归方式,第二种方式用普通循环方式. 在得到结果之前,你猜猜那种方式计算结果更快一些,还是一样快? 测试代码如下(JavaScript): /** * 1.递归实现斐波那契数列: * 1,1,2,3,5... 第n项 = 第…
一.动图演示 二.思路分析 先来了解下堆的相关概念:堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆:或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆.如下图: 同时,我们对堆中的结点按层进行编号,将这种逻辑结构映射到数组中就是下面这个样子 该数组从逻辑上讲就是一个堆结构,我们用简单的公式来描述一下堆的定义就是: 大顶堆:arr[i] >= arr[2i+1] && arr[i] >= arr[2i+2]   小顶堆:arr[i]…
一.动图演 二.思路分析 基数排序第i趟将待排数组里的每个数的i位数放到tempj(j=1-10)队列中,然后再从这十个队列中取出数据,重新放到原数组里,直到i大于待排数的最大位数. 1.数组里的数最大位数是n位,就需要排n趟,例如数组里最大的数是3位数,则需要排3趟. 2.若数组里共有m个数,则需要十个长度为m的数组tempj(j=0-9)用来暂存i位上数为j的数,例如,第1趟,各位数为0的会被分配到temp0数组里,各位数为1的会被分配到temp1数组里...... 3.分配结束后,再依次从…
一.动图演示 二.思路分析 归并排序就是递归得将原始数组递归对半分隔,直到不能再分(只剩下一个元素)后,开始从最小的数组向上归并排序 1.  向上归并排序的时候,需要一个暂存数组用来排序, 2.  将待合并的两个数组,从第一位开始比较,小的放到暂存数组,指针向后移, 3.  直到一个数组空,这时,不用判断哪个数组空了,直接将两个数组剩下的元素追加到暂存数组里, 4.  再将暂存数组排序后的元素放到原数组里,两个数组合成一个,这一趟结束. 根据思路分析,每一趟的执行流程如下图所示: 三.负杂度分析…
一.动图演示 二.思路分析 快速排序的思想就是,选一个数作为基数(这里我选的是第一个数),大于这个基数的放到右边,小于这个基数的放到左边,等于这个基数的数可以放到左边或右边,看自己习惯,这里我是放到了左边, 一趟结束后,将基数放到中间分隔的位置,第二趟将数组从基数的位置分成两半,分割后的两个的数组继续重复以上步骤,选基数,将小数放在基数左边,将大数放到基数的右边,在分割数组,,,直到数组不能再分为止,排序结束. 例如从小到大排序: 1.  第一趟,第一个数为基数temp,设置两个指针left =…
相似度分析的,其中的分词可以采用HanLP即可: http://www.open-open.com/lib/view/open1421978002609.htm /*********************************************************** * @Title : SimilarityAnalyse.java * @Package : lsg.hawei.hanlp * @Description: TODO(用一句话描述该文件做什么) * @author…
一.动图演示 二.思路分析 1.  相邻两个数两两相比,n[i]跟n[j+1]比,如果n[i]>n[j+1],则将连个数进行交换, 2.  j++, 重复以上步骤,第一趟结束后,最大数就会被确定在最后一位,这就是冒泡排序又称大(小)数沉底, 3.  i++,重复以上步骤,直到i=n-1结束,排序完成. 三.负杂度分析 1.  不管原始数组是否有序,时间复杂度都是O(n2), 因为没一个数都要与其他数比较一次,(n-1)2次,分解:n2+2n-1,  去掉低次幂和常数,剩下n2,所以最后的时间复杂…
一.动图演示 二.思路分析 1.  第一个跟后面的所有数相比,如果小于(或小于)第一个数的时候,暂存较小数的下标,第一趟结束后,将第一个数,与暂存的那个最小数进行交换,第一个数就是最小(或最大的数) 2.  下标移到第二位,第二个数跟后面的所有数相比,一趟下来,确定第二小(或第二大)的数 重复以上步骤 直到指针移到倒数第二位,确定倒数第二小(或倒数第二大)的数,那么最后一位也就确定了,排序完成. 三.负杂度分析 1.  不管原始数组是否有序,时间复杂度都是O(n2), 因为没一个数都要与其他数比…
编写此脚本的目的: 本人从事软件测试工作,近两年发现项目成员总会提出一些内容相似的问题,导致开发抱怨.一开始想搜索一下是否有此类工具能支持查重的工作,但并没找到,因此写了这个工具.通过从纸上谈兵到着手实践,还是发现很多大大小小的问题(一定要动手去做喔!),总结起来就是理解清楚参考资料.按需设计.多角度去解决问题. 脚本进行相似度分析的基本过程: 1.获取Bug数据.读取excel表,获取到“BugID”和“Bug内容” 2.获取指定格式的Bug关键字集合.使用“jieba包”,采用“搜索模式”,…
数据结构+算法面试100题~~~摘自CSDN,作者July 1.把二元查找树转变成排序的双向链表(树) 题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表.要求不能创建任何新的结点,只调整指针的指向.   10  / /  6  14 / / / /4  8 12 16 转换成双向链表4=6=8=10=12=14=16.  首先我们定义的二元查找树 节点的数据结构如下: struct BSTreeNode{  int m_nValue; // value of node  BSTr…
什么是计算机科学? 首先明确的一点就是计算机科学不仅仅是对计算机的研究,虽然计算机在科学发展的过程中发挥了重大的作用,但是它只是一个工具,一个没有灵魂的工具而已.所谓的计算机科学实际上是对问题.解决问题以及解决问题的过程中产生产生的解决方案的研究.例如给定一个问题,计算机科学家的目标是开发一个算法来处理该问题,最终得到该问题的解.或者最优解.所以说计算机科学也可以被认为是对算法的研究.因此我们也可以感受到,所谓的算法就是对问题进行处理且求解的一种实现思路或者思想. 如何形象化的理解算法? - …
1 分布式机器学习概述 大规模机器学习训练常面临计算量大.训练数据大(单机存不下).模型规模大的问题,对此分布式机器学习是一个很好的解决方案. 1)对于计算量大的问题,分布式多机并行运算可以基本解决.不过需要与传统HPC中的共享内存式的多线程并行运算(如OpenMP)以及CPU-GPU计算架构做区分,这两种单机的计算模式我们一般称为计算并行). 2)对于训练数据大的问题,需要将数据进行划分并分配到多个工作节点(Worker)上进行训练,这种技巧一般被称为数据并行.每个工作节点会根据局部数据训练出…
一直想找一些关于SQL语句性能调试的权威参考,但是有参考未必就能够做好调试 2的工作.我深信实践中得到的经验是最珍贵的,书本知识只是一个引导.本篇来源于<Inside Microsoft SQL Server 2008>,有经验的高手尽管拍砖把. 这个部分将讲解一些性能分析工具,这些性能分许主要关注在执行计划. 缓存执行计划  SQL Server 2008提供了一些服务器对象来分析执行计划Sys.dm_exec_cached_plans:    包含缓存的执行计划,每个执行计划对应一行.Sy…
原文:SQL点滴27-性能分析之执行计划 一直想找一些关于SQL语句性能调试的权威参考,但是有参考未必就能够做好调试的工作.我深信实践中得到的经验是最珍贵的,书本知识只是一个引导.本篇来源于<Inside Microsoft SQL Server 2008>,有经验的高手尽管拍砖把. 这个部分将讲解一些性能分析工具,这些性能分许主要关注在执行计划. 缓存执行计划  SQL Server 2008提供了一些服务器对象来分析执行计划Sys.dm_exec_cached_plans:    包含缓存…
一直想找一些关于SQL语句性能调试的权威参考,但是有参考未必就能够做好调试的工作.我深信实践中得到的经验是最珍贵的,书本知识只是一个引导.本篇来源于<Inside Microsoft SQL Server 2008>,有经验的高手尽管拍砖把. 这个部分将讲解一些性能分析工具,这些性能分许主要关注在执行计划. 缓存执行计划  SQL Server 2008提供了一些服务器对象来分析执行计划Sys.dm_exec_cached_plans:    包含缓存的执行计划,每个执行计划对应一行.Sys.…
一.什么是计算机科学? 首先明确的一点就是计算机科学不仅仅是对计算机的研究,虽然计算机在科学发展的过程中发挥了重大的作用,但是它只是一个工具,一个没有灵魂的工具而已.所谓的计算机科学实际上是对问题.解决问题以及解决问题的过程中产生产生的解决方案的研究.例如给定一个问题,计算机科学家的目标是开发一个算法来处理该问题,最终得到该问题的解.或者最优解.所以说计算机科学也可以被认为是对算法的研究.因此我们也可以感受到,所谓的算法就是对问题进行处理且求解的一种实现思路或者思想. 二.如何形象化的理解算法?…
说明 本文给出杨辉三角的几种C语言实现,并简要分析典型方法的复杂度. 本文假定读者具备二项式定理.排列组合.求和等方面的数学知识. 一  基本概念 杨辉三角,又称贾宪三角.帕斯卡三角,是二项式系数在三角形中的一种几何排列.此处引用维基百科上的一张动态图以直观说明(原文链接http://zh.wikipedia.org/wiki/杨辉三角): 从上图可看出杨辉三角的几个显著特征: 1. 每行数值左右对称,且均为正整数. 2. 行数递增时,列数亦递增. 3. 除斜边上的1外,其余数值均等于其肩部两数…
主要机器学习算法的project适用性分析 前段时间AlphaGo跟李世石的大战及相关的深度学习的新闻刷了一遍又一遍的朋友圈.只是这件事情,也仅仅是在机器学习的深度上进一步拓展,而机器学习的广度(也即project化实践)上,仍然没有什么突破性的理论或实践,用的领域继续用,不用的领域依旧不用. project性分析的作用 project上的琐事 机器学习的使命是使计算机强大的运算能力和存储能力转化为推演能力.能转化是一方面.转化的效率则是还有一方面.科研性质的AlphaGo,拥有近乎无限的计算资…
一.什么是计算机科学? 首先明确的一点就是计算机科学不仅仅是对计算机的研究,虽然计算机在科学发展的过程中发挥了重大的作用,但是它只是一个工具,一个没有灵魂的工具而已.所谓的计算机科学实际上是对问题.解决问题以及解决问题的过程中产生产生的解决方案的研究.例如给定一个问题,计算机科学家的目标是开发一个算法来处理该问题,最终的该问题的解.或者最优解.所以说计算机科学也可以被认为是对算法的研究.因此我们也可以感受到,所谓的算法就是对问题进行处理且求解的一种实现思路或者思想. 二.如何形象化的理解算法和数…