线性散列:快速找到' min'和' max'

时间:2015-05-25 16:05:18

标签: c++11 max min

我为我的Linear Hashtable实现了一个min()和max()函数,但我没有什么性能问题,因为我直接实现了它。 我只是假设找到的第一个元素是min / mix然后我将其余的元素与它进行比较。有更快的方法吗? 在哈希表中找到最小值/最大值?我在书中找不到任何东西。 我的第二种方法是在数组中编写每个值,然后仔细研究,但我不认为这更快。

2 个答案:

答案 0 :(得分:1)

通用哈希表不是元素的排序列表。因此,查找给定表格的O(n)min()将成为max()操作。

答案 1 :(得分:0)

与Bill Lynch达成协议,我们必须花费O(n)时间至少一次,但我们可能会尽可能地懒惰:

  • 在表格旁边存储minmax
  • 只要用户正在进行更新,请根据需要更新minmax
  • 删除后,检查已删除的项目是min还是max,如果是,请将标记设置为true,表示最小值或最大值已更改。如果已设置标志,则无需检查当前的最小/最大值
  • 在查找最小值/最大值时,请检查您的旗帜。如果尚未设置,则可以使用缓存的最小值或最大值。如果已设置,请花费O(n)时间再次设置它们。

现在我们只需要花费O(n)时间,而不是每次有人请求最小或最大时间O(n)时间。如果插入次数多于删除次数,您通常会看到O(1)查找时间。