假设连通图的边数已知并且每条边的权重不同,是否可以在线性时间内创建最小生成树?
为此,我们必须查看每个边缘;并且在此循环期间不能包含任何搜索,否则将导致至少 n log n 时间。如果不在循环中搜索,我不确定如何做到这一点。这意味着,不知何故,我们必须只查看每条边一次,并根据一些不涉及不断增长的数据结构的“静态”先前值来决定是否包含它。
所以..假设我们保留有问题的节点的端点,然后查看下一个节点,如果下一个节点与prev具有相同的顶点,则比较prev和当前节点的权重并保留较低的那个。如果当前节点的端点不等于 prev,那么它在不同的组件中.. 现在我被卡住了,因为我们无法创建哈希或数组来跟踪已经添加的组件节点,同时以线性方式查看每条边时间。
我想到的另一种方法是找到权重最小的边缘;由于边缘权重不同,因此该边缘将成为任何 MST 的一部分。然后..我被卡住了。因为我们不能在线性时间内对 n - 1 条边执行此操作。
有什么提示吗?
编辑
如果我们知道节点的数量、边的数量以及每个边的权重是不同的怎么办?比如说,有 n 个节点,n + 6 条边?
那么我们只需要找到并删除正确的 7 个边对吗?