1
3
C/C++中最快的方法是
(30/31或62/63,取决于int的大小)。 这将按顺序0、2、3、1给出象限。 为lbushkin编辑:
|
2
1
我不知道您可以在C中使此代码显著更快。然而,您可能能够做的是,查看您如何处理点,并查看是否可以避免对该方法进行不必要的调用。也许你可以创造一个
但是,不可否认,这取决于您的算法在做什么,以及是否可以存储/记忆象限信息。如果每一点都是独一无二的,这显然没有帮助。 |
3
1
我刚刚听说了产生0,1,2,3象限结果的解决方案,其顺序正确:
此解用于双类型的x,y坐标。 我已经对这个方法和原始问题中带有分支的方法做了一些性能测试:我的结果是 分支方法总是快一点(目前我有稳定的160/180关系) ,所以我更喜欢分支方法而不是按位操作的方法。 更新 如果有人感兴趣,这三种算法都被合并到 EKAlgorithms C/Objective-C repository 作为“笛卡尔象限选择”算法:
这里的所有算法都经过了优化,可以使用双类型点。 性能测试表明 一般来说,第一个分支算法是赢家 在MacOSX上,尽管在Linux机器上,我们确实看到了第二种算法的执行速度比分支算法快一点。 因此,一般的结论是坚持使用分支算法,因为按位版本不提供任何性能增益。 |
4
0
我的第一个尝试是去掉嵌套条件。
如果允许对象限重新编号,则象限中的数组查找是可选的。我的代码仍然需要两个比较,但它们可以并行进行。 我为任何C错误预先道歉,因为我通常编码C++。 当两个无符号31位坐标存储在一个64位无符号长变量中时,可能会有更高效的方法。
后退一步,可能会有不同的解决方案。不要立即将数据结构拆分为象限,而是在两个方向交替排列。这也是在相关的 Kd-tree |
Robert King · Unity C#语法问题-转换位置 1 年前 |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
i_sniff_ket · 在unity之外使用unity类 2 年前 |