Sorting 查找两个数组之间的交叉,一个已排序,一个未排序
假设我把数字1到n写在整页上。下面是我写的数字范围1。。。n在页面上以随机顺序排列。对于每个i,在顶行i和底行第i个最小数字之间画一条直线 让我们用C(s)表示随机序列的交叉数(底部数字的排列) 其中C(s)=3的示例: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是最大值(底部按从最大到最小的顺序排
第二部分是我正在努力的地方,因为我们正在寻找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)。在您的图像中,您正在计算交叉线的数量,而不是交叉线的数量。交叉口的数量不是由下面的数字顺序决定的——它还取决于数字的精确水平定位。你确定你没有误解任务吗?对不起!固定的措辞应该更清楚了。