我正在将 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中的算法会问吗?是最有效率的?
最佳答案
听起来你拥有的是一个 Graph .这是一个具有节点和边的结构。有many many libraries和处理图形的工具。 Microsoft甚至发表了一篇关于如何处理它们的论文。我认为图表在很多情况下都很棒而且非常有用。
图的一大好处是能够为节点之间的边分配优先级。然后当你想找到两个节点之间的路径时,砰的一声,图可以选择具有理想优先级的路径。
在您的情况下,您的值(value)观是节点,您的关系是边缘。
关于c# - 关系的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/386464/