检测循环序列中跳过值的快速轻量级方法

时间:2015-02-18 08:58:42

标签: algorithm language-agnostic real-time sequence

我有一个值,随着时间的推移,从1增加到6然后返回到1.因此在几个帧中看到的序列将是:

1, 2, 3, 4, 5, 6, 1, 2, 3, 4...

如果硬件设备有缺陷,其中一个号码可能无法正确读取,因此序列可能如下所示:

1, 2, 6, 4, 5, 6, 1, 2, 6, 4...

检测此不一致的快速,简短方法是什么?

注意:

  • 这是专为硬实时环境
  • 而设计的
  • 我目前的方法是检查每一帧的每个新值与最后一个值之间的差异是否大于1,然后有一个特殊情况,即1到6之间的差异,允许为5
  • 我想知道是否有一个简单的算法或技巧来解决这个问题
  • 如果序列相反,则序列也有效,例如: 6, 5, 4, 3, 2, 1, 6, 5, 4, 3....

1 个答案:

答案 0 :(得分:1)

您可以使用模运算符:

(current_value - previous_value + 6) mod 6 == 1

+6用于确保mod的正面论证。不同的语言会以不同的方式处理否定值,但如果-5 mod 6评估为您的1,则可以省略+6