给定一个数组,找到O(1)中的顶部'x'

时间:2017-06-10 10:44:12

标签: hash max

我会在找到问题时写出问题,然后我会解释让我困惑的问题。

“老师正在从0到10分标记他的学生的工作,但他只标记8或以上的'n'学生的某个数字'x'(例如x = 15)。你得到一个以随机顺序排列所有学生的标记。在O(1)中找到'x'最佳标记。“

我们当然已经教过哈希,但这要求我将所有数据存储在一个绝对不是O(1)的哈希表中。也许我们不必考虑“转换”?如果我们这样做,也许与之后的搜索时间相结合的转换将导致与散列不同的方法。

在这种情况下,将O(1)放在一边,什么是最快的算法,包括转换和搜索时间?

1 个答案:

答案 0 :(得分:0)

简单:这是不可能的。

O(1)只有在所有输入大小,必要比较数和输出大小都是常数时才能实现。您可能会认为x可以被视为常量,但它仍然不起作用:

你需要检查每个输入元素,它们都是n,因为随机输入顺序甚至不允许任何启发式猜测x元素的位置,即使你已经已经在正常时间内正确猜到了其他x-1元素。

正如问题所述,没有解决办法可以在O(1)O(x)的上限进行。

让我们假设您的教练纠正了他的错误,并为您提供了一个修订版本,该版本正确地指出O(n)为必需的上限。

在这种情况下,您的哈希方法(几乎)是正确的。使用哈希函数的问题是,您现在需要考虑哈希函数上的潜在冲突,这就是哈希映射在O(1)中不能严格工作的原因,而是仅在“平均”中O(1)

如您所知,所有可能的值(0-10的等级),您只需分配具有已知索引的存储桶即可。在每个存储桶中,您可以使用链接列表,因为它们还允许恒定时间插入和线性时间迭代。