时间性能

**算法复杂性函数:

\[ f(n)=n^2 +1000n+\log_{10}n+1000 $$**
当n的数据规模逐渐增大时,f(n)的增长趋势:

* 当n增大到一定值以后,计算公式中影响最大的就是n的幂次级最高的项,并且其他的常数项和低幂次项都可以忽略,我们更关注的是它是一个什么量级的算法,是线性的还是n方的,还是指数级的。

<font size=4 face="微软雅黑">**大O表示法**
* 函数f、g定义域为自然数,值域为非负实数集
* **定义:**如果存在正数c和$n_0$,使得对任意的$$ n \geq n_0 $$ 都有$$ f(n) \leq cg(n)。\]

  • 称f(n)在集合O(g(n))中,简称f(n)是O(g(n))的,或f(n)=O(g(n))。
  • 大O表示法:表达函数增长率上限
  • 一个函数增长率的上限可能不止一个
  • 大O表示法不关心小范围的(n较小)的特例。

大O表示法的单位时间

  • 一个简单的布尔或算数运算 - O(1)
  • 简单I/O
    • 指函数的输入/输出

      例如:从数组读取数据等操作
    • 不包括键盘文件等I/O
  • 函数返回

大O表示法的运算规则

  • 加法规则: $$f_1(n)+f_2(n)=O(max(f_1(n),f_2(n)))$$

    ( 最耗时的那一段。)
  • 乘法规则: $$ f_1(n)·f_2(n)=O(f_1(n)·f_2(n)) $$

    (适用于while、for等循环结构)

    • 顺序结构,if结构,swith结构
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
k++;

嵌套循环中第一个和第二个for都是O(n)的时间复杂度,两者的乘积是:

\[\sum{n-1 \atop i=0}(n-i)=\frac{n(n-1)}{2}=O(n^2)
\]

算法渐进分析:大\(\Omega\)表达式

  • 定义:如果存在正数c和\(n_0\),使得对所有n\(\geq n_0\),都有f(n)\(\geq\)cg(n),

    则称f(n)在集合\(\Omega\)(g(n))中,或f(n)=\(\Omega\)(g(n))
  • 大O表示法和大\(\Omega\)表示法的唯一区别在于不等式的方向
  • 采用大\(\Omega\)表示法时,最好找出在函数增值率的所有下限中那个最“紧”(即最大)的下界

增长率大小比较:$$\log_2n \leq n \leq n \log_2n \leq n^2 \leq 2^n$$

算法复杂性分析

例:顺序寻找k值

  • 顺序从一个规模为n的一维数组中找出一个给定的k值
  • 最佳情况 O(1)
    • 数组的第一个元素就是k值
    • 只需要检查第一个元素
  • 最差情况 O(n)
    • 数组的最后一个才是k
    • 检查数组中所有的n个元素
  • 如果等概率分布 O(n)
    • k值出现在n个位置上的概率都是1/n
  • 概率不等
    • 出现在第一个位置的概率为1/2
    • 出现在第二个位置上的概率为1/4

      -出现在其他位置的概率都是$ \frac {1-1/2-1/4}{n-2} $

