Algorithm 检测重复元素的序列
我有一个随机数数组,比如: [10,11,12,14,15,16,17,18,19,20,11,12,14,25,25,26,27,28,29] 我必须检测重复序列(实际上是错误) 长度大于特定数字(2) 有什么好的算法吗 我现在所拥有的:Algorithm 检测重复元素的序列,algorithm,sequence,repeat,Algorithm,Sequence,Repeat,我有一个随机数数组,比如: [10,11,12,14,15,16,17,18,19,20,11,12,14,25,25,26,27,28,29] 我必须检测重复序列(实际上是错误) 长度大于特定数字(2) 有什么好的算法吗 我现在所拥有的: int minLenght = 3; int[] data = {1,2,3}; for(int i = 0; i < data.length; i++){ for(int j = 0; j < data.length; j++){
int minLenght = 3;
int[] data = {1,2,3};
for(int i = 0; i < data.length; i++){
for(int j = 0; j < data.length; j++){
if ( data[i] == data[j]){
int l = 0;
int ii = i;
int jj = j;
while(data[ii] == data[jj]){
ii++;
jj++;
l++;
}
if(l >= minLenght){
print('['+i+'-'+ii+'] same as ['+j+'-'+jj+']');
}
}
}
}
int minLenght=3;
int[]数据={1,2,3};
对于(int i=0;i=最小长度){
打印(“['+i+'-'+ii+']与['+j+'-'+jj+']相同);
}
}
}
}
一种方法是在哈希表中存储长度为L(比您的特定长度大一个)的序列
如果您曾经发现一个序列已经在哈希表中,那么您已经发现一个长度>=L的重复
e、 g.Python代码
A=[10,11,12,14,15,16,17,18,19,20,11,12,14,25,25,26,27,28,29]
S=set()
L=2+1
for i in xrange(len(A)-L+1):
key=tuple(A[i:i+L])
if key in S:
print i
else:
S.add(key)
这会打印出长度大于2的重复序列的位置。我不知道是否有专门的算法,但我的建议是:
loop1 over array[i]:
loop2 over array[j] starting with i+1:
dist=array[j]-array[i];
if dist==specific_number:
array_result.append(array[i] +""+""+array[j])
这将是我的简单逻辑,如果错误,请不要否决:(您可以使用regexps,但显示的列表格式是不规则的。我使用下面的Python并“正则化”列表格式,在应用正则表达式查找重复的数字/非数字序列之前将其转换为字符串:
>>> import re
>>> numbers = [10,11,12,14,15,16,17,18,19,20, 11, 12, 14,25,25,26,27,28,29]
>>> sep = ', '
>>> txt = sep + sep.join(str(x) for x in numbers) + sep
>>> txt
', 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 11, 12, 14, 25, 25, 26, 27, 28, 29, '
>>> re.search(r'\D((?:\d+\D+){2,}).*\1', txt).groups()
('11, 12, 14, ',)
我通常会尽量减少使用regexp,但这会检测到重复。内存使用和执行时间的限制是什么?序列的预期长度是多少?没有内存限制,集合通常是20-200个项目,重复的序列很少(错误)。检查的长度是5(但可能会更改)。感谢您的想法(我开始喜欢python)。但是我应该“最小长度”,并且没有对第一个序列的引用。你可以稍微修改这个方法来获得第一个序列的索引。将
S=set()
更改为S=dict()
;将S.add(key)
更改为S[key]=I
;将print I
更改为print S[key]
。