在这种情况下,合适的算法算法是什么?
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)
答案 0 :(得分:3)
复杂度为 O(NlogN)。
这是因为:
1。有一个外部for循环:有了这个外部for循环,您的时间复杂度已经达到O(N)。
这部分可能会有些混乱。我们将考虑两个情况。
这使算法为O(N ^ 2),因为现在您需要在每个迭代中遍历内部for循环!!!但是,如果您的if语句永远不会变为真,那么这是不太可能的。因此,我们也需要注意最佳案例方案。
这使算法成为O(N),因为您不必再进入内部for循环了!我们只会检查if语句,然后继续进行下一个迭代。
现在我们讨论摊销的运行时间。摊销运行时间仅意味着同时考虑最坏情况和最佳情况(有关摊销分析的更多信息,请参见:https://en.wikipedia.org/wiki/Amortized_analysis)。
因此,我们同时考虑O(N ^ 2)和O(N)。 假设我们在一半时间(摊销后)运行if语句,则时间复杂度为O(NlogN)。
O(NlogN)比O(N)快吗?只有当我们有超过一百万个对象时,这种情况才会成立。
希望这会有所帮助!