以合理快速的方式检查边缘列表中的子集

时间:2014-03-25 11:05:28

标签: c# algorithm

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

我正在尝试删除作为另一条边的子集的任何边,即其中包含一条边的所有点的顺序,在另一条边上(尽管按顺序可以表示向后和向前)。

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

感谢。

编辑:这都是在C#中完成的。我还有一种方法可以将点相互比较以获得相等。

编辑:

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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