我正在将VB6转换为C#,我希望使我的数据结构更有效地保持值和关系。在VB中,我有一组值和另一组关系,这些值与这些关系的优先级之间存在关系。我还有一个算法,当一组值传递给它时,返回将这些值连接在一起所需的所有关系。例如,假设值集合包含1-10,而关系集合包含
1,2
3,2
5,2
2,8
8,10
9,10
如果输入为1,9,10,则返回的关系为 -
1,2
2,8
8,10
9,10
由于可能存在多条路径,因此会返回最少量的关系,但需要注意关系优先级。如果关系具有更高的优先级,则将添加该关系,并且将从那里添加其余关系。我正在考虑使用Disjoint-set data structure,但我不确定。
有什么想法吗?
更多信息 -
值的数量通常小于100且关系小于500.集合是静态的,并且将一次又一次地使用算法来查找路径。另外,我没有问这个,但Disjoint-set data structure中的算法效率最高吗?
答案 0 :(得分:7)
听起来你拥有的是Graph。这是一个带有节点和边缘的结构。有many many libraries和处理图形的工具。 Microsoft甚至发表了一篇关于如何处理它们的论文。我认为图形很棒,在很多情况下非常有用。
图表的一大好处是能够为节点之间的边缘分配优先级。然后,当您想要找到两个节点之间的路径时,图表可以选择具有理想优先级的路径。
在您的情况下,您的值是节点,您的关系是边缘。
答案 1 :(得分:2)
您需要问自己(并告诉我们)您期望使用何种模式。这些关系是按顺序添加还是随机添加,您的查询是按顺序(如您显示)还是随机添加的,这实际上是一个批处理过程 - 加载它们,读取查询 - 或者您希望做什么?它“在线”,你可以添加一些,然后查询一些,然后再添加一些并查询更多?
您是否知道您希望预先存储多少,以及您希望存储多少?许多?成千上万的?数千万?
以下是一些建议: