【问题标题】:Counting the intersection points (lines) of two sets of sequences计算两组序列的交点(线)
【发布时间】:2016-12-11 08:20:42
【问题描述】:

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

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

这两个数组总共为我们提供了 7 个交点

有哪些算法可以帮助我解决这个问题?

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

谢谢

【问题讨论】:

  • 您是在尝试以最高效率为具有数百万条目的数组执行此操作,还是数组很小,例如最多 100 个条目?
  • 数组很小,但元素的数量应该不重要,即我不在乎效率。

标签: algorithm intersection line-intersection


【解决方案1】:

给定两个数字 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得到答案。

【讨论】:

    【解决方案2】:

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

    每条线与其他线最多有一个交点。

    【讨论】:

    • 介意详细说明吗?是的,每条线与每条线最多有一个交点。在这种情况下,a+bx 是什么?索引对应数字处A的值?
    • @Jozo 直线由函数y=a+bx 定义,您可以在此处阅读更多信息:en.wikipedia.org/wiki/Line_(geometry)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多