#C++初学记录(算法效率与度量)的更多相关文章

  1. [C语言] 数据结构-算法效率的度量方法-事前分析估算方法

    事前分析估算方法:在计算机程序编制前,依据统计方法对算法进行估算,抛开与计算机硬件软件有关的因素,一个程序的运行时间,依赖于算法的,好坏和问题的输入规模,所谓问题输入规模是指输入量的多少 推导过程,比 ...

  2. 从K近邻算法、距离度量谈到KD树、SIFT+BBF算法

    转载自:http://blog.csdn.net/v_july_v/article/details/8203674/ 从K近邻算法.距离度量谈到KD树.SIFT+BBF算法 前言 前两日,在微博上说: ...

  3. CUDA并行计算 | CUDA算法效率提升关键点概述

    文章目录 前言 存取效率 计算效率 性能优化要点 展现足够的并行性 优化内存访问 优化指令执行 前言   CUDA算法的效率总的来说,由存取效率和计算效率两类决定,一个好的CUDA算法必定会让两类效率 ...

  4. 【uva 1617】Laptop(算法效率--贪心,2种理解)

    题意:有N条长度为1的线段,要求使每条线段分别在相应区间,且"空隙"数目最小.输出"空隙"数.(1≤N≤100000) 解法:(P.S.我这题竟做了2个多小时, ...

  5. 【uva 1615】Highway(算法效率--贪心 区间选点问题)

    题意:给定平面上N个点和一个值D,要求在x轴上选出尽量少的点,使得对于给定的每个店,都有一个选出的点离它的欧几里德距离不超过D. 解法:先把问题转换成模型,把对平面的点满足条件的点在x轴的直线上可得到 ...

  6. 【bzoj 3433】{Usaco2014 Jan} Recording the Moolympics(算法效率--贪心)

    题意:给出n个区间[a,b),有2个记录器,每个记录器中存放的区间不能重叠.求2个记录器中最多可放多少个区间. 解法:贪心.只有1个记录器的做法详见--关于贪心算法的经典问题(算法效率 or 动态规划 ...

  7. 关于贪心算法的经典问题(算法效率 or 动态规划)

    如题,贪心算法隶属于提高算法效率的方法,也常与动态规划的思路相挂钩或一同出现.下面介绍几个经典贪心问题.(参考自刘汝佳著<算法竞赛入门经典>).P.S.下文皆是我一个字一个字敲出来的,绝对 ...

  8. #C++初学记录(算法4)

    A - Serval and Bus It is raining heavily. But this is the first day for Serval, who just became 3 ye ...

  9. #C++初学记录(贪心算法#结构体#贪心算法)

    贪心算法#结构体 Problem Description "今年暑假不AC?" "是的." "那你干什么呢?" "看世界杯呀,笨蛋 ...

随机推荐

  1. 用 node.js 模仿 Apache 的部分功能

    首先,这个例子用到了服务端渲染的技术.服务端渲染,说白了就是在服务端使用模板引擎,这里我先简单的介绍一下服务端渲染与客户端渲染之间的区别. 服务端渲染与客户端渲染之间的区别: 客户端渲染不利于搜索引擎 ...

  2. Kali 2019(debian linux)安装MySql5.7.x

    Kali 2019(debian linux)安装MySql5.7.x MySQL安装 确认是否安装MySQL 终端输入:mysql 如出现Welcome to the MariaDB monitor ...

  3. window.requestAnimationFrame()的使用,处理更流畅的动画效果

    https://blog.csdn.net/w2765006513/article/details/53843169 window.requestAnimationFrame()的使用 2016年12 ...

  4. Flask项目初始化

    数据库实现命令初始化 1.实现命令主脚本 # coding=utf-8 from functools import wraps from getpass import getpass import s ...

  5. Java开发环境之ElasticSearch

    查看更多Java开发环境配置,请点击<Java开发环境配置大全> 拾章:ElasticSearch安装教程 1)去官网下载ElasticSearch安装包 http://www.elast ...

  6. Android开发之常用Intent.Action【转】

    1.从google搜索内容 Intent intent = new Intent(); intent.setAction(Intent.ACTION_WEB_SEARCH); intent.putEx ...

  7. Python面向对象三要素-多态

    Python面向对象3要素-多态 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.  一.多态概述 OCP原则:多用“继承”,少修改. 继承的用途:在子类上实现对基类的增强,实现多态. ...

  8. root用户被提示:Operation not permitted

    一.问题 今天为了删除一个多余的的软件,在删除该软件安装目录时,提示rm: cannot remove ‘.user.ini’: Operation not permitted,root权限都不能删除 ...

  9. beta版本——第五次冲刺

    第五次冲刺 (1)SCRUM部分☁️ 成员描述: 姓名 李星晨 完成了哪个任务 界面优化 花了多少时间 2h 还剩余多少时间 2h 遇到什么困难 没有 这两天解决的进度 2/2 后续两天的计划 完成文 ...

  10. beta版本——第四次冲刺

    第四次冲刺 (1)SCRUM部分☁️成员描述: 姓名 李星晨 完成了哪个任务 进行注册的时候若不输入手机号,提醒用户的是未输入登录名,进行更改 花了多少时间 1.2h 还剩余多少时间 1.8h 遇到什 ...