c# - 关系的数据结构

标签 c# algorithm data-structures

我正在将 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/

相关文章:

c - 在堆栈中间查找元素

python - 如何安装 pythonds 模块?

C# CLR 程序集查询

c# - 有没有办法判断窗口的大小是由用户还是以编程方式调整的?

c# - 以 block 的形式枚举 DataTable

c++ - 以下代码的时间复杂度..?

c - 停止退格形式删除某些输出

java - 数组的所有可能组合

c# - ReSharper 的测试运行程序是否可以配置为不显示 Debug.WriteLine() 消息?

python - 使用 lxml 将 xml 转换为 Python 数据结构