今年我参加了 AP 计算机科学考试,其中一个问题,对我来说是 16 号,似乎实际上没有一个完全正确的答案(尽管很清楚 AP 的人打算将哪个答案作为正确答案)。
问题如下:
以下哪项不能在按降序排序的数组上比在未排序的数组上更有效地实现?
A.) 搜索元素
B.) 找到中位数
C.) 求算术平均值
D.) 升序输出
E.) 找到最大值
虽然天真地,有人会给出答案 C,但我很确定这个答案并不完全正确。
举个例子:我有一个包含 4503599627370496 个双精度浮点值的数组,其中一个等于 9007199254740993,其余的都是 0.999999。根据大值的确切位置,找到平均值的天真的方法(遍历元素,将它们相加,将总数除以计数)将不会产生正确的值,除非(1)稍后将较大的元素添加到总和中(即数组已排序),(2)我们使用更高精度的值来跟踪总和(即我们使用更多资源),或者(3)我们使用其他一些也需要更多资源的方法。
如果它需要更多的资源,那么根据定义,它的效率就会降低。
此外,虽然这有点回避这一点,但如果你不将自己限制在计算东西的标准模型(例如,如果我们允许量子计算机),那么它们中的任何一个在未排序数组上都会变得和排序数组。
考试题实际上是有缺陷的,还是我在这里遗漏了什么?