线性哈希:查找 'min' 和 'max' 的快速方法

Linear Hashing: Fast Method for finding 'min' and 'max'

我为我的线性哈希实现了一个 min() 和 max() 函数table,但我几乎没有性能问题,因为我直接实现了它。 我只是假设找到的第一个元素是 min/mix 然后我将其余元素与它进行比较。有没有更快的方法 在散列 table 中找到 min/max?我在我的书中找不到任何东西。 我的第二种方法是将每个值写入一个数组,然后查看它,但我不认为这样更快。

通用哈希 table 不是经过排序的元素列表。所以这将是一个 O(n) 操作来找到给定 table 的 min()max()

同意 Bill Lynch 的意见,我们至少要花 O(n) 一次时间,但是我们可以越懒越好:

  • minmax 与 table
  • 一起存储
  • 只要用户在进行更新,就会根据需要更新 minmax
  • 删除后,检查删除的项目是否为minmax,如果是,则将标志设置为true,指示最小或最大已更改。如果标志已经设置,则无需检查当前 min/max
  • 查找 min/max 后,检查您的标志。如果尚未设置,您可以使用缓存的最小值或最大值。如果已设置,请花费 O(n) 时间重新设置它们。

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