【问题标题】:What is the time complexity here ? O(NlogN) or O(logN^2)?这里的时间复杂度是多少? O(NlogN) 还是 O(logN^2)?
【发布时间】:2018-10-23 03:48:11
【问题描述】:

在这种情况下,算法适合的时间复杂度方程是什么?

A : O(NlogN)

B : O(logN^2)

其中 N 是对象(边界体)的数量,log 是交叉点的迭代次数(光线会反弹多少次)。

Set Camera Position (eye position) 

IF (Object – is found in the scene) 
|  Create Bounding Volume (BV)

For (ALL BV)
|  Get Min-Max Values for X,Y Coordinates 
|  Eliminate Intersection Testings 
|  IF (2 or more Objects are close in range)  
|  |  Intersect(Ray, Object(s)) 
|  |  FOR (each Triangle (T) in the object) 
|  |  |  Intersect(Ray, T) 
|  |  |  E.g Detect Colour And Texture
|  ELSE (Do not Intersect) 

【问题讨论】:

    标签: algorithm graphics time-complexity big-o raytracing


    【解决方案1】:

    复杂度为 O(NlogN)

    这是因为:

    1.有一个外部 for 循环:使用这个外部 for 循环,您的时间复杂度已经是 O(N)。

    这部分可能会有点混乱。我们将考虑两种案例。

    最坏情况:每个循环都有 2 个或更多对象靠近范围。

    这使得算法 O(N^2) 因为现在您需要在每次迭代时都经过内部 for 循环!!!但是,您的 if 语句不太可能永远为真......所以我们还需要注意最佳情况

    最佳情况:没有一个物体在范围内。

    这使得算法 O(N),因为您不必再​​进入内部 for 循环!我们将只检查 if 语句并继续进行下一次迭代。

    那么时间复杂度是多少? O(N^2) 或 O(N)?

    现在我们讨论摊销运行时间。摊销运行时间意味着同时考虑最坏情况和最佳情况(更多关于摊销分析的信息可以在这里找到:https://en.wikipedia.org/wiki/Amortized_analysis)。

    所以我们同时考虑 O(N^2) 和 O(N)。 假设我们运行 if 语句的一半时间(摊销),时间复杂度将为 O(NlogN)。

    O(NlogN) 比 O(N) 快吗?只有当我们拥有超过一百万个对象时,这才是正确的。

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-22
      • 1970-01-01
      • 1970-01-01
      • 2022-12-04
      • 1970-01-01
      • 2019-12-13
      • 1970-01-01
      相关资源
      最近更新 更多