【发布时间】:2015-02-20 21:35:30
【问题描述】:
本题涉及软件算法,来自On topic
我正在处理来自Amazon Software Question 的面试问题,
具体
“给定一组点 (x,y) 和一个整数“n”,返回接近原点的 n 个点”
这是此问题的示例高级伪代码答案,来自Sample Answer
第 1 步:设计一个名为 point 的类,它具有三个字段 - int x、int y、int distance
第 2 步:对于给定的所有点,找出它们与原点之间的距离
步骤 3:将值存储在二叉树中
第 4 步:堆排序
第 5 步:打印二叉树的前 n 个值
我同意第 1 步和第 2 步,因为就面向对象设计而言,拥有一个数据软件包 Point 封装 x、y 和距离字段是有意义的。Ensapsulation
有人可以解释从 3 到 5 的设计决策吗?
这是我将如何执行 3 到 5 步的方法
第 3 步:将所有点存储在一个数组中
第 4 步:根据距离对数组进行排序(我在这里使用了一些内置排序,例如 Arrays.Sort
第 5 步:将数组按升序排序,打印前 n 个值
为什么该响应的作者使用更复杂的数据结构,二叉树,而不是像我使用的数组这样简单的东西?我知道二叉树是什么 - 具有两个指针的节点的分层数据结构。在他的算法中,您是否必须使用 BST?
【问题讨论】:
-
也许他们的意思是堆排序通常使用的隐式二叉树?
-
正如@harold 所说,听起来他们的意思是您从二进制堆中插入和提取,该堆的Big-O 为
log(n),这比您使用的n log (n)更好排序数组方法。 -
@jpriebe 但你必须插入 n 项......所以它仍然是 n log n
-
可能是因为 Arrays.sort 的时间和空间复杂度比堆排序(最坏情况下为 nlogn)要多。 stackoverflow.com/a/22571601/2344337
-
你说得对,阿德里安,我的错
标签: java arrays algorithm sorting tree