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

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(使用前将#替换为@)

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

  • 在 scapy 中通过物理环回发送数据包

    我最近发现了 Scapy 它看起来很棒 我正在尝试查看 NIC 上物理环回模块 存根上的简单流量 但是 Scapy sniff 没有给出任何结果 我正在做的发送数据包是 payload data 10 snf sniff filter ic
  • 使用 systemctl 获取 systemd 进程的正常运行时间或停机时间?

    喜欢使用systemctl is active
  • MySQL 与 PHP 的连接无法正常工作

    这是我的情况 我正在尝试使用 Apache 服务器上的 PHP 文件连接到 MySQL 数据库 现在 当我从终端运行 PHP 时 我的 PHP 可以连接到 MySQL 数据库 使用 php f file php 但是当我从网页执行它时 它只
  • Ruby:在 Ubuntu 上安装 rmagick

    我正在尝试在 Ubuntu 10 04 上安装 RMagick 看起来here https stackoverflow com questions 1482823 is there an easy way to install rmagic
  • 链接错误:命令行中缺少 DSO

    我对 Linux 使用 Ubuntu 14 04 LTS 64 位 相当陌生 来自 Windows 并且正在尝试移植我现有的 CUDA 项目 当通过链接时 usr local cuda bin nvcc arch compute 30 co
  • 使用 libusb 输出不正确

    我用libusb编写了一个程序 我怀疑输出是否正确 因为所有条目都显示相同的供应商和产品 ID 以下是代码 include
  • 正则表达式删除块注释也删除 * 选择器

    我正在尝试使用 bash 从 css 文件中删除所有块注释 我有以下 sed 命令的正则表达式 sed r s w s w d 这可以很好地去除块注释 例如 This is a comment this is another comment
  • Linux无法删除文件

    当我找到文件时 我在删除它们时遇到问题 任务 必须找到带有空格的文件并将其删除 我的尝试 rm find L root grep i 但我有错误 rm cannot remove root test No such file or dire
  • 类似 jq 中的 sql join

    我有以下 json id 1 type folder title folder 1 id 2 type folder title folder 2 id 3 type item title item 1 folder 1 id 4 type
  • Linux 使用 boost asio 拒绝套接字绑定权限

    我在绑定套接字时遇到问题 并且以用户身份运行程序时权限被拒绝 这行代码会产生错误 acceptor new boost asio ip tcp acceptor io boost asio ip tcp endpoint boost asi
  • 如何在 Linux 上通过 FTP 递归下载文件夹 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案
  • ssh 连接超时

    我无法在 git 中 ssh 到 github bitbucket 或 gitlab 我通常会收到以下错误消息 如何避免它 输出 ssh T email protected cdn cgi l email protection i ssh
  • 仅使用containerd(不使用Docker)修剪容器镜像

    如果我刚刚containerd安装在 Linux 系统上 即 Docker 是not安装 如何删除未使用的容器映像以节省磁盘空间 Docker 就是这么方便docker system prune https docs docker com
  • 如何使用 JSch 将多行命令输出存储到变量中

    所以 我有一段很好的代码 我很难理解 它允许我向我的服务器发送命令 并获得一行响应 该代码有效 但我想从服务器返回多行 主要类是 JSch jSch new JSch MyUserInfo ui new MyUserInfo String
  • FileOutputStream.close() 中的设备 ioctl 不合适

    我有一些代码可以使用以下命令将一些首选项保存到文件中FileOutputStream 这是我已经写了一千遍的标准代码 FileOutputStream out new FileOutputStream file try BufferedOu
  • Google BQ:运行参数化查询,其中参数变量是 BQ 表目标

    我正在尝试从 Linux 命令行为 BQ 表目标运行 SQL 此 SQL 脚本将用于多个日期 客户端和 BQ 表目标 因此这需要在我的 BQ API 命令行调用中使用参数 标志 parameter 现在 我已经点击此链接来了解参数化查询 h
  • 如何为 Linux 桌面条目文件指定带有相对路径的图标?

    对于我的一个 Linux 应用程序 我有应用程序二进制文件 一个 launcher sh 脚本 针对 LD LIBRARY PATH 和一个 desktop 文件 所有这些都位于同一文件夹中 我想使用图标的相对路径而不是绝对路径 我试过了
  • 在 .gitconfig 中隐藏 GitHub 令牌

    我想将所有点文件存储在 GitHub 上 包括 gitconfig 这需要我将 GitHub 令牌隐藏在 gitconfig 中 为此 我有一个 gitconfig hidden token 文件 这是我打算编辑并放在隐藏令牌的 git 下
  • 我们真的应该使用 Chef 来管理 sudoers 文件吗?

    这是我的问题 我担心如果 Chef 破坏了 sudoers 文件中的某些内容 可能是 Chef 用户错误地使用了说明书 那么服务器将完全无法访问 我讨厌我们完全失去客户的生产服务器 因为我们弄乱了 sudoers 文件并且无法再通过 ssh
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe

随机推荐

  • 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 表示以下函数的集合 若存在正常量