首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >对于像C++这样的现实世界的语言,是否有一致的时间复杂性定义?

对于像C++这样的现实世界的语言,是否有一致的时间复杂性定义?
EN

Stack Overflow用户
提问于 2019-10-31 02:28:28
回答 4查看 321关注 0票数 4

C++试图将时间复杂度的概念引入到许多库函数的描述中,但渐近复杂性是一个基于渐近行为的数学构造,当输入的大小和数字的值趋于无穷大时,它是基于渐近行为的。

显然,在任何给定的C++实现中,标量的大小是有限的。

什么是与C++操作的有限和有界性质相兼容的C++复杂性的正式形式化?

注意:不用说,对于基于类型参数(如STL)的容器或算法,复杂性只能用用户提供的操作数(例如排序的内容的比较)来表示,而不能用基本的C++语言操作来表示。这不是问题所在。

编辑:

标准报价:

4.6 程序执行 [intro.execution] 1本国际标准中的语义描述定义了一个参数化的非确定性抽象机器。本国际标准不对一致性实现的结构提出任何要求。特别是,它们不需要复制或模仿抽象机器的结构。相反,遵循实现需要(仅)模仿抽象机器的可观察行为,如下所述。 2抽象机器的某些方面和操作在本国际标准中被描述为实现定义(例如,sizeof(int)) )。这些构成了抽象机器的参数。..。

C++语言定义为基于标量类型的抽象机器,例如具有有限位数的整数类型,并且只有这么多可能的值。(Dito表示指针。)

不存在“抽象”C++,其中整数将是无界的,并且可能“趋向于无穷大”。

它意味着在抽象机器、任何数组、任何容器中,任何数据结构都是有界的(即使与可用的计算机及其微小的内存相比可能是巨大的)(与f.ex相比)。64位数)。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-10-31 21:17:42

什么是官方形式的复杂性在C++,兼容的有限和有界性质的C++操作?

根本就没有。

票数 0
EN

Stack Overflow用户

发布于 2019-10-31 03:40:21

显然,中标量的大小--任何给定的C++实现--都是有限的。

当然,这句话你是对的!另一种说法是"C++运行在硬件和硬件上是有限的“。再一次,绝对正确。

然而,关键是:C++不是针对任何特定的硬件进行形式化的,而是针对抽象机器进行形式化的。

作为一个例子,sizeof(int) <= 4对我个人曾经为之编写的所有硬件都是正确的。然而,在关于sizeof(int)的标准中根本没有上限。C++标准说明int的大小,长类型是什么?

因此,在特定的硬件上,对某些函数void f(int)的输入确实受到2^31 - 1的限制。所以,从理论上说,不管它做什么,这都是一个O(1)算法,因为它的运算数永远不能超过一定的极限(这是O(1)的定义)。但是,上的抽象机器实际上没有这样的限制,所以这个论点不能成立。

因此,总之,我认为您的问题的答案是,C++没有您想象的那么有限。C++既不是有限的也不是有界的。硬件就是。C++抽象机器不是。因此,描述标准算法的形式复杂性(由数学和理论CS定义)是有意义的。

认为每一种算法都是O(1),因为在实践中总是有硬件限制,可以用纯理论的思想来证明,但这是毫无意义的。尽管严格地说,大O只在理论上是有意义的(在那里我们可以走向无穷大),但在实践中它通常也是相当有意义的,即使我们不能走向无穷大,而只能是2^32 - 1

更新:

关于你的编辑:你似乎混淆了两件事:

  1. 没有特定的机器(不管是抽象的还是真实的)具有可能“趋向无穷大”的int类型。这是你说的,这是真的!所以,在这个意义上,总是有一个上界。
  2. C++标准是为编写的,任何机器将来都可能被发明出来。如果有人用sizeof(int) == 1000000创建硬件,这是符合标准的。所以,,在这个意义上,没有上界。

我希望你能理解第一条和第二条之间的区别,以及为什么两者都是有效的陈述,而不是相互矛盾的。每台机器都是有限的,但是硬件供应商的可能性是无限的。

因此,如果标准指定了算法的复杂性,它就会(必须)在第2点上这样做,否则就会限制硬件的增长。这种增长没有限制,因此使用复杂性的数学定义是有意义的,它也假定没有极限。

票数 7
EN

Stack Overflow用户

