算法导论 学习笔记 第三章 函数的增长

2023-10-31

当输入规模足够大,要研究算法的渐近效率,即我们关心当输入规模无限增加时,在极限中,算法的运行时间如何随着输入规模的变大而增加。

主要使用以下渐近记号描述算法的运行时间:
1.θ记号
给定一个函数g(n),用θ(g(n))表示以下函数的集合:
在这里插入图片描述
若存在正常量c1和c2,使得对于足够大的n,函数f(n)能夹入c1g(n)与c2g(n)之间,则f(n)属于集合θ(g(n))。

对于所有n>=n0,函数f(n)在一个常量因子内等于g(n),我们称g(n)是f(n)的一个渐近紧确界。
在这里插入图片描述
θ记号中的每个函数都渐近非负(即当n足够大时,f(n)非负),本章中其他渐近记号也是如此。
2.O记号表示渐近上界:
在这里插入图片描述
f(n)=θ(g(n))蕴含着f(n)=O(g(n))。

对插入排序的最坏运行时间的界θ(n2)并未暗示插入排序对每个输入的运行时间的界也是θ(n²),当输入已排好序时,插入排序运行时间为θ(n)。

对插入排序的最坏情况运行时间的界O(n²)适用于该算法对每个输入的运行时间。

技术上看,称插入排序的运行时间为O(n²)不合适,因为对于给定n,实际的运行时间是变化的,依赖于规模为n的特定输入。我们说“运行时间为O(n²)”时,意指存在一个O(n²)的函数f(n),使得对n的任意值,不管选择什么特定的规模为n的输入,其运行时间的上界都是f(n),即最坏状况运行时间为O(n²)。
3.Ω记号提供了渐近下界:
在这里插入图片描述
在这里插入图片描述
插入排序的最好情况运行时间为Ω(n),这蕴含着插入排序的运行时间为Ω(n)。所以插入排序运行时间介于Ω(n)和O(n²)。
4.o记号
由O记号提供的上界可能是也可能不是渐近紧确的,如2n²=O(n²)是渐近紧确的,但2n=O(n²)不是渐近紧确的。我们使用o记号表示一个非渐近紧确的上界:
在这里插入图片描述
在o记号中,当n趋于无穷时,函数f(n)相对于g(n)来说变得微不足道了:
在这里插入图片描述
5.ω记号
ω记号表示一个非渐近紧确的下界:
在这里插入图片描述
f(n)=ω(g(n))蕴含着:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
函数f和g的渐近比较和两个实数a与b的比较之间的类比:
在这里插入图片描述
然而实数的下列性质不能携带到渐近记号:
在这里插入图片描述
对两个函数f(n)和g(n),也许f(n)=O(g(n))和f(n)=Ω(g(n))都不成立,如函数n和n1+sinn

若f(n)=o(g(n)),则称f(n)渐近小于g(n);若f(n)=ω(g(n)),则称f(n)渐近大于g(n)。

在这里插入图片描述
由于f(n)和g(n)都是渐进非负的,因此有:
在这里插入图片描述
取n0=max(n1,n2),当n>n0时:
在这里插入图片描述
结合最后两个不等式:
在这里插入图片描述
这就是θ(f(n)+g(n))的定义,其中c1=1/2,c2=1。

任意底大于1的指数函数(y=ax)比任意多项式函数增长得快。

由换底公式,不同底的对数函数只相差常数倍:
l o g 2 x / l o g 10 x = l o g c x l o g c 10 / l o g c 2 l o g c x = l o g c 10 / l o g c 2 log_{2}x/log_{10}x = log_{c}xlog_{c}10/log_{c}2log_{c}x = log_{c}10/log_{c}2 log2x/log10x=logcxlogc10/logc2logcx=logc10/logc2
其中c为常数。因此当我们不关心这些常量因子时,经常使用记号lgn(如在O记号中)。

对于对数函数,对所有实数a>0,b>0,c>0和n,有:
在这里插入图片描述
任意正的多项式函数比任意对数函数增长得块。

多重函数:
在这里插入图片描述
多重对数函数是一个增长非常慢的函数。

斐波那契数列以指数形式增长。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

