这是我的数据集:
isects = [[3],[2,3],[1,3],[0,1,2],[]]
以下是我数据集中模式的一些可视化:
每个元素都是元素相交的索引列表。因此,元素@ 0仅与元素3相交。而元素@ 3与元素0,1和2相交。
我想创建这些元素之间的交叉列表。我希望列表末尾有更多的交叉点。对于我的样本集,解决方案如下所示:
[[0,3], [1,2], [1,3], [2,3], [1,2,3]]
即0& 3相交,1& 2,1& 3和2& 3.最后,1& 2& 3都相互交叉。
正如下面的评论所指出的那样,1& 2& 3如果它们实际上是多边形,则不会全部交叉,但就我的目的而言,我假设所有列出的元素都可以相互交叉。
仅使用isects
列表获取此数据的最快方法是什么?
答案 0 :(得分:2)
据我所知,isects list没有提供有关交叉情况的完整信息 - 不可能从中了解三重交叉。因此需要几何方法来确定交叉点的确实发生。
编辑如果您对真正的几何交叉点不感兴趣,那么您必须解决图形问题:您有邻接列表,并希望得到......什么?似乎所有可能的K-size cliques with K=2 and more。
Wiki示例:
显示的图表有一个最大团,三角形{1,2,5}和四个 更多的最大派系,对{2,3},{3,4},{4,5}和{4,6}。
Bron-Kerbosch algorithm对于搜索所有派系相对有效(复杂度为O(3 ^(n / 3))。它通常用于查找最大集团,但可以找到所有大小集。
答案 1 :(得分:1)
我会用isect数据创建一个表交叉点。
0 1 2 3 4
0 - x
1 - x x
2 x - x
3 x x x -
4 -
每个' x'代表一个交叉点。交点是集合,因此[0,1]和[1,0]是相同的。因此,我们得到了唯一的交叉列表:[0,3],[1,2],[1,3],[2,3]。
如果你想考虑其他多边形何时与同一个多边形重叠一个共同的交叉点,那么看看被&x; x'包围的' - ' s。在这种情况下,您只有一个(2x2),因此您将[1,2,3]作为重叠交集。 但是,我同意其他人的意见,isect中的数据并不能保证重叠。