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
Algorithm 获取数字范围交叉点_Algorithm_Math - Fatal编程技术网

Algorithm 获取数字范围交叉点

Algorithm 获取数字范围交叉点,algorithm,math,Algorithm,Math,除了这个问题,我想得到两个时间范围的交点范围。所以我的问题是 获得两个数字范围相交的时间范围的有效数学/算法方法是什么 从第二个范围的每个端点减去第一个范围的每个端点。如果您有: 所有正或负结果:范围不相交 一个非负或负结果:交点是该结果的操作数 两个非负结果:范围是两个计算中的非公共操作数​ 所有结果都是0:有史以来最简并的范围 vectors = ( ((1, 3), (2, 4), '2-3'), ((1, 4), (2, 3), '2-3'), ((1, 2), (3, 4

除了这个问题,我想得到两个时间范围的交点范围。所以我的问题是


获得两个数字范围相交的时间范围的有效数学/算法方法是什么

从第二个范围的每个端点减去第一个范围的每个端点。如果您有:

  • 所有正或负结果:范围不相交
  • 一个非负或负结果:交点是该结果的操作数
  • 两个非负结果:范围是两个计算中的非公共操作数​
  • 所有结果都是0:有史以来最简并的范围

    vectors = (
      ((1, 3), (2, 4), '2-3'),
      ((1, 4), (2, 3), '2-3'),
      ((1, 2), (3, 4), 'Disjoint'),
      ((2, 4), (1, 3), '2-3'),
      ((2, 3), (1, 4), '2-3'),
      ((3, 4), (1, 2), 'Disjoint'),
    )
    
    for a, b, c in vectors:
      print c, a, b
      for x in a:
        for y in b:
          print x, y, x-y
    

从第二个范围的每个端点减去第一个范围的每个端点。如果您有:

  • 所有正或负结果:范围不相交
  • 一个非负或负结果:交点是该结果的操作数
  • 两个非负结果:范围是两个计算中的非公共操作数​
  • 所有结果都是0:有史以来最简并的范围

    vectors = (
      ((1, 3), (2, 4), '2-3'),
      ((1, 4), (2, 3), '2-3'),
      ((1, 2), (3, 4), 'Disjoint'),
      ((2, 4), (1, 3), '2-3'),
      ((2, 3), (1, 4), '2-3'),
      ((3, 4), (1, 2), 'Disjoint'),
    )
    
    for a, b, c in vectors:
      print c, a, b
      for x in a:
        for y in b:
          print x, y, x-y
    
我今天累了……;-)


我今天累了……;-)

这个伪C应该起到以下作用:

R_TYPE Intersection(P_TYPE start1, P_TYPE start2, P_TYPE end1, P_TYPE end2)
{

    if(max(start1, start2) <= min(end1, end2))
    {
        return( min(end1, end2) - max(start1, start2) );
    }

    return(DISJOINT);
}

您可能仍然可以通过直接比较值(假设使用小尾端和8位寻址)来获得,但在减去单个天数、分钟等时,您必须考虑进位和下溢。

此伪C应该可以做到:

R_TYPE Intersection(P_TYPE start1, P_TYPE start2, P_TYPE end1, P_TYPE end2)
{

    if(max(start1, start2) <= min(end1, end2))
    {
        return( min(end1, end2) - max(start1, start2) );
    }

    return(DISJOINT);
}

您可能仍然能够通过直接比较值(假设使用小尾端和8位寻址)获得,但在减去个别天数、分钟等时,您必须考虑进位和下溢。如果有人需要javascript版本,请参见:

function findRangeIntersection(a1, a2, b1, b2) {
    if (Math.max(a1, b1) <= Math.min(b2, a2)) {
        return Math.min(a2, b2) - Math.max(a1, b1);
    }
    return Number.NaN;
}
功能FindRange交叉点(a1、a2、b1、b2){

if(Math.max(a1,b1)如果有人需要javascript版本,请点击此处:

function findRangeIntersection(a1, a2, b1, b2) {
    if (Math.max(a1, b1) <= Math.min(b2, a2)) {
        return Math.min(a2, b2) - Math.max(a1, b1);
    }
    return Number.NaN;
}
功能FindRange交叉点(a1、a2、b1、b2){

if(Math.max(a1,b1)您想要交叉点还是联合?交叉点抱歉(后期编辑)您想要交叉点还是联合?交叉点抱歉(后期编辑)