Tag: adjacency list

计算List 中相似的相邻项

我正在尝试在List中找到类似的相邻项目并计算其编号,例如: List list = new List {“a”, “a”, “b”, “d”, “c”, “c”}; 期望的输出: a = 2,c = 2 我所做的是使用for循环遍历列表的每个元素并查看它是否具有相似的相邻元素,但可以理解的是它给出了ArgumentOutOfRangeException()因为我不知道如何跟踪迭代器的位置所以它不会超出范围。 这就是我所做的: for (int j = 0; j < list.Count; j++) { if (list[j] == "b") { if ((list[j + 1] == "b") && (list[j – 1] == "b")) { adjacent_found = true; } } } 话虽如此,如果除了使用for循环迭代之外,还有另一种更简单的方法可以在List中找到相似的相邻元素,请提供建议。 […]

图邻接列表实现

我试图用C#表示Adjacency List的图形,如下面的代码。 但我想知道在哪里可以找到更好的C#实现。 喜欢这个Java网站: http : //algs4.cs.princeton.edu/41undirected/Graph.java.html 为了改进这个实现,我有一些问题: 是否有另一种简单的数据结构可供使用,并且您能够更轻松地进行DFS , BFS , Find the Shortest-path操作? 或者根据要解决的问题,数据结构变化太大了? ===已编辑=== 我试图将数据结构实现如下。 OBS :这种方法看起来很简单,但后来我意识到这不太适合DFS,例如,因为你需要一直跟踪LinkedList的第一个元素。在我的解决方案中似乎最好使用一个自定义创建的链接列表,而不是LinkedList 。 考虑到下面的评论并保持简洁,我做了一些改变。 但我不知道这些变化是否会影响进一步的运营,比如BFS 。 为了能够拥有直接和间接的图形,我认为使用接口比使用属性更好。 public interface IGraph { void InsertEdge(int edgeAKey, int edgeBKey); void IsertNewVertex(int vertexKey); LinkedList FindByKey(int vertexKey); bool ExistKey(int vertexKey); } 为了使它尽可能简单,我们可以使用已经实现的数据结构,如Dictionary和LinkedList 。 而不是使用object作为Dictionary key ,为了简化我们可以在Vertex创建一个key (或label )和一个value ,如果你想添加一个已存在于另一个Vertex 。 public class […]

如何在C#中生成马尔可夫链

我想用C#创建这个马尔可夫链。 我需要知道除了邻接列表之外是否还有其他结构可以在这种情况下更好地工作。 另外,我如何使用现有的.Net集合类型来实现它。

如何在分层结构中显示非规范化数据?

我的问题是我想在层次结构中显示数据,如下所示: 民主党人 县委书记 候选人1 候选人2 法官 候选人1 候选人2 候选人3 但我正在检索这样的数据集: Party | Office | Candidate ——————————————– Democrat | County Clerk | Candidate 1 Democrat | County Clerk | Candidate 2 Democrat | Magistrate | Candidate 1 Democrat | Magistrate | Candidate 2 Democrat | Magistrate | Candidate 3 我计划使用嵌套的中继器,但我需要一个不同的Party值,然后在该方中使用不同的办公室名称值来执行此操作。 是否有任何.NETfunction可以轻松完成我正在尝试的内容? 除了中继器之外,还有更好的方式来显示信息吗? 提前致谢!

从邻接列表创建树的最有效方法

我有一个对象的邻接列表(从SQL数据库加载的行,带有密钥和它的父键),我需要用它来构建无序树。 它保证没有周期。 这花费的时间太长了(在大约5分钟内仅处理了870K节点中的〜3K)。 在我的工作站Core 2 Duo上运行,有足够的RAM。 关于如何加快速度的任何想法? public class StampHierarchy { private StampNode _root; private SortedList _keyNodeIndex; // takes a list of nodes and builds a tree // starting at _root private void BuildHierarchy(List nodes) { Stack processor = new Stack(); _keyNodeIndex = new SortedList(nodes.Count); // find the root _root = nodes.Find(n => n.Parent == […]