计算相交和弦对的数量

时间:2012-07-18 14:59:53

标签: c++ algorithm tree red-black-tree

考虑圆圈中的N个和弦,每个和弦由其端点决定。描述一个O(nlogn)解决方案,用于确定在圆内相交的和弦对的数量。

假设:没有两个和弦共享一个终点。

2 个答案:

答案 0 :(得分:1)


存在一种通用的线段交叉算法,它在O(nlogn)中完成工作 这可以在你的情况下使用,因为两个和弦不能在圆的外部相交 以下链接包含算法:
http://www.cs.princeton.edu/~chazelle/pubs/IntersectLineSegments.pdf

P.S。
 它需要基本计算几何(线扫描,范围树)的知识。

希望这有帮助。

答案 1 :(得分:-1)

离开我的头顶,按极角(这是O(n log n)部分)对和弦端点进行排序。然后读取排序列表(即O(n)) - 如果两个相邻的端点属于同一个和弦,则它没有交叉点。如果列表中的两个相邻条目属于不同的和弦,则可能存在交叉,这取决于这两个和弦的其他端点所在的位置 - 例如,如果和弦A按其排序顺序具有端点A1和A2,并且类似地和弦B具有B1和B2,则在列表中找到B2-A1不是交叉,因为B1较早而A2较晚。但是,B1-A2将是一个交叉点。

另见biziclop对另一个更精心构建的解决方案的评论。