算法分析和设计_渐进符号的表示

小声音

big-O notation and its relatives-concepts that belong in the vocabulary of every serious programmer and computer scientist.

为什么要研究它

渐进表示法是算法分析里的基本术语,当听到别人说某段代码以"n的大O时间"运行,而另一段代码以"n平方的大O时间 运行",你需要知道背后的含义。

当某个问题可以用不同的算法解决时,需要用一个东西进行比较哪个算法好。渐进表示算法就可以帮助区分。

High Level

一句话概括渐进算法,就是: 忽略常数因子和低阶项。

渐进法还有更多的含义,但是10年后能记得的就是上面这个概括,它很精妙。

为什么要忽略常数因子?

常数因子一般很依赖于环境的细节,我们的算法分析是不想固定某种特定的编程语言,计算机体系结构,所以忽略常数因子是合理的。

为什么要忽略低阶项?

当我们的输入很大的时候,低阶项的作用很微小,而我们算法关注的就是大规模的输入。

大O符号

标准的数学公式如下定义:

T(n)=O(f(n))当且仅当T(n)最后的上界是f(n)的一个常数积。

所以只需要找的到c和n0,使得当n>=n0的时候不等式满足,就表示T(n)=O(f(n))。

用图来表示就是

这里的n0就是指‘最后的‘,3就是指‘常数倍‘,当n>n0的时候,满足T(n)<=3f(n),所以T(n)=O(f(n))。

大Omega符号
它的数学表示如下:

它的定义和大O的定义是平行的,当且仅当T(n)最后的下界是f(n)的一个常数积。用图来表示就是:

当n>=n0时,T(n)>=1/4f(n),所以

大theta符号

可以把它类比为"等于",同时满足上面两个条件,即:

相当于T(n)最后被夹在了f(n)的两个不同的常数积之间。数学定义如下:

参考书:Algorithms Illuminated

原文地址:https://www.cnblogs.com/siguamatrix/p/12147474.html

时间: 2024-10-08 10:05:48

算法分析和设计_渐进符号的表示的相关文章

算法分析中常用的几种渐进符号

在算法分析中,经常会遇到以下几种渐进符号 渐近精确界记号:ΘΘ(big-theta) 渐近上界记号?:OO(big-oh) 渐近下界记号?:ΩΩ(big-omege) 非渐近紧确上界:o(小-oh) 非渐近紧确下界:ω(小-omege) 下面对渐进符号进行详解: 大写O符号f(n)=O(g(n)),这里f(n)是分析出来算法的执行次数的函数,O的定义:   当且仅当存在正的常数c和n0,使得对于所有的n>=n0,有f(n)<=cg(n).这里cg(n)就是函数f(n)的上限.讲到这是不是很迷糊

算法分析与设计复习

算法分析与设计复习 2016年初,研一上学期期末考试前,复习并总结算法分析与设计科目的内容.复习过程参照<算法导论>中文第2版,同时参照PPT,章节划分根据PPT内容 概要: 第一章 概述 第二章 插入排序&分治策略 第三章 复杂度分析 第四章 堆与堆排序 第五章 快速排序 第六章 线性时间排序 第一章 概述 算法的应用范围 算法在诸如生物等诸多领域有其应用 算法的意义 算法在很多情况下让不可能完成的事情变成了可能,让处理的很慢的过程变快. 一个铺垫 一串不全为0的数,怎么取能拿到一段

如何理解算法中的渐进符号?

我们分析一个算法的时候,常常需要用到数学去描述其性能.最常用的的是?.比如在一段程序中有 For(I = 0,I < n ; I ++) For(J = 0; j < n ; j++); For (cnt = 0; cnt < n ; cnt ++); 我们会说其最坏情况是n^2+ n,这时候,实际上我们没有考虑机器因素,我们把每一条指令的执行时间都当做单位1来看,如果我们考虑到机器因素,比如在A机器上,每条指令执行的速度是c1,那么他的最坏情况是( n^2  +  n) / c1,而在

Java算法分析与设计视频教程下载

下载地址:http://pan.baidu.com/s/1i4pMZ9z 密码:v9ra 算法分析与设计Java版,是一套实用型算法课程.通过本课程的学习,学员可以掌握以下技术点:线性结构与顺序表.单向链表.循环链表.栈的基本概念.链式堆栈.中缀表达式.队列.链式队列.串.MyString.Brute-Force算法.MySet类实现.矩阵类.递归算法.哈夫曼树.希尔排序.HashTable算法等内容. 第一讲.算法基本概述.抽象数据类型 第二讲.算法的设计目标.时间复杂度和空间复杂度 第三讲.

渐进符号

渐进符号 符号O: 比如说这里有个式子:     f(n)=O(g(n))  他表达了函数f(n)和g(n)的一种关系 什么关系呢? 数学定义如下: 存在c>0 n0>0 使得 n>=n0时: 0<=f(n)<=c * g(n) 恒成立. 我们来用这个式子证明 100(n^2)=O(n^3)       其中      f(n)  是100(n^2)   g(n)  是n^3 要证明  存在c>0 n0>0 使得 n>=n0时: f(n)<=c * g

Java实战应用视频教程之Java算法分析与设计

实战应用Java算法分析与设计(链表.二叉树.哈夫曼树.图.动态规划.HashTable算法)适合人群:中级课时数量:38课时用到技术:Java算法涉及项目:案例应用实战咨询qq:1840215592课程简介:算法分析与设计Java版,是一套实用型算法课程.通过本课程的学习,学员可以掌握以下技术点:线性结构与顺序表.单向链表.循环链表.栈的基本概念.链式堆栈.中缀表达式.队列.链式队列.串.MyString.Brute-Force算法.MySet类实现.矩阵类.递归算法.哈夫曼树.希尔排序.Ha

算法分析与设计——贪心法实验报告

   算法导论  课程设计 成 绩 题    目:    贪心法 学院班级:        1613013         学    号:      16130130216       姓    名:        库 妍           主讲教师:        张立勇          日    期:       2019.5.9         一.Knapsack Problem 1.实验题目 下面有5个具有值和权重列表的项目,背包最多可以包含100磅.解决了分数背包和0/1背包问题

算法分析与设计——分治法实验报告

   算法导论  课程设计 成 绩 题    目:  算法导论课程设计实验报告 学院班级:        1613013         学    号:      16130130216       姓    名:        库 妍           主讲教师:        张立勇          日    期:       2019.6.3         录 分治法 一.Implement exercise 2.3-7................................

算法分析与设计——动态规划法实验报告

   算法导论  课程设计 成 绩 题    目:    动态规划法 学院班级:        1613013         学    号:      16130130216       姓    名:        库 妍           主讲教师:        张立勇          日    期:       2019.4.11         (1)描述最优子结构:如果最优的加括号的方式将其分解为Ai..k与Ak+1..j的乘积,则分别对Ai..k与Ak+1..j加括号的方式也