【问题标题】:Algorithm to find repeating pattern in data在数据中查找重复模式的算法
【发布时间】:2015-12-05 13:56:52
【问题描述】:

我正在解析大量 CAN 数据是十六进制格式,它以串行数据类型格式生成并连续流式传输。我正在寻找非常具体的重复模式,这些模式很容易用眼球法快速找到,但我的任务是自动化这个过程。使用 c++ 工作,但实际上这是一个与语言无关的问题,更多地涉及完成此任务的逻辑/算法。

特定模式是一个递增值,有 8 个“步”,然后重复 例子:

1. F0 01 A2 23 74 B5 06 07 E0 11 72 C3 D4 95 36 07 ...
2. 00 02 04 06 08 0A 0C 0E 00 02 04 06 08 0A 0C 0E ...
3. 01 02 03 04 05 06 07 08 00 01 02 03 04 05 06 07 08 00 ...
4. 00 20 40 60 80 A0 C0 E0 00 20 40 60 80 A0 C0 E0 ...


Example 1 -> low nibble,  pattern = 0123456701234567
Example 2 -> low nibble,  pattern = 02468ACE02468ACE
Example 3 -> low nibble,  pattern = 123456780123456780
Example 4 -> high nibble, pattern = 02468ACE02468ACE

请注意,示例 3 实际上计数为 9,但在本例中,实际计数为 12345678,而 0 是“垃圾”(但始终为 0)

未使用的半字节是 100% 随机的,如示例 1 所示。但其他示例我只是将 0 放在那里以便更容易可视化。

稍微混淆一下,这些模式中的任何一个都可能被“拉伸” - 换句话说,每个特定值在递增到下一个值之前可能会重复 X 次

示例: 00 00 00 01 01 02 02 02 03 03 03 04 04 04 04 05 05 06 06 07 07 07

永远不会有乱序的字节——所以上面的整个模式都是按顺序排列的

另外 - 我们想抛弃“短”模式

8 计数场景的错误示例:

00 01 02 03 04 05 00 01 02 03 04 05 00 01

这个不好的例子正确地遵循了所有规则,但它不是必需的 8 个计数。

我们一次可以访问/处理 5 个字节,并且每隔几毫秒就会有新值出现。有几百个字节要处理。使用 Excel 很简单,只需查看数据,努力想出在代码中执行此操作的策略/算法。

可视化如何接收数据的最佳方式是 Excel 电子表格 - 列 = 内存地址,行 = 新数据。我需要为每一列处理这种模式。

这可以是“实时的”(处理传入的数据) - 或者将多个数据序列保存到一个数组中并以块的形式解析它,这更容易

c++ 代码 sn-ps、伪代码或一般策略提示表示赞赏 提前感谢您的任何指导

-mleega

【问题讨论】:

  • 您正在寻找的内容听起来与压缩算法非常相似,后者会找到重复序列。如果您从一种这样的算法开始并放松“重复序列”条件(例如将最低位归零以减少传感器噪声)以满足您的需求,您可能会足够接近。这些算法通常也适用于流式数据

标签: algorithm


【解决方案1】:

我只看每个值是否大于前一个值,丢弃等于前一个值的值。那么听起来你只需要检测七个增量,然后是一个减量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-22
    • 1970-01-01
    • 2016-08-29
    • 1970-01-01
    • 2015-08-31
    • 2016-11-20
    • 2011-07-31
    相关资源
    最近更新 更多