假设图中的所有边缘权重均为1到| V |范围内的整数。您可以使Prim的算法运行多快?如果对于某个常数W,边缘权重是1到W范围内的整数,该怎么办?
给出答案:-
Prims算法的运行时间组成:
•O(V)初始化。
•O(V·EXTRACT-MIN的时间)。
•O(E·减小键的时间)。
如果边缘在1范围内,则。 。 。 ,| V | Van Emde Boas优先级队列可以将EXTRACT-MIN和DECREASE-KEY加快到O(lg lg V),因此总运行时间为O(V lg lg V + E lg lg V)= O(E lg lg V) 。如果边缘在1到W的范围内,我们可以将队列实现为数组[1 ... W + 1],其中第i个插槽包含权重为i的边缘的双链表。第(W + 1)个时隙包含∞。 EXTRACT-MIN现在以O(W)= O(1)的时间运行,因为我们可以简单地扫描第一个非空插槽并返回该列表的第一个元素。 DECREASE-KEY的运行时间也为O(1),因为它可以通过将元素从一个插槽移动到另一个插槽来实现。
怀疑1:如果是范围1,则。 。 。 ,| V | ,如何将EXTRACT-MIN和DECREASE-KEY加快到O(lg lg V)。
怀疑2:为什么将双重链表用于范围1 .... | W | ??