乐在其中:无所不能用SQL挑战经典游戏汉诺塔

苏旭晖,网名 newkid

ITPUB开发版资深版主,SQL开发专家

编辑手记:感谢苏旭晖先生授权我们独家转载其系列精品文章,也欢迎大家向“Oracle”社区投稿。

SQL是一门非常灵活的语言,专家们用其挑战一切看似不可能。

问题来源

  汉诺塔是源自印度神话里的玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按大小顺序摞着64片黄金圆盘。   大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。 传说   在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵塔、庙宇和众生也都将同归于尽。

题目要求

题目要求:用SQL找出最少移动次数,并且给出一种移法。 例子:3个圆盘 输入:N=圆盘个数

VAR N NUMBER; EXEC :N := 3;

输出:

7 1->2,1->3,2->3,1->2,3->1,3->2,1->2

每个步骤表示将一个柱子上的最上面一个圆盘移到另一个柱子。比如1->2 就是将1号柱最上方的圆盘放到2号柱的最上方。

思路分析

假设有N个盘,最底下的N号盘在移动的时候,目标的柱子一定是空的。所以所有的其他N-1个盘子必定全部在另一柱子上。 把N号盘移过去之后,N-1要叠加到这个盘上面,和刚才移动N-1个盘子的方法是一样的,只不过柱子的编号不同。 用递归SQL和MODEL都可以轻易写出来。

SQL解答

递归WITH:

WITH h(n,path,ended) AS ( SELECT 1,CAST('1->2' AS VARCHAR2(2000)),2 FROM DUAL UNION ALL SELECT n+1 ,path ||',1->'||DECODE(ended,2,3,2)||',' ||TRANSLATE(path,'123',DECODE(ended,2,'231','312')) ,DECODE(ended,2,3,2) FROM h WHERE n<:N ) SELECT POWER(2,n)-1 AS steps,path FROM h WHERE n=:N;

MODEL解法:

SELECT POWER(2,:N)-1 AS steps,path FROM (SELECT CAST('1->2' AS VARCHAR2(2000)) AS path,2 AS ended FROM DUAL) MODEL RETURN UPDATED ROWS DIMENSION BY (1 n) MEASURES (path,ended) RULES ITERATE(100) UNTIL(ITERATION_NUMBER=:N-2) ( path[1]=path[1] ||',1->'||DECODE(ended[1],2,3,2)||',' ||TRANSLATE(path[1],'123',DECODE(ended[1],2,'231','312')), ended[1]=DECODE(ended[1],2,3,2) ) ;

大家是否已经能够体会SQL的无穷魅力,参与定期的线上和线下技术分享,请加入我们的“云和恩墨大讲堂”!

近期文章

成就卓越:云和恩墨大讲堂期刊第三期

新年贺礼:云和恩墨大讲堂期刊第二期

删繁就简-云和恩墨的一道面试题解析

用SQL解一道数学题:Gauss和Poincare

新年贺礼:云和恩墨大讲堂期刊发行

2015 Oracle 十大热门文章精选

Oracle 12c ASM 防火防盗新特性揭秘

DBA入门之路:学习与进阶之经验谈

DBA入门之路:关于日常工作的建议

业务架构

电子渠道(网络销售)分析系统、数据治理

IT基础架构

分布式存储解决方案 | zData一体机 | 容灾环境建设

数据架构

Oracle DB2 MySQL NoSQL

专项服务:架构/安全/容灾/优化/整合/升级/迁移

运维服务:运维服务 代维服务

人才培养:个人认证 企业内训

软件产品:SQL审核、监控、数据恢复

应用架构

应用软件和中间件:数据建模 | SQL审核和优化 | 中间件服务

原文发布于微信公众号 - 数据和云(OraNews)

原文发表时间:2016-03-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏镁客网

混乱的春运已至,人工智能在火车站有何妙招?

1376
来自专栏PPV课数据科学社区

身为码农,为12306说两句公道话

我曾在淘宝写过一段时间代码,2012年在一家百强民企做电商副总,当时在极为艰苦的条件下带队开发了一个B2C网站,走支付宝和银联支付通道,年营业额千万级(当然实在...

3308
来自专栏腾讯数据中心

腾讯数据中心制冷节能的十八般武艺——下

(本文内容接《腾讯数据中心制冷节能的十八般武艺——上》) (备注:图片带播放图标的均有视频介绍,视频链接为: http://v.qq.com/vplus/513...

3409
来自专栏区块链领域

eos原力:15天目睹万币侯诞生 ·商战备忘录

我运营了一个超级节点,是EOS原力主链启动的23个超级节点之一,按照游戏的规则,保持名次在23名以内,就可以每24小时获得11000枚原力EOS币。

601
来自专栏机器人网

机器人技术:用裙边胶机器人涂装SUV遇到的问题和解决方案

汽车行驶过程中裙边位置会受到来自车底石子的撞击,石子会将裙边表面的漆面破坏,从而导致裙边生锈,以至于造成门槛、车门的锈蚀;给整车防锈带来巨大的隐患及威胁。裙边胶...

2524
来自专栏CDA数据分析师

骑行在华盛顿 针对320万次共享单车骑行数据的分析

原作者 Alex Freeman 编译 Mika 本文为 CDA 数据分析师原创作品,转载需授权 共享单车的蓬勃发展,让人们的短途出行更加方便,这种绿色低...

20910
来自专栏Jerry的SAP技术分享

Hello World, S/4HANA for Customer Management 1.0

在我之前的微信公众号文章 SAP的这三款CRM解决方案,您能区分清楚么我曾经提到过我作为成都SAP研究院CRM产品开发团队的一员工作过一段时间。

32411
来自专栏FreeBuf

极路由(HiWiFi)1S硬件分析与改造研究

本文为原创文章首发freebuf,并仅做研究学习所用。作者本人不承担任何法律及相关责任,同时未经作者许可禁止进行发布、转载刊登等事宜。 ‍‍圣诞节快到了,考虑了...

2229
来自专栏数据和云

数据库流行度6月排行榜:Oracle飙升MySQL止跌回升

六一儿童节,虽然是大家快乐的假期,但是也宣告了2018年进入中场。在DB-Engines的6月排行榜上,不同的数据库产品竞争也进入中场。先预祝大家中场收获满满!...

1074
来自专栏维恩的派VNPIE

R-Breaker策略

本文提供了一个用vn.py来编写R-breaker交易策略的示例。只提供一个参考模板,并不能直接进入市场进行交易。感谢‘爱谁谁’在维恩的派论坛里的分享!

1083

扫描关注云+社区