设计PRIM算法最有效的数据结构是什么? 我在C++中用一个哈希表来设计一个图表。哈希表使用开放寻址,图形的边数不超过50000条。我还设计了一个PRIM算法来寻找图的最小生成树。我的PRIM算法为以下数据创建存储:
一个名为设计PRIM算法最有效的数据结构是什么? 我在C++中用一个哈希表来设计一个图表。哈希表使用开放寻址,图形的边数不超过50000条。我还设计了一个PRIM算法来寻找图的最小生成树。我的PRIM算法为以下数据创建存储:,c++,data-structures,graph,hashtable,minimum-spanning-tree,C++,Data Structures,Graph,Hashtable,Minimum Spanning Tree,一个名为Q的表,将所有节点放在开头。在每个循环中,访问一个节点,在循环结束时,从Q中删除该节点 一个名为Key的表,每个节点一个。必要时更改键(每个循环至少一次) 名为Parent的表,每个节点一个。在每个循环中,都会在此表中插入一个新元素 名为A的表。程序在这里存储最小生成树的最终边。返回的是那张桌子 假设图形有50000条边,那么创建这些表最有效的数据结构是什么 我可以使用数组吗 我担心每个数组的元素都会太多。当然,我甚至不考虑使用链表,因为每个元素的访问将花费很多时间。我可以用哈希表吗
Q
的表,将所有节点放在开头。在每个循环中,访问一个节点,在循环结束时,从Q中删除该节点
Key
的表,每个节点一个。必要时更改键(每个循环至少一次)Parent
的表,每个节点一个。在每个循环中,都会在此表中插入一个新元素A
的表。程序在这里存储最小生成树的最终边。返回的是那张桌子要查看我一直想添加的特性是否有一些形式,我以前没有注意到(或者在最近的C++版本中添加了)。据我所知,没有。大多数实际使用的优先级队列(当然是我所有的)都需要一些额外的小功能,我不知道如何在标准版本中添加这些功能。所以我需要从头重写它,包括额外的功能。但这其实并不难 我使用的方法已经被很多人重新发明了(我在70年代用C语言做这件事,并不是第一次)。在谷歌的快速搜索中,我发现了许多地方,其中一个地方对我的方法的描述比我之前描述的更为详细。
对不起,我看不出这是如何回答我的问题的……数据结构中的50K元素对于计算机来说是微不足道的。你在担心一个无关紧要的细节。@ManolisGrifoman我不明白为什么你需要所描述的数据结构的一半。为什么以及如何在哈希表中表示图形。。。这就是我发布链接的原因,因为Prims algo比你想做的要简单。在一些大于50K的尺寸下,原始解决方案的N平方方面会变得难看。然后您需要“优先级队列”的“智能修改”版本。据我所知,优先级队列的
std
版本不支持您需要的修改操作。编写一个更好的优先级队列并不难,但对于50K个元素来说并不值得。谢谢,我会尝试一下。