在c#中构建链接列表

时间:2015-02-17 01:51:20

标签: c# .net algorithm iteration complexity-theory

我目前正在编写一个算法来构建c#中的对象链。对象的排序很重要,因为它们表示特定顺序的事件序列。对象A执行操作并包含对对象B的引用,对象B执行和操作等。我遇到的问题是对象的初始状态是无序的。我有包含每个对象的字典和系列中下一个对象的名称。我正在努力的是设计一个快速算法来排序"他们。我最初的假设是迭代字典,并为每个值,寻找匹配它的键,并将这两个对象添加到另一个列表。有一些问题: 1.确定链中的第一个对象。 2.使用嵌套循环的复杂性非常高。 3.确定用于容纳对象链的c#对象。

我希望有人有排序算法的经验来完成这个或做了类似的事情。感谢所有评论和帮助。

1 个答案:

答案 0 :(得分:1)

您对帖子的最后评论很重要 - 有多个工作链的事实。这不是一个分类练习;这是一个图形构建练习。

您已经有一个包含每个对象及其后继者的哈希值。我假设一个对象可以有多个后继者,同样可以有多个前辈(只是为了足够一般)。为每个对象及其前身构建另一个哈希,从这两个对象中,您可以轻松地显示您想要的任何图表或关系树。

通过迭代Successors哈希来构建Predecessors哈希。对于具有后继者B的每个后继者密钥A,插入前导者密钥B,显示前任A. O(n)。

使用这两个哈希值,您可以编写函数来递归地构造任何给定对象的完整父树(前任)或子(后继)树。

编辑:请注意,如果您想知道哪些作业是原创的(没有前任)或终端(没有后继者),为了构建完整的显示,您必须分别跟踪这些作业,比如说,两个名为Originals和Terminals的数组。您可以在迭代原始的Successors哈希时构建终端,以便构建前置任务,并通过前置任务最后一次传递构建原始,找到没有前任的条目。但是,如果您只是希望能够满足关于单个对象的特定查询,则后继者和前任者应该这样做。