【问题标题】:Is variable initialization/assignment statement is a single operation or more?变量初始化/赋值语句是单个操作还是更多?
【发布时间】:2016-04-23 19:31:22
【问题描述】:

我只是在学习算法的性能分析

我的问题:int i=0; 是否算作两个操作:赋值,初始化。或者它只是一个紧凑的操作? 我正在使用渐近分析,它使用操作数作为如何描述性能的示例

【问题讨论】:

  • 这是在 Java 还是 C++ 的上下文中?请澄清。
  • 这只是一种计数操作的方式,该语句在两种语言之间是通用的。我想!
  • 但我更喜欢java程序员来回答
  • 对于Java(不懂C++),参考stackoverflow.com/questions/3463658/…
  • @KaremEmad - 在类中的实例成员变量“i”的这个语句在 C++ 和 Java 中可能意味着不同的东西。在 C++ 中,这将使用提供的值进行初始化,但在 Java 中,我猜有一个默认值初始化,然后是指定值的赋值。

标签: java c++11


【解决方案1】:

这个问题没有一个正确的答案。

在某些情况下,人们可能会将单个算术运算分析为“一个”运算。其他时候,他们可能非常关心一个操作需要多少个周期,并且他们可能想说,例如添加整数比乘以浮点数更便宜。

在许多情况下,程序员说取消引用指针是O(1)。但是,如果您真的在考虑n 变为无穷大的情况,如果您的n 就像宇宙的大小,那么说取消引用指向它的指针是O(1) 操作是否仍然有意义? In some theoretical contexts,人们会说解引用指针本质上是O(log n)。

但是,我曾经与一位物理学家交谈过,他说即使O(log n) 也可能在物理上不现实——他说在给定的体积空间中宇宙可以拥有最大的信息密度。这被称为“Bekenstein Bound”,原来最大熵是由黑洞实现的。如果您假设在空间体积n 中只能有O(n) 位内存,这基本上意味着在银河大小的计算机中,位必须像球一样包装在sphere packing problem 中,然后一对典型位之间的距离正在增长为O(n^{1/3})。由于信息不会比光速快...也许取消引用指针需要O(n^{1/3}) 渐近?哎哟

重点是,不要想太多。您在渐近分析中所做的任何事情最终都是近似值,您只是想对需要多长时间有一个有用的想法。您很确定在您的情况下并不重要的事情,您可以分析为O(1),以便专注于重要的事情。在另一种情况下,如果它们代表“大部分”工作,那么您可能希望以不同的方式分析相同的事物。

IMO 如果您想知道如何在工作面试中回答有关这些问题的问题,您应该准备好以多种不同的方式对其进行分析,并向他们表明您了解诸如“int i = 0; 是否算作一个操作或两个”基本上是一种约定。

【讨论】:

    猜你喜欢
    • 2018-03-04
    • 2014-07-26
    • 2011-01-26
    • 1970-01-01
    • 2021-12-19
    • 2017-12-03
    • 2014-12-29
    • 2011-09-09
    • 2023-02-01
    相关资源
    最近更新 更多