- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在这种情况下,合适的算法时间复杂度方程是什么?
A : O(NlogN)
B : O(logN^2)
其中 N 是对象(边界体积)的数量,记录 交叉迭代(光线反弹多少次)。
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)
最佳答案
复杂度为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) 快吗?仅当我们拥有超过一百万个对象时,情况才会如此。
希望这对您有所帮助!
关于algorithm - 这里的时间复杂度是多少? O(NlogN) 还是 O(logN^2)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52936493/
直觉上,我认为这三个表达式是等价的。 例如,如果一个算法在 O(nlogn) + O(n) 或 O(nlogn + n) 中运行(我很困惑),我可以假设这是一个O(nlogn) 算法? 什么是真相?
假设我有一个长度为 n 的数组,我使用时间为 nlogn 的排序算法对它进行了排序。得到这个排序后的数组后,我遍历它以找到任何具有线性时间的重复元素。我的理解是,由于操作是分开发生的,所以时间是 O(
我有 2 个 int 数组,我需要在 O(nlogn) 中打印所有相同的整数数组未排序,排序后可以是: X [ 1,2,3,4,5,6,7,8,9] Y [1,2,8,9] 所以只检查到第 4 个位置
我理解了合并排序的概念。但我很难分析合并排序的时间复杂度。我知道对于所有情况,即最坏情况、平均情况和最好情况,它都是 o(n log n) 。但我无法理解它是如何o(n log n) 的。在每次迭代中
给定两个已排序的整数数组 A1、A2,具有相同的长度 n 和一个整数 x,我需要编写一个算法在 O(nlog(n)) 中运行,确定是否存在两个元素 a1, a2(每个数组中的一个元素)使 a1+a2=
我正忙着准备考试,只是在做一些旧的试卷。下面的问题是我似乎唯一做不到的问题(我真的不知道从哪里开始)。任何帮助将不胜感激。 使用 Ω(nlogn) 比较排序边界、theta(n) 边界用于自下而上的堆
我正在阅读一本关于算法分析的书,发现了一个我不知道如何获得时间复杂度的算法,尽管书上说它是 O(nlogn)。 算法如下: sum1=0; for(k=1; k<=n; k*=2) for(j=1
我现在正在阅读 Cracking the Coding Interview 一书,并且正在做一个二叉树练习。根据 O(NlogN) 一书,有一段代码,但是,我不明白为什么会这样。我能理解算法是否为 O
假设我有一个空间要求为 nlogn 的函数,我想计算出该函数在给定可用空间下的最大输入大小。即我想在 nlogn=c 处找到 n。 我关注了an approach计算 n,在 R 中看起来像这样: s
我试图了解不同数据结构的时间复杂度,并从堆排序开始。根据我的阅读,我认为人们共同同意堆排序的时间复杂度为 O(nlogn);但是,我很难理解这是怎么回事。 大多数人似乎同意 heapify 方法采用
我得到了字符串哈希值数组,例如:“123-51s-12as-dasd1-das-41c-sadasdgt-31”。我需要找出是否有重复的内容。问题是,我需要在 O(nlogn) 时间内找到它们。 1)
我今天有一个实习面试,我无法弄清楚。 total = 0 product(int array[]) { if (array.length == 1) { return arra
该函数使用 int 列表并按递增顺序生成列表中的唯一元素。例如: singles([4,1,4,17,1]) => [1,4,17] 我只能在O(n^2)的运行时间内完成,想知道如何在不循环的
给定一个整数数组,返回一个新数组,其中每个元素新数组是其右侧较小元素的数量原始输入数组中的元素。例如,给定数组 [3, 4, 9, 6, 1],返回 [1, 1, 2, 1, 0]。 import b
我想找出数组中两个数字之间的最大差值,被减数必须在减法器之前。例如:在一个数组(3,1,5,4,2)中,最大差应该是3(5-2)。在数组(100, 3 ,200)中,最大差应该是97(100-3)。
我正在尝试解决所附图片中显示的问题。我得到了划分部分,您可以在其中递归地将线集分成两半,并且可以看到具有最小和最大斜率的线。 虽然我不知道如何进行合并部分,但我也不理解。 凭直觉,起初,我认为如果没有
在这本在线教科书中https://runestone.academy/runestone/static/pythonds/SortSearch/TheMergeSort.html他们为合并排序提供了以
我们最近在学习中接到任务,用主定理解决递归函数的复杂性。我知道这些问题在这里被问了很多,但我无法从这些问题中找出这个问题的答案。特别是一个问题很好地描述了问题:here 我的问题是递归函数 T(n)
问题陈述:目标是在 nlogn 时间内找到最长的递增子序列(不连续)。 算法:我理解这里解释的算法: http://www.geeksforgeeks.org/longest-monotonicall
我知道这里有很多与我的问题相关的问题,但我仍然感到困惑。我对计算几何有点陌生,任何建议都会有所帮助。 问题:一组n矩形,其边平行于x轴或y轴,并且每个矩形的长度和高度都相同;已知每个矩形的四个角点的坐
我是一名优秀的程序员,十分优秀!