【问题标题】:How to find the sequences containing X consecutive 0's or 1's in a set of binary sequences?如何在一组二进制序列中找到包含 X 个连续 0 或 1 的序列?
【发布时间】:2021-04-22 16:29:02
【问题描述】:

给定一组位序列,找到包含给定数量 0 的位序列的最快方法是什么?我可以为此使用按位操作/掩码操作吗?

详情:

  • 所有位序列的长度相同 (287)。
  • 当我说“最快”时,我指的是性能方面,而不是最快的编写/维护。
  • 这些序列实际上会存储在 Oracle 和 SQL Server 中的单独记录中,并且这个操作可能会在查询中执行,但我想我可以实现它,一旦我理解了逻辑。

更多详情:

这是一种在具有性能限制的预订系统中查找可用性的方法。我认为的解决方案是将可用性存储为比特串或由 1 和 0 组成的数字,每个比特代表 5 分钟的间隔。

当我必须找到一个 30 分钟的时隙时,我需要找到 6 个连续的 0。如果您有更好的想法,我会非常有兴趣探索它们。

【问题讨论】:

  • “预订间隔”、“30 分钟时隙”... - 为什么不使用 DATE 数据类型?对我来说看起来 自然 (而 287 位的字符串则不是)。但是,嘿,我知道什么,只是说。
  • 嘿!感谢回复。正如我所说,“如果你有更好的想法,我会非常有兴趣探索它们。”您将如何使用日期时间来实现这一点?我想使用这种表示来保持单行上的单个“一天”的可用性,以提高性能,但我可能完全错了。

标签: oracle search binary


【解决方案1】:

除了我的 咆哮 作为评论,看看一个简单的INSTR 是否有帮助。第 1 - 4 行的样本数据(不想输入 287 位);查询本身从第 5 行开始。

SQL> with test (id, col) as
  2    (select 1, '1011100001101001' from dual union all
  3     select 2, '1010101000000110' from dual
  4    )
  5  select *
  6  from test
  7  where instr(col, '000000') > 0;

        ID COL
---------- ----------------
         2 1010101000000110

SQL>

【讨论】:

  • 事实证明,Oracle 中的字符串操作经过优化,即使是模式搜索的成本也很低,执行时间也可以忽略不计。
猜你喜欢
  • 2013-11-05
  • 2020-01-19
  • 2019-08-31
  • 1970-01-01
  • 2018-06-12
  • 1970-01-01
  • 2022-01-08
  • 2021-03-30
  • 2012-11-25
相关资源
最近更新 更多