Algorithm 计算两组序列的交点(线)

Algorithm 计算两组序列的交点(线),algorithm,intersection,line-intersection,Algorithm,Intersection,Line Intersection,我必须找到一个算法,可以找到两组数组之间的交集总量,而其中一个数组是排序的 举个例子,我们有这两个数组,我们画直线指向对应的数字。 这两个数组总共提供了7个交集 有什么样的算法可以帮助我解决这个问题 我已经使用了搜索按钮,但没有找到任何可以为我解决此问题的方法 谢谢您可以将每一行表示为y=a+bx,然后通过比较它们的y值将每一行与其他行进行比较 每条线与另一条线之间最多有一个交点。给定两个数字M和N,如果 顶部M位于顶部N的右侧,底部M位于底部N的右侧 顶部M位于顶部N的左侧,底部M位于底部

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

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

这两个数组总共提供了7个交集

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

我已经使用了搜索按钮,但没有找到任何可以为我解决此问题的方法


谢谢

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


每条线与另一条线之间最多有一个交点。

给定两个数字M和N,如果

  • 顶部M位于顶部N的右侧,底部M位于底部N的右侧
  • 顶部M位于顶部N的左侧,底部M位于底部N的左侧
在其他两种情况下:

  • 左上,右下
  • 右上,左下
两条线相交

在本例中,8位于顶行所有4个数字的左侧,而位于底行3个数字的右侧,因此8与3个数字相交

5位于顶部8的右侧,底部8的左侧,形成一个交点。5在顶部为4和1的左边,在底部为4和1的右边,再加上两个。所以5与三个数相交


注意,我们计算了5和8的交点两次。事实上,每个十字路口都会被计数两次。如果你完成了这个例子,你会数到14个交叉点。最后除以2得到答案。

介意详细说明吗?的确,每条线与每条线最多有一个交点。在这种情况下,a+bx是什么?索引对应数字处A的值?@Jozo A直线由函数
y=A+bx
定义。您可以在此处阅读更多信息:您是在尝试以最大效率为具有数百万条目的数组执行此操作,还是数组很小,例如最大100条目的数组?数组很小,但元素的数量应该无关紧要,即,我不在乎效率。