Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 重叠间隔和重叠量_Php_Algorithm_Intervals_Overlap - Fatal编程技术网

Php 重叠间隔和重叠量

Php 重叠间隔和重叠量,php,algorithm,intervals,overlap,Php,Algorithm,Intervals,Overlap,这个问题可能与其他问题类似,但有点不同。假设我们有一组这样的间隔,假设a-9是数字,但为了格式化,我使用了字母): ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 所以我们有一个从I到Z的主区间,一个从M到S的区间a,依此类推 现在我想让我的区间在主区间(基本上是基本约束)内重叠最多,即M-O(a和d)和Q-S(a和b)以及U-Z(b和c),每个区间有2个重叠(超出Z的所有内容都是不可能的,因为它在主区间之外) 我基本上想要一个间隔列表(也称为数组)和Main中的重

这个问题可能与其他问题类似,但有点不同。假设我们有一组这样的间隔,假设a-9是数字,但为了格式化,我使用了字母):


ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
所以我们有一个从
I
Z
的主区间,一个从
M
S
的区间
a
,依此类推

现在我想让我的区间在主区间(基本上是基本约束)内重叠最多,即M-O(a和d)和Q-S(a和b)以及U-Z(b和c),每个区间有2个重叠(超出Z的所有内容都是不可能的,因为它在主区间之外)

我基本上想要一个间隔列表(也称为数组)和Main中的重叠数,而不是在PHP中将Main计算到该数中(不需要排序,因为有足够的方法可以做到这一点)

我想画一张间隔的图片,然后计算每一像素列的颜色,但那是不可能的

  • 避免问题
  • 低效
  • 可能很慢
  • TLDR,我需要一个解决方案

    • 在PHP中工作
    • 速度相对较快
    • 是可靠的
    • 提供重叠间隔及其重叠计数
    • 具有用作基础约束的主间隔,该间隔不计入重叠
    我知道这是一个非常具体的问题,但我不太精通数学和算法。

    • 构建2个向量。一个包含每个区间的起点,另一个包含每个区间的终点

    • 对2个向量进行排序

    • 当你有两个向量中的任何一个时:

      • 在2个选项之间选择最小值
      • 如果从具有起点的向量中拾取,则将重叠间隔数增加1,否则将其减少1
      • 如果您的点也是主间隔的起点,请设置一个标志,表明您的结果现在有效
      • 如果你的点是主间隔的终点,你可以停下来
      • 如果设置了该标志,则可以将当前重叠间隔数与到目前为止的最大值进行比较,并进行相应更新
    您可以从最大值减少1以忽略主间隔。您可以保留一个包含最大计数的节的列表(只需确保在获得更好的结果时清除它)


    这是O(NlogN)和你拥有的间隔数。

    这的基本算法是用一个计数器遍历整个长度,当你遇到起点时计数器增加,当你遇到终点时计数器减少

    跟踪此计数器达到的最大值

    再次检查整个长度,这一次在以下情况下将位置添加到
    结果
    数组中:
    1.您位于主要部件边界内。

    2.您的计数器(保持相同的方式)等于您之前计算的最大值。

    这听起来很复杂……向量的确切含义是什么(关于PHP,我没有发现太多)我应该做一个vactor图形还是什么?也可以按什么排序?按它们的简单起点/终点排序,所以我有一个JMQU和OS15的起点和终点排序,或者按起点排序,并设置与之相关的终点?向量/数组/列表任何你想要的可以在PHP数组中容纳多个内容的东西都可以A是起点,另一个是终点。我假设每个起点都有类似的数字(日期或索引也可以,只要你能排序就行)。你应该独立地对它们进行排序,这样算法才能工作。好吧,现在我明白了,我认为可能是这样的,但因为我不确定我是否真的想问。因此,最后我得到了两个数组,如我上面的评论所示(加上main的要点)这不仅仅是最大值,但对于较低的值,我必须一遍又一遍地重复这一点,但听起来有点技术性legit@My1-在每一点上,您都有计数器的值,并且可以决定如何使用它。您需要做什么?我希望在一个数组中有重叠以及或多或少的所有重叠的重叠计数(我可以稍后按计数排序)@halfer谢谢你的更正,但我有一个问题要问-5(没有一个下层选民说了什么)最后,我不清楚我问了什么,尽管我试着遵循大多数事情,包括TLDR,但问题并不是完全重复的,因为没有javascript要求和其他一些小东西,这使得它相对独特。我同意,没有评论的否决票没有多大帮助,但投票评论仍然不属于帖子如果你想添加元评论,你可以在评论中添加元评论(我不知道这是否会对投票产生很大影响)。
                <-a---> <------c--->
            <------------MAIN>
    ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
             <--d-> <--b------->