c# - 检查边缘列表中子集的合理快速方法

标签 c# algorithm

我有一个边列表,这些边由一个包含坐标的点数组组成。

我试图删除作为另一条边的子集的任何边,即其中一条边的所有点按顺序包含在另一条边中(尽管顺序可能意味着向后和向前)。

我正在努力想出一个不需要四个嵌套 for 循环的解决方案(通过边缘循环,再次通过边缘循环,通过第一个点循环,通过第二个点循环,比较)。有没有更快的处理方法?或者至少不会那么糟糕。

谢谢。

编辑:这一切都是在 C# 中完成的。我也已经有了一种比较点是否相等的方法。

编辑:

如果这是一条线(假装数字是坐标)。

1-----2-----3-----4-----5-----6

这是由一些相同的点组成的另一条线:

3------4------5

第二个是第一个的子行,所以我想从列表中删除第二个。

最佳答案

构建从每对点(即线段)到边和索引对的集合的映射,其中边在该索引处具有该线段。然后,遍历映射条目,遍历集合的第一条边,遍历集合的第二条边,并从给定的索引开始向外比较它们。

关于c# - 检查边缘列表中子集的合理快速方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22632659/

相关文章:

algorithm - 二维数组相似度

c# - 编译器歧义调用错误-具有Func <>或Action的匿名方法和方法组

c# - .NET Core (C#) 中的 AES-256-CBC

string - 当目标是找到特定字符串的所有出现时,KMP 的最坏情况复杂度是多少?

java - Java 中的 Davies-Bouldin 指数

c - 我对多重性问题的 C 解决方案太慢了,需要建议

c# - 防止后续服务调用的协商握手

C# 后增量

c# - 将 Python re.sub 转换为 C#

mongodb - 多边形重叠百分比