【问题标题】:list of numbers - how do I find repeating patterns?数字列表 - 我如何找到重复的模式?
【发布时间】:2012-02-24 06:18:23
【问题描述】:

我有一个数字列表。大量噪音中存在重复模式。

样本数据:

(1,2,50,10,100,25,12,30,20,1,20,10,100,25,12,50,30,2,10,100,25,12,50,30,30,40,20,40,1,2,50,20,50,30,30,10,100,25,12,10,100,25,12)

在本例中,所需的模式是10,100,25,12,但每次都会不同。

我如何找到任何重复模式?

【问题讨论】:

  • 如果您对重复的定义是至少出现两次,然后选择列表中至少出现两次的任何数字,这就是您的重复模式。我想说的是,你需要更多的限制。

标签: python pattern-matching


【解决方案1】:

后缀树是查找字符串中重复子串的最有效解决方案。

以下是 Python 实现的一个示例:https://hkn.eecs.berkeley.edu/~dyoo/python/suffix_trees/

如果您不想打扰这样一个复杂的解决方案,您可以简单地遍历字符串,一次一个元素,如果每个元素不是“10”“100”“25”或“ 12"。最终,您将到达由“10”“100”“25”和“12”序列组成的第一个元素。

如果您的问题需要任何一般模式,您很可能希望使用后缀树,否则您正在查看大量时间复杂度。

【讨论】:

  • 谢谢。这将是一个通用模式,而不仅仅是 10,100,25,12 - 每次都不同。如何以这种方式使用后缀树?
  • 您必须编辑类(节点/边缘类,无论它们用于实现树)。这是后缀树的出色可视化(顺便说一句,这是互联网上唯一的可视化)。您可以使用它来了解它的工作原理以及您需要编辑的内容。 suffixtree.codeplex.com 下载 'SuffixTreeGarden' ZIP。打开项目 SuffixTreeView,编译并运行项目。您可能需要下载适当的 F# 运行时 - 但它是一个漂亮的可视化/动画,非常值得。顺便说一句,后缀树实现起来并不容易。祝你好运!
  • 如果不能编译请告诉我,我可以直接链接你我编译的可执行文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-07
  • 2015-08-31
  • 1970-01-01
  • 1970-01-01
  • 2017-11-29
相关资源
最近更新 更多