javascript - 搜索算法

标签 javascript algorithm language-agnostic

我正在寻找一种有效的搜索算法来获取集合中的最长最短重复模式(~2k 个整数),我的集合由这个组成只有重复模式(重复模式之间没有噪音),但模式的最后一次出现可能是不完整的。

例子: 我有:[2,4,1, 2,4,1, 2,4,1, 2,4,1, 2,4,1]
我想收到:[2,4,1]

我有:[21,1,15,22, 21,1,15,22, 21,1,15,22, 21,1,15]
我想收到:[21,1,15,22]

我有:[3,2,3,2,5]
我想收到:[](没有模式)

(为便于阅读而添加的空格)

最佳答案

非常直接的算法如下所示(在 Python 中,但转换为 Javascript 应该没问题):

def check(a, width):
  '''check if there is a repeated pattern of length |width|'''
  for j in range(width, len(a)):
    if a[j] != a[j-width]:
      return False
  return True

def repeated(a):
  '''find the shortest repeated pattern'''
  for width in range(1, len(a)):
    if check(a, width):
      return a[:width]
  return []

这也应该是相当有效的,因为大多数时候 check() 中的循环将在第一次迭代中正确返回,因此您基本上只迭代列表一次。

关于javascript - 搜索算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1516295/

相关文章:

javascript - jquery 和 node.js 使用相同的代码库

javascript - 链接在 JavaScript 下拉菜单中不起作用

javascript - 检索图像的 HTML 元数据而不是下载图像

javascript - 如何确定这个算法的时间和空间复杂度?

algorithm - 无法理解 A* 寻路算法,当两条路径似乎返回相同的 "length"但一条路径会向我发送完全错误的方向

algorithm - 你知道将树结构映射到表表示的有效算法吗

algorithm - NLP 需要什么?

language-agnostic - CodeGolf : Find the Unique Paths

javascript - Angular 创建具有动态属性的模型

java - 在 OOP 中区分 "default"和 "made-up"类的术语