统计两组序列的交点(线)

Counting the intersection points (lines) of two sets of sequences

我必须找到一种算法,可以找到两组数组之间的交集总数,而其中一个数组是排序的。

举个例子,我们有这两个数组,我们向相应的数字画直线。

这两个数组给了我们总共7个交点

有什么样的算法可以帮助我解决这个问题?

我使用了搜索按钮,但没有找到任何可以解决我这个问题的东西。

谢谢

您可以将每一行表示为 y=a+bx,然后通过比较它们的 y 值来将每一行与其他行进行比较。

每条线最多有一个交点。

给定两个数字 M 和 N,直线 不会 如果

相交
  • 上面M在上面N的右边,下面M在下面N的右边
  • 顶部M在顶部N的左边,底部M在底部N的左边

其他两种情况:

  • 左上,右下
  • 右上,左下

直线相交。

在示例中,8 在顶行所有 4 个数字的左侧,在底部 3 个数字的右侧,因此 8 与三个数字相交。

5 在上 8 的右边,在下 8 的左边,给出一个交点。 5 在顶部的 4 和 1 的左侧,在底部的 4 和 1 的右侧,再给出两个。所以 5 与三个数字相交。

注意我们把5和8的交集数了两次。事实上,每个路口都会被计算两次。如果完成该示例,您将计算出 14 个交叉点。最后除以2得到答案。