首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有收缩公平窗口的迭代数组

具有收缩公平窗口的迭代数组
EN

Stack Overflow用户
提问于 2018-12-25 15:14:54
回答 1查看 77关注 0票数 2

我无法选择正确的标题,但我想要的是解决这个难题:

代码语言:javascript
复制
arr = [187, 220, 245, 265, 278, 321, 346, 360, 391, 407, 443, 492, 533, 557, 613, 652]

谜题:我有一个长度L,我想确保这个数组满足L的这个条件

代码语言:javascript
复制
window = arr[j] - arr[i]
if window <= L

其中,窗口是该数组的两个值之间的任何可能距离,为此,我必须有i (start元素),j(最后一个元素),并公平地滑动它们以涵盖所有可能的组合。而且应该是因为数组是排序的。

举个例子,这是我解决这个问题的尝试:

代码语言:javascript
复制
i = 0, j = -1 # initial values of i and j in python for first and last


i = 0, j = -1 # iteration 0 if(iter % 4 == 0): nothing
i = 1, j = -1 # iteration 1 if(iter % 4 == 1): i+=1
i = 0, j = -2 # iteration 2 if(iter % 4 == 2): i-=1; j-=1
i = 1, j = -2 # iteration 3 if(iter % 4 == 3): i+=1;


i = 2, j = -2 # iteration 4 ;;
i = 1, j = -3 # iteration 5 ;; 
i = 2, j = -3 # iteration 6 ;; 
i = 3, j = -3 # iteration 7 ;;

我在这里没有找到具体的模式,我认为有更好的方法来解决这个问题。我真的觉得有一种流行的算法,但出于某种原因,我完全忘记了。

编辑:来澄清,这些都是非常长的字符串(DNA)中字符串模式的开始索引,我在这里试图找到的是:

长字符串中的一种字符串模式,在长度L的窗口中多次出现 (t)。我忘记提到,每一张幻灯片都会导致模式的频率减少,这意味着arr的长度变成arr - 1,因此我们必须检查len(arr)是否仍然< t,如果是,如果没有找到该窗口并返回true,则返回False。

示例:当L= 500,频率= 16 (len(arr)),t= 14 (已经设置)时,,freq>t?是的,那么我们看到arr-1 - arr = 465,也就是< 500.是真的!

当L= 400,频率= 16,t= 14,arR-1-arr= 465,即> 400。假的!

我们再次尝试使用arr -2-arr= 426,仍然是freq=16>t=14。

我们再次尝试使用arr-1 - arr1 = 448,仍然是freq=16>t=14。

我们再试一次arr-2 - arr1 = 393,对吗?不,freq=14 == t=14

我们返回假的

EN

回答 1

Stack Overflow用户

发布于 2018-12-25 15:31:40

通过使用zip,您可以实现小于L(=50)长度的两点之间的距离的组合。

代码语言:javascript
复制
In [11]: [(x,y) for x, y in zip (arr, arr[1:]) if x - y <= 50 ]
Out[11]:
[(187, 204),
 (204, 245),
 (245, 265),
 (265, 278),
 (278, 321),
 (321, 346),
 (346, 360),
 (360, 391),
 (391, 407),
 (407, 443),
 (443, 492),
 (492, 533),
 (533, 557),
 (557, 613),
 (613, 652)]

In [12]:
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53923546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档