数据库查询是NP-Hard问题

问题来自美人他爹Wangjianshuo's blog

一个查询的例子:NOT (AND ((C1>5), OR ((C2<6),(C3<>9))))

问题1:给出两个这样的查询Q1和Q2,如何确定Q1的结果是否是Q2结果的子集?

上面两篇文章主要是讨论实际工作中怎么解决问题1。下面从理论上分析一下这个问题。

问题2:判断Q1查询结果是否为空集。

在问题1中让Q2查询结果为空集,故问题1是比问题2更难的一个问题。

论断:问题2是NP-hard的。

证明:从3SAT问题很容易规约到问题2。

结论:问题1是NP-Hard的,除非NP=P,不可能有多项式级别的解。也就是理论上而言,解决上面的问题除了枚举没有别的好方法了。

当然以上只是理论,实际应用中,3^n的计算速度和2^n的计算速度还是有很大的区别。如何解决NP-Hard问题也是一个被广泛研究的课题,毕竟实际工作中很多问题都是NP-Hard的。

写于2009年十二月 23日

关于, »
2条留言 -> 跳到留言表格
  • At 2009.12.25 07:58, 灰度sTyles said:

    Merry Christmas ~ O(∩_∩)O ~
    灰度sTyles送给你最美好的祝福 ~
          *       ,
                _/^_
               
       *         /.-.     *
           *    `/&`          *
               ,@.*;@,
               /_o.I %_  *
        *      (`’–:o(_@;
              /`;–.,__ `’)       *
             ;@`o % O,*`’`&
          *  (`’–)_@ ;o %’()   *
             /`;–._`”–._O’@;
            /&*,()~o`;-.,_ `””`)
       *     /`,@ ;+& () o*`;-’;
            (`””–.,_0o*`;-’ &()
            /-.,_  “”–….-’`) *
         *  /@%;o`:;’–,.__  __.’
           ;*,&(); @ % &^;~`”`o;@();     *
           /()Evlos & ().oFriendsO
           `”=”==””==,,,.,=”==”===”`
          __.—-.(-”#####—…___…—–._
         ‘`     )_`”””””`
                .–’ ‘)
               o( )_-
                `”””` `

    • At 2009.12.25 16:43, 重庆律师 said:

      眼睛都看花了,看不懂呀

      (Required)
      (Required, not published)

        B | I | U | D | 添加链接 | 插入引用 | 插入代码 | 插入表情 | | + | ?

      guest | 注册 | 管理

      阅微堂

      理工科背景的证券从业人员
      Loading...
      Loading...
      Loading...