二级域名做网站,studio网站开发,jquery前端框架教程,王烨楠点击蓝字关注我们因公众号更改推送规则#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络#xff0c;侵删你能看出来#xff0c;这首诗妙在哪里吗#xff1f;来源#xff1a;量子位#xff08;ID#xff1a;QbitAI#xff09;#xff0c;梦晨 萧…点击蓝字关注我们因公众号更改推送规则请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络侵删你能看出来这首诗妙在哪里吗来源量子位IDQbitAI梦晨 萧箫 发自 凹非寺其实横着读是一首诗竖着读还是这首诗而且这首诗可不是乱编的其中的诗句都来自《全唐诗》读起来也颇有意境。创造这个奇妙组合的不是文学研究大师而是一位程序员小哥。他用计算机找出了所有符合规律的古诗还在Github上开源了代码。就连README文件也颇具个性余所用之程序當以gcc編譯之如是gcc -O3 mgsq5.c -o mgsq5等一下。这个风格好像很熟悉没错这位程序员正是之前开发了火遍全网的文言文编程语言的Huang Lingdong。△ 文言文编程的“HelloWorld”他用数学中的3阶幻方九宫格作比把符合这种规律的诗命名为“唐诗幻方”。然而这首诗真正的玄妙之处还不止在这里。玄妙之处这首诗初看只是横竖都能读但如果把其中汉字编码成数字再看的话会发现原来这是个对称矩阵不过他遍历了全唐诗里所有五言诗共二十八万七千句后也只能得出两个这样的幻方。除了“风月清江夜”以外还只有一个不过意境上差了许多不能令他满意。在135600行七言唐诗中符合这个规律的七言“幻方”更是一个都没有。他只能退而求其次只寻找奇数项对称的即每句第1、3、5、7个字对称偶数行用空行代替。放宽标准后倒是能找出不少但再想从其中挑选符合音韵格律、意思上还通顺的就不多了。最后他选择了其中一个还稍微过得去的做例子把空行中的字也加上也能写成对称矩阵这位小哥是在研究传统文化时从古代的洛书和璇玑图中获得的灵感。△洛书洛书写成数字就是三阶幻方特点是每一行、每一列及对角线中的数字之和都相等。文字没有求和这种操作如果按照程序员思维那就是字符串拼接起来相等。就这样得出了要寻找的目标第n行和第n列的文字相同。璇玑图中共841个字按顺读、逆读、横读、斜读、蛇行读、交叉读、换行读、换列读、间句读都能成诗总共包含了7958首诗。其中的关键之处在于按照不同顺序读其文字都能组成有意义的诗句。他自认没有古人作诗的才华就想到从唐诗中寻找符合条件的诗句。而且是用现代人的方法——编程来解决。以“暴力”治之这位小哥先是想到了用“八皇后问题”的计算机解法来找出符合要求的唐诗。八皇后问题简单来说是这样的8×8的国际象棋棋盘上摆放8个不同的皇后使其不能互相攻击即处在同一行、同一列、同一斜线上求解摆放方法。这个问题可以用到一种名为“回溯法”的算法来求解原理如图如果用回溯法来找“幻方”计算机需要先随机“找出半句诗”再挨个儿往后面搜索合适的诗句。例如计算机先从13万行唐诗中随机找出诗句“风月清江夜”根据对称矩阵的原理第二句诗的开头就应该以“月”为首以月开头的诗句应该还是有不少的像月上柳梢头以此类推第三句诗的开头就应该以“清夜”为首以清夜开头的诗句就少了许多而第四句诗的开头就应该以“江山归”打头江山归开头的诗……可选范围应该更少了最后一句诗的开头就必须与前4句诗的结尾完全一致“夜深来客”难度逐渐变成地狱级……在这几步操作中要是有任何一步无法满足条件就得全部推倒重来。这样的话最初的第一步就显得尤为重要从什么类型的诗句开始遍历才能最快地找到答案他为此用上了启发式搜索从已知问题信息入手对这些空格进行评估找到限制条件最多、即最容易“下笔”的那个位置再从这个位置开始找诗。具体写成代码求解的话就是利用递归法的结构。同时用上剪枝法缩小剩下位置的查找范围。也就是说要用到约束函数在扩展节点处剪去不满足约束条件的子树再用限界函数剪去得不到最优解的子树。这样一来就能降低问题复杂度。然而在运行代码时作者却发现这样做效率并不高。这种方法虽然可以求解“N”皇后问题却不太适合求汉字矩阵。因为要填进格子里的可不止8个皇后每一格可以填的汉字就有5000种选择采用递归法的话计算机在填上前面的汉字时实际上就缩小了剩下汉字可以搜查的范围。如果没有找到最初那个合适的字往往搜到一半后能用的诗句就没了又得重新再猜效率不升反降。越想越烦躁这位小哥干脆一拍大腿不如暴力搜索当然也不是普通的暴力搜索。会有两个搜索条件其一以五言诗为例第五列的前4个字和第五行的前4个字内容是否完全一样如果不一样就扔掉。△ 第五行和第五列的前4个字其二这首诗是不是对称矩阵不是的话就扔掉。利用C语言写好后不用1小时就能跑出所有的“对称诗”。作者表示自己并非文学研究的专家也不是算法专家因此这种方法可能并不是最好的办法。诸君若有更好的求解思路可以来找他玩耍~如果你年满18周岁以上又觉得学【C语言】太难想尝试其他编程语言那么我推荐你学Python现有价值499元Python零基础课程限时免费领取限10个名额▲扫描二维码-免费领取戳“阅读原文”我们一起进步