我会在找到问题时写出问题,然后我会解释让我困惑的问题。
“老师正在从0到10分标记他的学生的工作,但他只标记8或以上的'n'学生的某个数字'x'(例如x = 15)。你得到一个以随机顺序排列所有学生的标记。在O(1)中找到'x'最佳标记。“
我们当然已经教过哈希,但这要求我将所有数据存储在一个绝对不是O(1)的哈希表中。也许我们不必考虑“转换”?如果我们这样做,也许与之后的搜索时间相结合的转换将导致与散列不同的方法。
在这种情况下,将O(1)放在一边,什么是最快的算法,包括转换和搜索时间?
答案 0 :(得分:0)
简单:这是不可能的。
O(1)
只有在所有输入大小,必要比较数和输出大小都是常数时才能实现。您可能会认为x
可以被视为常量,但它仍然不起作用:
你需要检查每个输入元素,它们都是n
,因为随机输入顺序甚至不允许任何启发式猜测x
元素的位置,即使你已经已经在正常时间内正确猜到了其他x-1
元素。
正如问题所述,没有解决办法可以在O(1)
或O(x)
的上限进行。
让我们假设您的教练纠正了他的错误,并为您提供了一个修订版本,该版本正确地指出O(n)
为必需的上限。
在这种情况下,您的哈希方法(几乎)是正确的。使用哈希函数的问题是,您现在需要考虑哈希函数上的潜在冲突,这就是哈希映射在O(1)
中不能严格工作的原因,而是仅在“平均”中O(1)
。
如您所知,所有可能的值(0-10的等级),您只需分配具有已知索引的存储桶即可。在每个存储桶中,您可以使用链接列表,因为它们还允许恒定时间插入和线性时间迭代。