我正在尝试使用KD树平衡一组(百万级别的)3D点,我有两种方法可以实现。
方法1:
使用O(n)算法查找给定轴上数组大小/ 2的最大元素,并将其存储在当前节点中
遍历向量中的所有元素,并将它们与刚刚找到的元素进行比较,并将那些较小的放入newArray1中,而将那些较大的放入newArray2中
递归
方法2:
使用快速排序O(nlogn)沿着给定轴对数组中的所有元素进行排序,取位置为arraysize/2的元素并将其存储在当前节点中。
然后将所有从索引0到arraysize/2-1的元素放入newArray1中,将那些从arraysize/2到arraysize-1的元素放入newArray2中
递归
方式2似乎更加“优雅”,但是方式1似乎更快,因为中位数搜索和迭代都是O(n),因此得到O(2n),这只是简化为O(n)。但是同时,即使方法2的时间复杂度为O(nlogn)排序,将数组分成2部分所需的常数时间可以完成,但是它是否弥补了O(nlogn)排序的时间呢?
我该怎么做?还是有一种更好的方法可以做到我甚至没有看到吗?