我刚刚学习算法的性能分析
我的问题:int i=0;
是否算作两个操作:assisgment,intialization。或者它只是一个紧凑的操作?
我使用渐近分析,使用no操作作为如何描述性能的示例
答案 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算作一个或两个操作"基本上是一种惯例。