发布于 2019-10-31 02:57:30

渐近复杂性是一种基于渐近行为的数学构造,当输入的大小和数值趋于无穷大时。

对,是这样。类似地,算法是抽象实体,可以在给定的计算框架(如图灵机)中分析这些度量。

C++试图在许多库函数的规范中使用时间复杂度的概念。

这些复杂性规范对您可以使用的算法施加了限制。如果std::upper_bound具有对数复杂度,则不能使用线性搜索作为底层算法,因为这只具有线性复杂度。

显然,在任何给定的C++实现中,标量的大小是有限的。

显然,任何计算资源都是有限的。您的RAM和CPU只有有限多个状态。但这并不意味着一切都是恒定的时间(或止步问题解决了)。

规范一个实现可以使用哪些算法是完全合理和可行的(在大多数情况下,std::map作为一个红黑树实现是其接口函数复杂性要求的直接后果)。对真实世界程序的实际“物理时间”性能的影响既不明显也不直接,但这不在范围之内。

让我用一个简单的过程来指出你论点中的不一致之处:

  1. C++标准指定了某些操作(例如.empty().push_back(...))的复杂性。
  2. 实现者必须选择符合这一复杂性标准的(抽象的、数学的)算法。
  3. 然后,实现者编写代码,在特定的硬件上实现该算法。
  4. 人们编写并运行其他使用此操作的C++程序。

您的论点是,确定结果代码的复杂性是没有意义的,因为您不能在有限的硬件上形成渐近线。这是正确的,但它是一个稻草人:这不是标准所做或打算做的。该标准指定了(抽象的、数学的)算法(点1和2)的复杂性,这最终导致(现实世界,有限的)实现(点3)的某些有益的效果/属性,以造福于使用操作的人(第4点)。

这些效果和属性在标准中没有明确规定(尽管它们是这些具体标准规定的原因)。这就是技术标准是如何工作的:您描述的是如何做事情,而不是为什么这是有益的,也不是如何最好地使用它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58641349

