php数组o m n mn,O(m + n)和O(mn)之间的区别?

小编典典

我对发现直觉的建议是思想实验,如下所示:

首先,认识到m和n是 输入的 两个 不同度量

。它们可能是两个输入流的长度,矩阵边的长度,或同一数据结构的两个不同属性的计数,例如同一图形的边和节点计数,或任何类似的度量。

直觉是big-O用一个简单的函数-称R(m,n)-乘以某个值来表示算法的 真实

运行时间(或其他方面,例如比较计数或所需空间)的界限。任意常数。我们忽略了常数因素,并通过调用运行时间O(R(m,n))来考虑所有以同一R为界的算法。

因此,大O(m + n)表示,对于合适的大m和n,实际运行时间受某个函数R(m,n)= C(m +

n)限制。对于图示例,这表示算法的实际运行时间将受顶点和边的数量之和的倍数限制。

您可以将边界函数看作是3d中具有轴m,n和R(m,n)的图形。或者您可以想到图表:

R(m,n) = m + n

--------------

m= 1 2 3 4

n=1 1 2 3 4

2 3 4 5 6

3 4 5 6 7

4 5 6 7 8

对于R(m,n)= mn,您有

R(m,n) = mn

--------------

m= 1 2 3 4

n=1 1 2 3 4

2 2 4 6 8

3 3 6 9 12

4 4 8 12 16

作为3d图形,第一个函数是一个平面,第二个函数是在几乎所有点上都快得多的增长函数。这意味着,如果m和n足够大,则O(mn)边界最终将比O(m +

n)大(对应于可能更慢的程序),因为常量变得无关紧要了。

以快速增长的成本为例,假设O(m + n)算法在其运行时范围内具有3的额外常数(与上述两种算法相比,在小输入量下它的运行速度可能非常慢):

R(m,n) = 3(m + n)

--------------

m= 1 2 3 4

n=1 3 9 12 15

2 9 12 15 18

3 12 15 18 21

4 15 18 21 24

因此,与上表中的O(mn)相比,O(m + n)的约束似乎受约束的程度要小。但是看一下m = n = 100的情况。此处,在O(m +

n)算法上的界限是3(m + n)=600。但是常数较小的O(mn)算法的界限mn =10000。显然,如果m和n大,则您要第一个。

@Anonymous在本文的初始版本中提出了一个很好的观点,它混淆了big-O和big-Theta。Big-O仅处理被测数量的界限或 上限

。例如,这意味着 每个 O(n)算法也是O(n log n)和O(n ^ 2)。如果实际运行时间受较慢增长的函数限制,则它也受所有较快增长的函数限制。

然而,人们常常说“此算法为O(n)”,而这意味着边界是 紧密的

。也就是说,对于某些常数C,Cn是运行时间的上限,而对于其他常数D(合适的是较大的n),Dn也是下限。这样的严格界限正确地表示为Theta(n),而不是O(n)。Theta(R(m,n))算法的运行时间(大致而言)与R(m,n)成比例。

最后我要补充一点,在许多情况下,您不能忽略常量。文献中存在许多算法,它们比通常使用的算法渐近“快”,但是常数太大,以至于实际问题的规模总是太慢。计算几何有很多例子。基数2排序是另一种。它是Theta(n),但实际上,一个好的快速排序(Theta(n

log n)平均大小)将在大小至少为10 ^ 8的整数数组上胜过它。

2020-07-28

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/503307.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java虚拟机知识汇总,有这些还怕面试被问到?

首先我们来看一下Java运行时的数据区域,Java虚拟机在执行Java程序的过程中,会把它所管理的内存,划分成若干个不同的数据区域,这些区域都有各自的用途,各自的创建和销毁的时间。 有的区域,随着虚拟机进程的…

Java的多线程以及内存模型的知识点梳理,有想到过这些吗?

JMM大致描述: JMM描述了线程如何与内存进行交互。Java虚拟机规范视图定义一种Java内存模型,来屏蔽掉各种操作系统内存访问的差异,以实现Java程序在各种平台下都能达到一致的访问效果。 JMM描述了JVM如何与计算机的内存进行交互 JMM都是围绕…

Java性能优化方面的程序优化知识点归纳,希望对你有所帮助

