[英]Is variable initialization/assignment statement is a single operation or more?
我只是在学习算法的性能分析
我的问题:是int i=0;
被算作两个操作:辅助,初始化。或者它只是一个紧凑的操作? 我正在使用渐近分析,它使用操作数作为如何描述性能的示例
对此没有一个正确的答案。
在某些情况下,人们可能会将单个算术运算分析为“一个”运算。 其他时候,他们可能非常关心一个操作需要多少个周期,他们可能想说,例如,添加整数比乘以浮点数更便宜。
在许多情况下,程序员说取消引用指针是O(1)
。 然而,如果你真的在考虑n
趋于无穷大的情况,如果你的n
就像宇宙的大小,那么说将一个指针解引用到那个是O(1)
操作仍然有意义吗? 在某些理论背景下,人们会说取消引用指针本质上是O(log n)
。
然而,我曾与一位物理学家交谈过,他说即使是O(log n)
也可能在物理上是不现实的——他说宇宙在给定的体积空间中可以具有最大的信息密度。 这被称为“ Bekenstein Bound ”,事实证明最大熵是由黑洞实现的。 如果你假设在一个空间n
你只能有O(n)
位的内存,这基本上意味着在一个银河大小的计算机中,位必须像球体包装问题中的球一样被包装,然后距离典型的一对位之间的增长为O(n^{1/3})
。 由于信息不会比光速更快……也许解引用指针需要O(n^{1/3})
渐近? 哦
重点是,不要想太多。 你在渐近分析中所做的任何事情最终都是一个近似值,你只是想知道它需要多长时间。 您非常确定在您的情况下并不重要的事情,您可以分析为O(1)
,以便专注于重要的事情。 在另一种情况下,如果这些相同的事情代表了工作的“大部分”,那么您可能希望对其进行不同的分析。
IMO 如果您想知道如何在求职面试中回答有关这些问题的问题,您应该准备好以多种不同的方式对其进行分析,并向他们表明您了解诸如“does int i = 0;
count as an operation”之类的事情或两个”基本上是一个约定。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.