Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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
Sorting 查找两个数组之间的交叉,一个已排序,一个未排序_Sorting_Big O - Fatal编程技术网

Sorting 查找两个数组之间的交叉,一个已排序,一个未排序

Sorting 查找两个数组之间的交叉,一个已排序,一个未排序,sorting,big-o,Sorting,Big O,假设我把数字1到n写在整页上。下面是我写的数字范围1。。。n在页面上以随机顺序排列。对于每个i,在顶行i和底行第i个最小数字之间画一条直线 让我们用C(s)表示随机序列的交叉数(底部数字的排列) 其中C(s)=3的示例: C(s)的最小值和最大值是多少?解释你的答案 当给定随机序列时,创建一个O(nlgn)算法来计算C(s)。证明您的答案的运行时间和正确性 我的答案 第一部分很简单,0是最小值(没有底部的交叉点按从最小到最大的顺序排列),n(n-1)/2是最大值(底部按从最大到最小的顺序排

假设我把数字1到n写在整页上。下面是我写的数字范围1。。。n在页面上以随机顺序排列。对于每个i,在顶行i和底行第i个最小数字之间画一条直线

让我们用C(s)表示随机序列的交叉数(底部数字的排列)

其中C(s)=3的示例:

  • C(s)的最小值和最大值是多少?解释你的答案

  • 当给定随机序列时,创建一个O(nlgn)算法来计算C(s)。证明您的答案的运行时间和正确性

  • 我的答案

    第一部分很简单,0是最小值(没有底部的交叉点按从最小到最大的顺序排列),n(n-1)/2是最大值(底部按从最大到最小的顺序排列)


    第二部分是我正在努力的地方,因为我们正在寻找nlgn,这似乎将是一个分而治之的算法。然而,我真的很困惑于如何解决这个问题。

    基本思想如下所示:

    ALGORITHM(Start, End)
       Mid = (Start+End)/2
       If Start <= End-1 : //if number Start and number End are consecutive
          Return (Number of line crossings between Start and End)
       Else
          Find number of line crossings between number Mid and Mid+1 and store in N
       Return( N + ALGORITHM(Start, Mid) + ALGORITHM(Mid+1, End)) //recursive call
    
    算法(开始、结束)
    中间=(开始+结束)/2
    
    如果Start的基本思想如下所示:

    ALGORITHM(Start, End)
       Mid = (Start+End)/2
       If Start <= End-1 : //if number Start and number End are consecutive
          Return (Number of line crossings between Start and End)
       Else
          Find number of line crossings between number Mid and Mid+1 and store in N
       Return( N + ALGORITHM(Start, Mid) + ALGORITHM(Mid+1, End)) //recursive call
    
    算法(开始、结束)
    中间=(开始+结束)/2
    
    如果Start与编程语言无关,那么我就删除了“java”标记。请仅使用与问题相关的标签。您称之为“交叉线数”是多少?是过境点的数量吗?还是行数?问题还不清楚。假设
    n=3
    ,则图像与规格不匹配。您使用的是术语“随机序列”,但这并不是指以前规范中的任何内容。请定义“交叉线的数量”。不清楚为什么只有n条线时交叉线的数量可以是O(n^2)。在您的图像中,您正在计算交叉线的数量,而不是交叉线的数量。交叉口的数量不是由下面的数字顺序决定的——它还取决于数字的精确水平定位。你确定你没有误解任务吗?对不起!修正了措辞现在应该更清晰了。这与编程语言没有任何关系,因此我删除了“java”标记。请仅使用与问题相关的标签。您称之为“交叉线数”是多少?是过境点的数量吗?还是行数?问题还不清楚。假设
    n=3
    ,则图像与规格不匹配。您使用的是术语“随机序列”,但这并不是指以前规范中的任何内容。请定义“交叉线的数量”。不清楚为什么只有n条线时交叉线的数量可以是O(n^2)。在您的图像中,您正在计算交叉线的数量,而不是交叉线的数量。交叉口的数量不是由下面的数字顺序决定的——它还取决于数字的精确水平定位。你确定你没有误解任务吗?对不起!固定的措辞应该更清楚了。