常用的程序设计优化技巧: 1、字符串优化处理 (1)String 类的特点:不变性、针对常量池的优化( String.intern() 方法的意义) (2)subString 方法的内存泄漏 : (3&#…

java工具栏的工具提示,动态菜单项、状态条提示、工具条提示问题

问题的提出:一个应用程序想要动态改变菜单项。使用CCmdUI::SetText("Menu Text")可以改变菜单文本,但是如何动态改变工具条和状态条的文本呢?有几种策略,避免,欺骗,面对......首先,避…

python excel操作库,可能是全网最完整的 Python 操作 Excel库总结!

openpyxlxlrd/xlwtxlwingsxlsxwriter了解各个库的异同,从而在不同场景下可以灵活使用首先让我们来整体把握下不同库的特点“xlrdxlwtxlutils.xlsxlwt.xlsxlrd.xlsxlutilsxlrdxlwt.xlsxlrdxlwtxlutilsxlwingsXlsxWriter.xlsxopenpyxl.xlsxpandas”如果你懒得看详细的…

Java编程中程序员会遇到的一些感性烦恼,你有遇到吗?

如果作为兴趣来学编程,什么人都适合。毕竟,现在小学生都开始学习编程了。如果要作为职业来说,你到底适合不适合确实是个问题。我教过的学员里面从初中生到博士生、甚至50多岁的企业高管都有,怀着不同的目的来学习JAVA。 我记得教过…

php入门和常用类的使用,php入门教程之常用数据类型和基本语法

php中数据类型有整型、小数型(浮动数)、布尔类型、字符及数组,变量,常量等下面我们一起来看看吧。一 PHP常用数据类型1.基本数据类型1.1整型1.2小数型(浮动数) 包含单精度和双精度1.3布尔类型 (表示真,和 假)1.4字符串2.复合数据类型2.1数组(…

java开发中spring常用的工具类

内置的resouce类型 UrlResourceClassPathResourceFileSystemResourceServletContextResourceInputStreamResourceByteArrayResourceEncodedResource 也就是Resource加上encoding, 可以认为是有编码的资源VfsResource(在jboss里经常用到, 相应还有 工具类 VfsUtils)org.springf…

python波士顿房价是什么数据,Python数据分析 | 波士顿房价回归分析

分析目标:将波士顿房价的数据集进行描述性数据分析、预测性数据分析(主要用了回归分析),可用于预测房价。数据集介绍:卡内基梅隆大学收集,StatLib库,1978年,涵盖了麻省波士顿的506个不同郊区的房屋数据。一…

Java开发的Spring Boot的核心模块

Spring Boot 的核心模块 下面我们大概来了解一下 Spring Boot 的核心模块。 1、spring-boot 这是 Spring Boot 的主模块,也是支持其他模块的核心模块,主要包含以下几点: 提供了一个启动 Spring 应用的主类,并提供了一个相当方便…

python的open函数百度百科,open函数

open函数可以打开一个文件。超级简单吧?大多数时候,我们看到它这样被使用:f open(photo.jpg, r)jpgdata f.read()f.close()我现在写这篇文章的原因,是大部分时间我看到open被这样使用。有三个错误存在于上面的代码中。你能把它们…

java开发中对于程序员的几点建议,你们有想到吗?

建议一:只有真正喜欢才能写好程序 喜欢写程序,做程序员就是上天堂; 不喜欢写程序,做程序员就是下地狱; 程序员需要整天趴在电脑前,经常没日没夜的,非常辛苦,而且工作来不得半点虚…

物化视图mysql,ClickHouse的物化视图及MySQL表引擎

-- . 在MySQL中创建表定义和加入数据:mysql> selectversion();-----------| version() |-----------| 8.0. |-----------row in set (0.01sec)mysql>show create table t_org\G*************************** . row ***************************Table: t_orgCre…

Java面向对象和面向过程有什么区别?网友:傻傻分不清楚……

面向对象,Obeject Oriented,是一种编程术语。面向对象是当今软件开发方法的主流方法之一,他是把数据以及对数据的操作放在一起,作为一个相互依存的整体,就是我们所说的对象。对同类对象抽象出其共性,就是类…

oracle oic配置,Oracle数据库 client配置

以下是11g client配置1. 从OTN下载几个压缩包下载地址为: http://www.oracle.com/technology/software/tech/oci/instantclient/index.html然后根据你的平台,选择不同的下载,我是安装在rhel5下,所以选择了linux x86 并下载了下面2…

Java 反射机制和动态代理是基于什么原理,了解过吗?

工作多年以及在面试中,我经常能体会到,有些面试者确实是认真努力工作,但坦白说表现出的能力水平却不足以通过面试,通常是两方面原因: 1、“知其然不知其所以然”。 做了多年技术,开发了很多业务应用&#x…

oracle执行sql痕迹,Oracle 查询刚执行的SQL

Oracle 查询刚刚执行的SQLselect "SQL_TEXT","SQL_FULLTEXT","SQL_ID","SHARABLE_MEM","PERSISTENT_MEM","RUNTIME_MEM","SORTS","LOADED_VERSIONS","OPEN_VERSIONS","USERS_…

成长为一名Java架构师需要掌握的技术有哪些呢?

Java架构师需要掌握的技术: 1、熟练使用各种框架,并知道它们实现的原理。 2、jvm虚拟机原理、调优,懂得jvm能让你写出性能更好的代码; 3、池技术,什么对象池,连接池,线程池……Java反射技术&…

php 分布式数据库查询,分布式数据库

# 分布式数据库ThinkPHP内置了分布式数据库的支持,包括主从式数据库的读写分离,但是分布式数据库必须是相同的数据库类型。配置database.deploy 为1 可以采用分布式数据库支持。如果采用分布式数据库,定义数据库配置信息的方式如下&#xff1…

Java程序员遇到瓶颈后我们可以试着朝四个方向拓展?你们觉得呢?

现如今随着IT行业的火热,人们对于编程技术也是越来越关注重视,在从业后我们做Java开发难免会遇到一些瓶颈。在我看来解决这个问题一般有以下4种方向: 基于产品本身 要记住公司招人是解决问题的,基于现有问题出发,大家…