算法导论 学习笔记 第三章 函数的增长 的相关文章

  • 是否可以在Linux上将C转换为asm而不链接libc?

    测试平台为Linux 32位 但也欢迎 Windows 32 位上的某些解决方案 这是一个c代码片段 int a 0 printf d n a 如果我使用 gcc 生成汇编代码 gcc S test c 然后我会得到 movl 0 28 e
  • 创建 jar 文件 - 保留文件权限

    我想知道如何创建一个保留其内容的文件权限的 jar 文件 我将源代码和可执行文件打包在一个 jar 文件中 该文件将在使用前提取 人们应该能够通过运行批处理 shell 脚本文件立即运行示例和演示 然后他们应该能够修改源代码并重新编译所有内
  • Python 中的 Unix cat 函数 (cat * > merged.txt)? [复制]

    这个问题在这里已经有答案了 一旦建立了目录 有没有办法在Python中使用Unix中的cat函数或类似的函数 我想将 files 1 3 合并到 merged txt 我通常会在 Unix 中找到该目录 然后运行 cat gt merged
  • 应用程序无缘无故地被杀死。怀疑 BSS 高。如何调试呢?

    我已经在CentOs6 6中成功运行我的应用程序 最近 硬件 主板和内存 更新了 我的应用程序现在毫无理由地被杀死 root localhost PktBlaster PktBlaster Killed 文件和 ldd 输出 root lo
  • nginx 上的多个网站和可用网站

    通过 nginx 的基本安装 您的sites available文件夹只有一个文件 default 怎么样sites available文件夹的工作原理以及如何使用它来托管多个 单独的 网站 只是为了添加另一种方法 您可以为您托管的每个虚拟
  • Jenkins中找不到环境变量

    我想在詹金斯中设置很多变量 我试过把它们放进去 bashrc bash profile and profile of the jenkins用户 但 Jenkins 在构建发生时找不到它们 唯一有效的方法是将所有环境变量放入Jenkinsf
  • Linux TUN/TAP:无法从 TAP 设备读回数据

    问题是关于如何正确配置想要使用 Tun Tap 模块的 Linux 主机 My Goal 利用现有的路由软件 以下为APP1和APP2 但拦截并修改其发送和接收的所有消息 由Mediator完成 我的场景 Ubuntu 10 04 Mach
  • Linux中的CONFIG_OF是什么?

    我看到它在很多地方被广泛使用 但不明白在什么场景下我需要使用它 What is 配置 OF OF 的全名是什么 打开固件 这是很久以前发明的 当时苹果公司正在生产基于 PowerPC CPU 的笔记本电脑 而 Sun Microsystem
  • Linux 中的动态环境变量?

    Linux 中是否可以通过某种方式拥有动态环境变量 我有一个网络服务器 网站遵循以下布局 site qa production 我想要一个环境变量 例如 APPLICATION ENV 当我在 qa 目录中时设置为 qa 当我在生产目录中时
  • 域套接字“sendto”遇到“errno 111,连接被拒绝”

    我正在使用域套接字从另一个进程获取值 就像 A 从 B 获取值一样 它可以运行几个月 但最近 A 向 B 发送消息时偶尔会失败 出现 errno 111 连接被拒绝 我检查了B域套接字绑定文件 它是存在的 我也在另一台机器上做了一些测试 效
  • 如何在数组中存储包含双引号的命令参数?

    我有一个 Bash 脚本 它生成 存储和修改数组中的值 这些值稍后用作命令的参数 对于 MCVE 我想到了任意命令bash c echo 0 0 echo 1 1 这解释了我的问题 我将用两个参数调用我的命令 option1 without
  • 所有平台上的java

    如果您想用 java 为 Windows Mac 和 Linux 编写桌面应用程序 那么所有这些代码都相同吗 您只需更改 GUI 即可使 Windows 应用程序更像 Windows 等等 如果不深入细节 它是如何工作的 Java 的卖点之
  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • 如何在Linux内核源代码中打印IP地址或MAC地址

    我必须通过修改 Linux 内核源代码来稍微改变 TCP 拥塞控制算法 但为了检查结果是否正确 我需要记录 MAC 或 IP 地址信息 我使用 PRINTK 函数来打印内核消息 但我感觉很难打印出主机的MAC IP地址 printk pM
  • 如何在apache 2.4.6上安装apxs模块

    我刚刚用过apt get update我的 apache 已更新为2 4 6 我想安装 apxs 来编译模块 但收到此错误 The following packages have unmet dependencies apache2 pre
  • 从 shell 命令调用 SOAP 请求

    我使用curl 向Web 服务发送SOAP 请求 并使用shell 脚本获取响应 请在下面找到我正在使用的命令 curl H Content Type text xml charset utf 8 H SOAPAction d sample
  • 如何查看正在运行的 tcsh 版本?

    如何查看我的 UNIX 终端中运行的 tcsh 的当前版本 看着那 这version多变的 echo version tcsh 6 14 00 Astron 2005 03 25 i386 intel linux options wide
  • ssh远程变量赋值?

    以下内容对我不起作用 ssh email protected cdn cgi l email protection k 5 echo k 它只是返回一个空行 如何在远程会话 ssh 上分配变量 Note 我的问题是not关于如何将本地变量传
  • ubuntu:升级软件(cmake)-版本消歧(本地编译)[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我的机器上安装了 cmake 2 8 0 来自 ubuntu 软件包 二进制文件放置在 usr bin cmake 中 我需要将 cmake 版本至少

随机推荐

  • root密码忘记了怎么办?(centos7)

    因为自己要记的密码过多 有时候会突然想不起或者忘记密码 比如你重要的Linux密码 别担心 这就教你如何用紧急救援模式重设root密码 开启此虚拟机 进入centos7系统 稍等片刻进入下图页面 默认选中得是第一个选项 如果不是可以用方向键
  • .net出现提交数据错误,提示Nancy.RequestExecutionException错误

    问题描述 提交数据报错 开发环境VS2017 更改了实体类 增加了字段 在webservice中清理重新生成后仍报错 解决方法 需重新引用实体类CFinal Application Entity和映射CFinal Application M
  • 安装交叉编译工具:arm-himix200-linux

    准备工作 下载交叉编译工具 arm himix200 linux 百度网盘 链接 https pan baidu com s 1XuRLd3J6S68X k6Sq1DmwA 提取码 dzas ubuntu版本 vmare安装的ubuntu1
  • 运维之DNS域名解析服务基础概念与Bind9安装

    0x00 前言简述 基础概念 基础术语 记录类型 0x01 DNS服务介绍 原理流程 实验目标 0x02 DNS服务之Bind9 Ubuntu 安装 CentOS 安装 Docker 容器 1 源码编译安装 2 APT仓库安装 Bind9
  • 游戏介绍网站-网页设计期末结课作业

    一个游戏介绍网站 附资源链接 资源下载链接 介绍 是一个用来介绍个人游戏的主页 适用于移动和PC端 是本人一个前端期末结课作业 软件架构 html css javascript jquery vue 安装教程 无需安装 直接打开即可 使用说
  • 【笔记】Go语言学习笔记

    一 概述 什么是程序 程序 为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令的集合 Go语言 是区块链最主流的编程语言 同时也是当前最具发展潜力的语言 Go语言是Google公司创造的语言 也是Google主推的语言 Googl
  • Mitmproxy 新版配置上游(二级)代理

    Mitmproxy 最新新版配置上游代理 由于在 4 0版本之后flow live change upstream proxy server proxy 方法已经弃用 会引发 AttributeError NoneType object h
  • UGUI之Image、RawImage使用说明

    UGUI之Image RawImage使用说明 Image说明 基本属性 图片切割 九宫格 图集 RawImage可以做什么 用途一 小地图 用途二 帧动画 动图 小常识 Image说明 Image是UGUI中最常见的控件 用于图片的显示
  • golang安装步骤

    1 首先找到资源下载地址 https studygolang com dl 2 下载完毕后 下图是下载好的文件 新建一个文件夹install path 当作安装目录 此处的install file 是下载的资源文件 install path
  • 2021/2/26 单链表应用------一元多项式

    单链表应用 一元多项式 学习时间 2021 2 26 题目名称 单链表应用 一元多项式 问题描述 编写一个程序用单链表存储多项式 并实现两个一元多项式A与B相加的函数 A B刚开始是升序的 A与B之和按降序排列 例如 多项式A 1 2X 0
  • 随机高斯分布的100个2D点

    import numpy as np import matplotlib pyplot as plt 生成随机的10个点 分布在300x300的区域内 num nodes 1000 mean 150 150 高斯分布的均值 cov 500
  • 程序员必读书籍一览表

    书籍推荐 按角色划分 一 软件工程师 Clean Code 代码整洁之道 Implementation Patterns 实现模式 Code Complete 代码大全 Refactoring Improving the Design of
  • 内联函数使用注意事项

    class TableClass private int I j public int add return I j inline int dec return I j int GetNum inline int tableclass Ge
  • uinapp发送和处理二进制数据流

    uinapp发送和处理二进制数据流 将二进制数据流转为json param Object buffer export function buffer to json buffer return JSON parse base64 decod
  • github学习记录目录

    说明 很久没有更新过CSDN了 一方面是因为图片上传和排版过于麻烦 另一方面是因为没有另一方面 懒狗一只 其实是放在GitHub了 CSDN里的东西也不想搬过去 权当重新开始学习啦 平时的学习记录均会不定时的上传到GitHub上 希望走过路
  • 【数据集】——SBD数据集下载链接

    简介 SBD Dataset 是一个语义边界数据集 其包含来自 PASCAL VOC 2011 数据集中 11355 张图片的注释 这些图片均基于 Amazon Mechanical Turk 其中分割之间的冲突均为手动解决 此外 每张图像
  • hadoop之hello world

    初学hadoop 这是第一个例子wordCount import java io IOException import java util StringTokenizer import org apach hadoop conf impor
  • 2022十三届蓝桥杯省赛赛时代码

    1478 14 应该就是取模问题 include
  • 刻章不要钱 5个在线印章制作工具

    俺的博客里的图片 还有网生代上俺写的文章很多都是用印章当作图片水印的 奇怪的是 怎么没人眼馋 有了现代科技 刻章其实很简单了 本文就介绍几个在线印章制作工具 一 MakePic印章生成器 允许输入2 4个汉字 可选择的字体有 经典繁印篆 经
  • 算法导论 学习笔记 第三章 函数的增长

    当输入规模足够大 要研究算法的渐近效率 即我们关心当输入规模无限增加时 在极限中 算法的运行时间如何随着输入规模的变大而增加 主要使用以下渐近记号描述算法的运行时间 1 记号 给定一个函数g n 用 g n 表示以下函数的集合 若存在正常量