在具有n个元素的最小堆中,最小元素位于根



在一个包含n个元素的最小堆中,根元素最小,可以及时找到第7个最小元素。

  1. Θ(nlogn(
  2. θ(n(
  3. θ(logn(
  4. θ(1(

我的理解:在最小堆上找到最小元素的时间-一次检索操作-Θ(1(在最小堆中找到第二小元素的时间-需要2次2次−1=3次检查操作才能找到3个元素中第二小的元素—θ(1(。

找到第七个最小元素的时间-需要O(27−1(=O(127(检查操作,才能在127个可能的元素中找到第七大最小元素—θ(1(。

简而言之,如果所需操作的数量与输入大小n无关,那么它总是θ(1(。(在这里,我们对堆进行级别顺序遍历并检查元素(。

或者我也可以这样看:如果我们不被允许遍历堆,只允许默认的堆操作,我们将被限制执行Extract min7次,这将是O(n(。

我怀疑哪种方式是正确的——答案应该是什么。

最小堆是一种特定的节点排列,您可以遍历它来找到O(1(时间内第7个最小的元素,因为您最多必须访问127个节点。

优先级队列是一种抽象数据类型,它提供了一个提取最小操作,但不一定使用可以通过这种方式遍历的最小堆来实现。

在最小堆中提取最小值需要log(n)时间,并且由于限制在第7个位置(一个常数(,因此所花费的时间仍然是log(n)的数量级。

如果你试图找到第7个最小的元素,一种方法是从堆中提取顶部元素6次,然后读取(而不是提取(堆的顶部。这是你的第7小元素。您的运行时间仍然是log(n)的数量级,因为您正在从堆中删除固定次数。现在,您可能需要将这6个元素重新插入堆中。每个插入都有log(n)的最差时间,这仍然是log(n),因为6是常数。

最新更新