【问题标题】:Building a linked list in c#在c#中建立一个链表
【发布时间】:2015-04-17 16:08:36
【问题描述】:

我目前正在编写一个算法来在 c# 中构建一个对象链。对象的顺序很重要,因为它们以特定顺序表示一系列事件。对象 A 执行一个动作并包含对执行和动作的对象 B 的引用,依此类推。我遇到的问题是对象的初始状态是无序的。我有包含每个对象和系列中下一个对象名称的字典。我正在努力设计一种快速算法来“排序”它们。我最初的假设是遍历字典并为每个值查找与其匹配的键并将这两个对象添加到另一个列表中。有几个问题: 1. 确定链中的第一个对象。 2. 使用嵌套循环非常复杂。 3. 决定使用哪些 c# 对象来容纳对象链。

我希望有人有使用排序算法的经验来完成此任务或做过类似的事情。感谢所有 cmets 和帮助,谢谢。

【问题讨论】:

  • 你能贴出代码吗?我无法想象/想象您所描述的方法。
  • 使用 Dictionary 键作为排序所需的值 [我认为这是一个独一无二的属性]。对密钥集进行排序并将其放入列表中。然后使用 LinkedList 从 Dictionary 中添加对象
  • 我没有任何值得分享的代码,因为我自己正在努力概念化这个问题。在高层次上,我有一个我们每天在链中运行的 sql 作业的列表。列表中包含所有工作及其启动的工作。我正在尝试构建一个网页以直观地查看此工作链。我的第一个问题是在 C# 中构建上述工作链。我希望就如何实现这一点得到一些建议。
  • 你怎么知道一份工作的开始是什么?手动分析,或者你有一些动态读取的代码,如果有,贴出来。
  • 我正在查询我们的 sql 服务器以获取所有作业(sysjobs、sysjobsteps)并构建所有作业的列表以及启动另一个作业的步骤。复杂的一点是,可以从列表中构建多个作业链。存在单个作业以及多个、多个作业链。

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


【解决方案1】:

您对帖子的最后评论很重要——事实上存在多个工作链。这不是排序练习;这是一个图表构建练习。

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

通过迭代 Successors 哈希来构建 Predecessors 哈希。对于每个带有后继 B 的后继键 A,插入一个显示前驱 A 的前驱键 B。O(n)。

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

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

【讨论】:

    猜你喜欢
    • 2016-07-18
    • 1970-01-01
    • 2016-02-08
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-24
    • 2018-07-23
    相关资源
    最近更新 更多