代码之家  ›  专栏  ›  技术社区  ›  mafu

如何在SQL中检测“对话”模式?

  •  3
  • mafu  · 技术社区  · 15 年前

    实际上,这并不是SQL特有的,我怀疑“对话模式”是不是正确的名称,但我想不出更好的标题。

    A.{1;max_n}A 模式:如果int后跟n,则满足该模式(>0)其他整数,然后重新输入原始整数,而n<=马克斯。

    例子:

    ...
    1
    4 <--
    7 \
    3  > n = 3
    3 /
    4 <--
    2
    ...
    

    4 4

    问题是,我怎样才能检测出大量数据中哪些整数遵循这种模式?我主要对算法本身感兴趣,但也欢迎使用SQL或C语言的例子。

    我提出的一个天真的想法是首先收集一个列表或所有不同的int,然后以一种简单的方式检查每个int的模式,但这会导致性能瓶颈。

    2 回复  |  直到 15 年前
        1
  •  1
  •   DixonD    15 年前

    你可以保存一些字典(C++)或map(C++)结构,其中保存第一次出现的数字的位置。

        2
  •  0
  •   Unreason    15 年前

    好吧,SQL不会以最佳的方式来实现,但是如果列被索引,它可能并不可怕。

    首先,要说SQL中的顺序,应该有另一个列。如果该列实际上等于行号,则可以:

    SELECT DISTINCT
      t1.number
    FROM 
      table t1, table t2
    WHERE
      (t1.rownumber-t2.rownumber) <= @max_n AND
      (t1.rownumber-t2.rownumber) >=1 AND
      t1.number = t2.number AND