标签: heap

堆的子节点

堆中子节点在堆的数组表示中的索引是什么。
在我的讲义和这篇文章中

它被给出为2k和/或2k+1

但是在数组中索引是从 0 开始的,而不是从 1 开始,对吗?
因此,节点 k 的子节点不应该是2k+1和/或2k+2

heap data-structures

1
推荐指数
1
解决办法
3460
查看次数

C++:何时使用“new”,何时不使用?| 添加:不重复

我是 C++ 新手,想知道什么时候应该使用 new,什么时候不应该使用,例如“int x = 5”或“int * x = new int(5)”。我知道新在堆中保留内存,因此在块结束时不会被删除,但由于保存地址的变量将在块之外变得不可访问,我看不到任何好处。

例子:

if(x) {
 int * z = new int(5);
 // Do something
}
// At this point the 5 is saved somewhere but since z is unaccessible I can't use it.
Run Code Online (Sandbox Code Playgroud)

补充:这个问题没有重复,因为其他问题只解释了什么是堆,而没有描述它的好处。

c++ heap

1
推荐指数
1
解决办法
171
查看次数

如果 siftDown 比 siftUp 更好,我们为什么要拥有它?

在阅读了诸如为什么在 heapify 中 siftDown 比 siftUp 更好?我有印象

  1. siftDown() 比 siftUp() 好
  2. siftDown() 总是可以代替 siftUp() ,反之亦然

为什么很多堆结构实现都有在 insert() 上调用的 siftUp()?维基百科的文章有它。

java algorithm heap data-structures

1
推荐指数
1
解决办法
1361
查看次数

为什么堆非常适合合并排序流?

我正在阅读一些算法书籍并遇到这一行,

Heaps are well suited for algorithms that merge sorted data streams. 
Run Code Online (Sandbox Code Playgroud)

没有给出任何解释为什么会出现这种情况。有人可以帮我解释一下这是为什么吗?

algorithm heap data-structures

1
推荐指数
1
解决办法
605
查看次数

将 numpy 数组添加到堆队列

有人可以解释为什么以下代码会导致 ValueError 吗?

import heapq
import numpy as np

a = np.ones((2, 2), dtype=int)

states = []
heapq.heappush(states, (0, a))
heapq.heappush(states, (0, a.copy()))
Run Code Online (Sandbox Code Playgroud)

错误信息是:

Traceback (most recent call last):
  File "x.py", line 8, in <module>
    heapq.heappush(states, (0, a.copy()))
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Run Code Online (Sandbox Code Playgroud)

运行它而不将它添加a.copy()到堆中可以正常工作,第二个/后续的由于某种原因是一个问题。我确实理解数组有一个未知的真值方面,[True, False, True]并且不可能确定单个TrueFalse从中确定,但为什么heapq需要这样做?尤其是仅在第二种情况下?

python arrays heap numpy

1
推荐指数
1
解决办法
2381
查看次数

C - 如何使用二进制堆和决胜局来实现优先级队列?

我必须使用 C 语言中的二进制堆为大学作业实现一个优先级队列。程序应该从输入中获取 n 个值,当值为 0 时,它应该打印 ID 号(因此,如果作为第 5 个元素添加的任务具有最高优先级 7,则打印“5”)并从中删除最高优先级的任务队列,当 value>0 时,它应该添加新节点。为了实现 ID 和优先级,我使用了结构数组。

任务将非常简单,如果元素的优先级相同,它也应该打印较低的 ID 的事实......我已经完成了我的研究,但我设法找到的唯一建议是修改典型的堆函数(insertkey、heapify)的片段也用于查找元素的 ID。我试过这样做,但我不知道出了什么问题 - 元素仍然没有按照我想要的方式排序。我将不胜感激任何建议和提示!

代码:

#include <stdio.h>

#define SIZE 99999

int heapsize = 0;
int count = 0;

struct pqueue
{
    int priority;
    int id;
};

struct pqueue A[SIZE];


void swap(int *x, int *y)
{
    int temp = *x;
    *x = *y;
    *y = temp;
}


void initializearray()
{
    for(int i=0; i<SIZE; i++)
    {
        A[i].priority = 0;
        A[i].id = 0;
    }
} …
Run Code Online (Sandbox Code Playgroud)

c heap queue

1
推荐指数
1
解决办法
1906
查看次数

python中的堆顺序

堆数据结构的新手。

尝试从列表创建堆。

li = [5, 7, 9, 1, 3]

heapq.heapify(li)
Run Code Online (Sandbox Code Playgroud)

经过 heapity 后,输出为

[1, 3, 9, 7, 5]
Run Code Online (Sandbox Code Playgroud)

为什么有这个命令?
我认为对于最小优先级堆,元素应该从最小到最大排序,即
heapq.heapify(li)应该与li.sort()

有人可以帮我理解吗?

python heap

1
推荐指数
1
解决办法
2291
查看次数

在最大堆中查找第二大元素的最快算法(具有重复项)

如果你有一个包含 n 个整数的最大堆,那么找到第二大元素的最有效方法是什么?堆可以包含重复项,因此具有n-1最大值和1其他值的堆将返回另一个值

例如,包含数字的堆:

4,4,4,4,4,4,4,3,4
Run Code Online (Sandbox Code Playgroud)

将返回值3

有没有办法比O(n)运行时更快地做到这一点?

algorithm heap data-structures

1
推荐指数
1
解决办法
2292
查看次数

在 Java 中以 O(N) 而不是 O(NlogN) 构建堆

为了构建堆,我们使用 java 中的 PriorityQueue 类。有没有办法使用内置库/类直接从 O(N) 中的数组构建堆,而不是单独推送每个元素以在 O(NlogN) 中构建堆?

java heap

1
推荐指数
1
解决办法
457
查看次数

最小堆插入函数

这是最小堆的插入函数。我不明白为什么它不起作用。

void insertHeapMin(Heap* h, int x){
if(isFull(h)){
    printf("heap is full\n");
    return;
}
for(i=0; i<h->size;i++) //I don't wan't to insert one number more than once; 
{
    if(x==h->data[i]) return;
}
int pos = h->size;
h->data[pos]=x;
while(pos>0){
    int parentPos = (pos-1)/2; 
    if (h->data[pos] < h->data[parentPos]){
        int temp = h->data[pos];
        h->data[pos] = h->data[parentPos];
        h->data[parentPos] = temp;
        pos = parentPos;
    } else
        break;
}
h->size++;
}
Run Code Online (Sandbox Code Playgroud)

主要的:

int a[] ={4,3,6,4,5};
size_t n = sizeof(a)/sizeof(a[0]);
Heap h;
initHeap(&h,100);
int i;
for(i=0;i<n;i++){
    insertHeapMin(&h, a[i]);
}
for(i=0;i<n;i++){
    printf("%d …
Run Code Online (Sandbox Code Playgroud)

c heap

1
推荐指数
1
解决办法
120
查看次数

标签 统计

heap ×10

data-structures ×4

algorithm ×3

c ×2

java ×2

python ×2

arrays ×1

c++ ×1

numpy ×1

queue ×1