Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.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
Arrays 在第二个数组中的任何事件发生后w分钟内,一个数组中的事件数_Arrays_Algorithm_Time Complexity - Fatal编程技术网

Arrays 在第二个数组中的任何事件发生后w分钟内,一个数组中的事件数

Arrays 在第二个数组中的任何事件发生后w分钟内,一个数组中的事件数,arrays,algorithm,time-complexity,Arrays,Algorithm,Time Complexity,我有两个排序的unix时间戳数组(因此整数表示某些事件发生的时间)。让我们调用数组ts1和ts2。我想找出ts1中在ts2中任何事件的w分钟后发生的事件数。假设方法签名是(获取第一个和第二个数组以及窗口大小,然后返回ts1中在ts2中任何事件发生后w分钟内的事件数): 以下是一些测试用例: ## Test cases. ev = critical_events([.5,1.5,2.5],[1,2,3],.5) print(ev==0) ev = critical_events([1.4,1.4

我有两个排序的unix时间戳数组(因此整数表示某些事件发生的时间)。让我们调用数组ts1和ts2。我想找出ts1中在ts2中任何事件的w分钟后发生的事件数。假设方法签名是(获取第一个和第二个数组以及窗口大小,然后返回ts1中在ts2中任何事件发生后w分钟内的事件数):

以下是一些测试用例:

## Test cases.
ev = critical_events([.5,1.5,2.5],[1,2,3],.5)
print(ev==0)

ev = critical_events([1.4,1.4,2.7],[1,2,3],.5)
print(ev==2)

ev = critical_events([1.4,2.4,3.4],[1,2,3],.5)
print(ev==3)
我希望第一个数组的长度n远大于第二个数组的长度m。在时间和空间方面寻找有效的算法,如果可能的话,在n和m、时间和空间方面寻找它们的平均和最坏情况复杂性



我的尝试:我不会解释我的尝试,我只会链接到代码,代码应该是自解释的(或者至少比我用文字所能做的更好):

您将它们按排序显示,所以我的假设是它们是(需要这样才能工作)。 因为第一个数组比第二个数组大得多,所以需要在for循环中使用第二个数组

我正在使用示例测试用例2:ev=关键事件([1.4,1.4,2.7],[1,2,3],.5) 接下来,您可以对ts2+区间(1+0.5)=1.5的第一个元素使用二进制搜索

您的startIndex为0,endIndex为2。所以,在第一次比较中,取所有元素

进行二进制搜索将在ts1中生成索引2。注意:因为数组中的元素相等,所以需要向右移动,直到得到更大的数字。现在可以看出2.7(以及后面的所有元素,如果有的话)是1.5之后的元素。计数为ts2.lenght-foundindex

现在可以将开始索引设置为2。因为你知道,这个索引左边的所有内容都较小,并且在1.5秒后不会出现。 取element2并进行二进制搜索,您将再次找到索引2(2.5<2.7):

Count=Count+ts2.lenght-foundindex


据我所知,这是最快的方法。我相信速度是Log(n.m.

谢谢!这似乎与此处的关键事件非常相似:。运行时复杂度可能比m log(n)好,因为随着for循环在m上的进行,我们会依次搜索较小的n。
## Test cases.
ev = critical_events([.5,1.5,2.5],[1,2,3],.5)
print(ev==0)

ev = critical_events([1.4,1.4,2.7],[1,2,3],.5)
print(ev==2)

ev = critical_events([1.4,2.4,3.4],[1,2,3],.5)
print(ev==3)