变量初始化/赋值语句是单个操作还是更多?

时间:2016-04-23 19:31:23

标签: java c++11

我刚刚学习算法的性能分析

我的问题:int i=0;是否算作两个操作:assisgment,intialization。或者它只是一个紧凑的操作? 我使用渐近分析,使用no操作作为如何描述性能的示例

1 个答案:

答案 0 :(得分:0)

没有一个正确的答案。

在某些情况下,人们可能将单个算术运算分析为"一个"操作。其他时候,他们可能会非常关心一个操作将花费多少个周期,他们可能想要说明这一点。添加整数比浮动乘法便宜。

在许多情况下,程序员说取消引用指针是O(1)。但是,如果您真的在考虑n无穷大时的情况,如果您的n与宇宙的大小相似,那么将指针取消引用是否仍然有意义{{ 1}}操作? In some theoretical contexts,人们会说取消引用指针基本上是O(1)

然而,我曾与一位物理学家谈过,他说即使O(log n)可能在物理上也不现实 - 他说宇宙在给定的体积空间中可以拥有最大的信息密度。这被称为" Bekenstein Bound",事实证明最大熵是由黑洞实现的。如果你假设在一个空间体积O(log n)中你只能拥有n个内存,那么它基本上意味着在银河系大小的计算机中,必须在{{3然后,典型位对之间的距离增长为O(n)。由于信息的速度不比光速快......可能会取消引用指针需要O(n^{1/3})渐近吗? O.o

重点是,不要过分暗示这一点。你在渐近分析中所做的任何事情最终都是近似的,你只是想要了解它需要多长时间。在你的情况下,你非常确定的事情真的很重要,你可以分析为O(n^{1/3}),以便专注于重要的事情。在另一种情况下,你可能想要以不同的方式分析那些相同的东西,如果它们代表大多数"工作。

IMO如果你想知道如何在求职面试中回答有关这些问题的问题,你应该准备好以多种不同的方式对其进行分析,并告诉他们你理解像#34;这样的事情{{1算作一个或两个操作"基本上是一种惯例。