复制
相关文章
现实世界中的 Python
非常稳定。 自 1991 年起大约每隔 6 到 18 个月就会推出新的稳定发布版,这种状态看来还将持续下去。 目前主要发布版本的间隔通常为 18 个月左右。
py3study
2020/01/16
4650
对于问题的简单定义
学习此部分的目的:发现在没有单独的行动可以解决问题的时候,机器如何找到一个行动序列达到他的目标;在这部分中,通过讨论一些无信息的通用搜索算法,来比较各部分算法的优缺点; 1;问题求解的智能体 当智能体能够采用一个目标并针对这个目标得到满足而去行事,达到性能度量最大化时会被简化。因为这个世界不确定的因素太多,而问题的解可能有很多的问题,比如说过多的步骤。将问题形式化是决策对于给定的目标需要考虑哪些行动和状态的过程。一般来说一个机器有多个评价未知的直接选项的时候,可以首先检验各个不同的能导致已知评价状态的可能
云时之间
2018/04/11
8790
浅论C++的复杂性
C++语言已经有了30多年的历史。作为一门影响广泛的编程语言,它所受到的关注和争论恐怕是任何一门其他的语言所不能比拟的。十几年前,Java等新生语言的出现曾导致“C++信任危机”,但最终C++以自身非凡的品质屹立于主流编程语言的行列。在有着众多编程语言可以选择的今天,到底还有没有必要学习C++?怎样学习C++?怎样使用C++?对于广大的程序员,特别是对于刚刚接触编程的学习者,这些问题都是至关重要的。
恋喵大鲤鱼
2018/08/03
1.1K0
C++自定义类的对象对于其私有变量的访问
以下语法规则是不言自明的: 在自定义类A的成员函数中,可以对该类的私有成员变量进行赋值等操作,但是在类定义之外所声明的A类的对象aobj是不可以直接访问A类的私有变量的,只有通过在A类的成员函数中开放访问其私有变量的接口,对象aobj才可以对私有变量进行操作。
大忽悠爱学习
2021/11/15
1.5K0
现实世界中的原生 Java
作者 | KimJohn Quinn, Rakesh Raja, Jason Moehlman
深度学习与Python
2022/06/11
6620
现实世界中的原生 Java
MVC 软件架构对于现实生活的启发
近期学习了MVC的软件架构。期间不禁得思考这样的架构是否可以作为支撑日常生活计划甚至是思考的模型。
杨丝儿
2022/03/17
4360
MVC 软件架构对于现实生活的启发
[物联网] 3.1 设备--通向现实世界的接口
为什么要学习设备的相关知识 经过前两章的学习,想必各位读者已经掌握物联网这个词描绘出的世界和用于实现物联网的系统架构了。基于这点,这一章将会为大家介绍在物联网世界中起着核心作用的因素,即设备的相关知识。 可能有人会觉得自己没有必要学习设备的机制,但是,请这样认为并想赶快读完本章的读者稍稍放慢速度,因为本章正是为了那些以往没有从事过设备开发的读者们编写的。 而且,所有的工程师都有必要加深对设备的理解,因为这关系到“连通性”给设备开发带来的变化。这里我们就先来看看这些变化。 连通性带来的变化 很显然,智能手机和随身听等伴随大家日常生活的设备都是由硬件和软件组成的。硬件经过了精致的设计,软件则用来控制硬件。设备开发的本质就是在最大限度上实现硬件和软件的完美配合。 对于平日里从事 Web 应用程序开发的各位软件工程师来说,提到设备开发,或许大家就会有一种敬而远之的感觉。在考虑独立开发某种设备的时候,肯定会有人担心以下这些问题。 ● 是否需要对硬件有深入的了解 ● 开发设备控制软件是否需要专业知识 ● 开发硬件是否需要特殊的开发环境 就结论而言,这些问题的答案很统一:需要。就像大多数人都知道的那样,用于控制设备的软件有一个明确的种类,那就是“嵌入式软件”。开发嵌入式软件需要极强的专业性,即使是在物联网的世界,这一本质也基本没有什么变化。 那么,物联网会带来哪些改变呢?解开这个问题的关键词就是“连通性”。连通性一词表示的是机器和系统间的相互连接性和结合性。物联网设备试图经由网络来“连接”外部系统,并通过以下技术革新让以往人们无法想象的一些设备都具备了连通性(图 3.1)。 ● 硬件的进化使设备的小型化和高级化得以发展 ● 能够在广域条件下轻易地利用高速度 / 高品质网络的环境得以实现
科控物联
2022/03/29
2970
[物联网] 3.1 设备--通向现实世界的接口
C++丨初识C++像极了C语言
Reference:https://en.cppreference.com/w/cpp/keyword
AXYZdong
2022/09/02
1.5K0
C++丨初识C++像极了C语言
像这样的高考,其实我们每天都在经历
2022年6月7日,北京时间11:30,随着高考第一场科目语文考试结束,全国各地的高考作文题也正式在公众面前“登台亮相”。今年全国乙卷的高考作文题目是“跨越,再跨越”,双奥之城闪耀世界,两次奥运会展示了我国综合国力的跨越式发展,同期腾讯云数据库也实现了从儿童向有为青年的跨越。 卓越永无止境,跨越永不停歇。腾讯云数据库在跨越、再跨越的国产化路上,历经十八载,交出了自己的答卷。 1978年,萨师煊老师在黑板上写下“数据库”三个字,数据库理论正式进入中国。如今国产数据库已经走过了整整44年。从上世纪八九十年代,国
腾讯云数据库 TencentDB
2022/06/08
4810
像这样的高考,其实我们每天都在经历
【Python环境】Python分类现实世界的数据
引入 一个机器可以根据照片来辨别鲜花的品种吗?在机器学习角度,这其实是一个分类问题,即机器根据不同品种鲜花的数据进行学习,使其可以对未标记的测试图片数据进行分类。这一小节,我们还是从scikit-learn出发,理解基本的分类原则,多动手实践。 Iris数据集 Iris flower数据集是1936年由Sir Ronald Fisher引入的经典多维数据集,可以作为判别分析(discriminant analysis)的样本。该数据集包含Iris花的三个品种(Iris setosa, Iris virgin
陆勤_数据人网
2018/02/27
9980
【Python环境】Python分类现实世界的数据
【C++】走进C++的世界
定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后跟着一对{}即可,{}中即为命名空间的成员。
平凡的人1
2022/11/15
9790
【C++】走进C++的世界
区块链游戏:虚拟世界与现实世界间的博弈
游戏平台是区块链技术落地的最好土壤。当今,区块链游戏成为了生活不可或缺的一部分。区块链游戏已经演变为90后、00后最热衷的社交方式。区块链游戏能够使游戏玩家自由穿梭于虚拟和现实世界间,在游戏中快意人生。
陌上花开2018
2018/07/05
2.7K0
区块链游戏:虚拟世界与现实世界间的博弈
多云世界中的三个严酷的现实
调查机构Gartner公司的调查表明,云计算和工业化服务的增长以及传统数据中心外包的减少,表明了企业向混合基础设施服务的巨大转变。到2021年其市场规模估计将达到917.4亿美元。 在过去的五年中,软
静一
2018/03/15
8850
多云世界中的三个严酷的现实
世界地球日|你的“衣食住行”也可以像这样酷炫到爆!
俗话说得好,科技改变生活,现如今人们也在用科技在改变全球环境。 世界地球日(Earth Day),即每年的4月22日,是一个专为世界环境保护而设立的节日,旨在提高民众对于现有环境问题的意识,并动员民众
镁客网
2018/05/25
5800
对于没有编程经验的人,R 语言是否很难掌握?
R 是统计领域广泛使用的诞生于 1980 年左右的 S 语言的一个分支。R 是属于 GNU 系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。 从R的普及来看,国外的普及度要明显好于国内,跟盗版windows的泛滥会影响linux在中国的普及一样的道理,破解的SAS与SPSS的存在也影响了R在中国的使用人群。但在国外高校的统计系,R几乎是一门必修的语言,具有统治性的地位。在工业界,作为互联网公司翘楚的google内部也有不少的工程使用R进行数据分析工作。那么,如果你是一个
小莹莹
2018/04/24
1.3K0
对于没有编程经验的人,R 语言是否很难掌握?
英伟达DesignWorks VR用虚拟现实做现实世界的设计
英伟达(NVIDIA)发布了DesignWorks VR,一套新的工具配合之前推出的GameWorks VR SDK一起使用,聚焦代替在虚拟现实里创建物理对象。 现在,英伟达已经启动一项新的倡议,以协助利用虚拟现实技术,帮助产品设计师和建筑师使用虚拟现实的独特功能为真实世界创建对象。 建立在英伟达最近推出的GameWorks VR(专注于在英伟达硬件上发挥虚拟现实体验最大效用的一款SDK)上,DesignWorks VR扩展可用的工具集同时改进支持Open CL,专注于设计和雕刻对象特性甚至面向现实世界的物
GPUS Lady
2018/03/30
7230
边缘服务的一致性、耦合和复杂性
技术公司采用微服务架构已经十多年了,结果好坏参半。微服务之间的依赖关系导致在修改一个服务时也需要修改其他服务,微服务的优势因此打了折扣。这就是所谓的紧密耦合。但组件之间的依赖关系是不可避免的。
深度学习与Python
2021/10/13
9500
判断是否有重复的数字
import java.util.Scanner; import java.util.HashMap; public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); int m=input.nextInt(); HashMap map=new HashMap(); while(m-->0) { int tmp=input.nextInt(); if(
葆宁
2019/04/18
3.5K0
判断是否有重复的数字
服务器上的RTC时间与世界时间不一致解决办法
无论怎么修改ntp server都不行,data命令查看比世界时间快了20分钟左右,使用timedatctl命令查看,发现显示的是RTC时间
姚华
2022/06/29
2.2K0
C++对于大型图片的加载缩放尝试
Qt对于图片的操作主要集中在这几个类 QImage ,QImageReader ,QPixmap 其中QImage这个类对图片的缩放有几个很不错的技巧,不过对于大图片却并不好使,当我们去看QImage的实现代码时,会发现其中读取QImageReader来加载图片,当我们去看QImageReader的实现的时候,我们会发现QImageReader的加载模式是unbuffer-->无缓冲加载模式,而且加载速度也是相当的快,所以QImageReader对大图片进行缩放很好使. 但是QImage也是有一些独特的优势
Gxjun
2018/03/27
1.8K0

相似问题

现实世界中的Clean编程语言?

62

是否有像access()这样的函数,但是对于特定的用户id?

33

对于'UNIX‘有像'dumpbin’这样的命令吗?

31

对于像Option<T>这样的东西是否有锈蚀变量命名约定?

34

有人能用现实世界的语言来定义闭包是什么吗?

514
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文