楼主: 〇〇

n王后问题的优化

[复制链接]
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
41#
 楼主| 发表于 2016-11-4 09:08 | 只看该作者
同样的sql,oracle比sqlite慢
sqlite> WITH RECURSIVE
   ...>   n(n) as(values(12)),
   ...>   p(p,r,c) AS (
   ...>     VALUES(1,1,1)
   ...>     UNION SELECT ALL
   ...>     p+1,p/n+1,p%n+1 FROM p,n WHERE p < n*n
   ...>     ),
   ...>   w as(select p,2<<(c-1)w,2<<(N-1+r-c)w1,2<<(r+c-2)w2 from p,n),
   ...>   b(board, n_queens,w,w1,w2)as(
   ...>     SELECT p||'', 1 ,w,w1,w2
   ...>       FROM w,n where  p<=n
   ...>     UNION all
   ...>     SELECT
   ...>       board||p ,N_queens + 1 ,b.w+w.w,b.w1+w.w1,b.w2+w.w2
   ...>       FROM b, w,n
   ...>     WHERE n_queens <n
   ...>       and p >n_queens*N and p<=(n_queens+1)*N
   ...>       and b.w&w.w=0 and b.w1&w.w1=0 and b.w2&w.w2=0
   ...> )
   ...> select count(*) board from b,n where n_queens =n
   ...> ;
14200
Run Time: real 17.788 user 17.269311 sys 0.202801

SQL> with p(p,r,c)
  2  as(select level,ceil(level/:n),mod(level-1,:n)+1 from dual connect by level<=:n*:n)
  3  ,w as(select p,power(2,c-1)w,power(2,:N-1+r-c)w1,power(2,r+c-2)w2 from p)
  4  ,b(board, n_queens,w,w1,w2)as(
  5      SELECT cast(p as varchar(200)), 1 ,w,w1,w2
  6        FROM w where  p<=:N
  7      UNION all
  8      SELECT
  9        board||p ,N_queens + 1 ,b.w+w.w,b.w1+w.w1,b.w2+w.w2
10        FROM b, w
11      WHERE n_queens <:N
12        and p >n_queens*:N and p<=(n_queens+1)*:N
13        and bitand(b.w,w.w)=0 and bitand(b.w1,w.w1)=0 and bitand(b.w2,w.w2)=0
14  )
15  select count(*)board from b where n_queens =:N
16  ;

     BOARD
----------
     14200

已用时间:  00: 00: 24.57

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
42#
 楼主| 发表于 2016-11-5 08:32 | 只看该作者
sql和java比还是差太多
http://www.ituring.com.cn/article/273298

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
43#
 楼主| 发表于 2016-11-5 13:30 来自手机 | 只看该作者
(normal)result of 14 Q is 365596,time is 1905311 ms (mthred)result of 14 Q is 365596,time is 311290 ms          (mthred+half)result of 14 Q is 365596,time is 179771 ms

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
44#
 楼主| 发表于 2016-11-5 13:34 来自手机 | 只看该作者
上面是在手机上运行的结果,arm c4droid

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表