前言

《大教堂和市集》中有这样一句话:聪明的数据结构和笨拙的代码要比相反的搭配工作的更好 ,我深以为然。本篇博文就是对此话题的个人简单理解,涉及的编程问题基本上来源于Codewars。
关于《大教堂与市集》中文版可访问这里

释读

Pascal之父——Nicklaus Wirth提出著名公式“算法+数据结构=程序”

本篇博文的主题也可以用简单的数学语句表达出来:

聪明的数据结构 + 笨拙的逻辑代码 > 笨拙的数据结构 + 聪明的逻辑代码
极端的说法是:优秀的数据结构远比优秀的逻辑代码要更好用。

以下举一个来自Codewars中的编程问题:Playing on a chessboard
题目描述:给定一个输入参数n,它会得到一个二维数组(类似矩阵),行方向以1/2,2/3,3/4这样的方式递增,列方向以1/2,1/3,1/4这样的方式递增。返回一个数组,其值为所有元素的求和,如果求和值能约简为整数,则返回整数,否则返回[分子,分母]。
一个n=3时的数组例子:

[
[1/4,2/5,3/6],
[1/3,2/4,3/5],
[1/2,2/3,3/4]
]

初始解题思路是:先生成一个长度为n的二维数组,然后通过二次for循环对数组写入正确的值(这样好方便下边的计算),然后对数组中的所有元素进行求和,判断求和值是否能约简为整数,返回相应要求的数组。
然而,这个解法太死板了,于是我去看了看其他程序员的解法,然后,非常震惊的解法找到了,该解法的思路是:先找到n与求和值结果之间的数学关系,关系是:从生成数组的左上至右下方向观察数据,发现其值为n/2或(n+1)/2,然后我们得到了输入参数n和求和值之间的数学关系是:n*n/2 这便是所要求得结果,所以,最后的解决方案是:

function game(n) {return n%2==1?[n*n,2]:[n*n/2];
}

被震惊到了吧!这里有这样一个逻辑:观察相关的数学关系表达式,这便是所谓的聪明的数据结构了,而逻辑逻辑代码则因为数据结构的关系,变得异常简单(实际只是一个if判断),而初始思路则可看出笨拙的数据结构(未得到数学表达式之前的数据结构)的表现了。


(未完 待补写)

转载于:https://www.cnblogs.com/xihe/p/6138610.html

聪明的数据结构和笨拙的逻辑代码相关推荐

  1. 大恶人吉日嘎拉之走火入魔闭门造车之.NET疯狂架构经验分享系列之(一)后台控制逻辑代码部分...

    我也是本着善意把自己的代码结构分享给大家,欢迎大家用批评指点.首先我为什么把这个标题写为恶人,因为我很喜欢招惹别人,因为喜欢跟别人交流,喜欢指出别人的缺点,偷偷学习别人的优点,所以大家都会反感我,因为 ...

  2. 【C 语言】字符串拷贝 ( 字符串拷贝业务逻辑代码 | 分离 主函数 与 字符串拷贝 业务模型 )

    文章目录 一.字符串拷贝业务逻辑代码 二.分离 主函数 与 字符串拷贝 业务模型 一.字符串拷贝业务逻辑代码 下面的代码 , 是 字符串 拷贝 最简单的代码 , 仅 使用 指针 遍历内存 , 实现了字 ...

  3. java逻辑代码_Java逻辑代码判断字数

    package cn.com.f_young.erp.util; public class WorldTrueCount { /** * 判断中文和标点符号的逻辑代码 * @param value * ...

  4. 【深度解析RBAC用户-角色-权限设计方案,以及核心逻辑代码的讲解】

    首先对于b2b.b2c等这一些网站后台,一般情况下都需要权限管理的设计与实现,对于这部分,通常是固定不变的,每次只需要做少量的改动即可. 如何设计这几张表呢? RBAC(基于角色的访问控制),也就是用 ...

  5. 爱说说技术原理:前后台参数约定及逻辑代码(三)

    上一节:"爱说说"技术原理:与TXT交互及MDataTable对Json的功能扩展 中, 我们解决了TXT数据存储和Json的交互问题,本节,看一下后台的业务逻辑: 爱说说:htt ...

  6. pycharm pyqt5实现登陆界面_PyQt5可以实现界面和逻辑代码分离吗?大声说出你的答案!...

    必须的!!! PyQt5作为最强大的Python GUI设计模块,小编在这里告诉大家:PyQt5可以实现界面与逻辑代码分离,实现非常简单,用处特别大! 初学者在学习PyQt5时,使用Qt Design ...

  7. 通过MVC模式将Web视图和逻辑代码分离

    MVC模式(Model-View-Controller)常被用在Web程序中.如Struts框架就是一个基于MVC模式的Web框架.所谓MVC模式,就是将视图(也就是客户端代码,包括html.java ...

  8. MMO移动游戏性能分析报告:渲染、UI、逻辑代码和内存

    http://www.gameres.com/688154.html 两个月前,UWA发布了Unity性能数据分析报告,对提交测试(登陆www.uwa4d.com )的所有项目进行了客观的分析和汇总. ...

  9. 我是WPF菜鸟之(4)---关于XAML与逻辑代码

    原文出处:http://liutiemeng.blog.51cto.com/120361/129508 昨天晚上(确切地说应该是今天凌晨),我和草羹讨论"XAML能不能写逻辑代码" ...

最新文章

  1. Spanned.SPAN_EXCLUSIVE_EXCLUSIVE的含义
  2. 李德毅院士:希望智能驾驶成为我国继高铁之后又一张新名片
  3. dbms_rowid包的BUG问题
  4. jacobi迭代法matlab_解线性方程组的经典迭代法(1)-理论
  5. 动态规划练习1 [导弹拦截]
  6. php怎么给页面链接,怎么给一个PHP密码访问页面加超链接
  7. 苹果智能音箱HomePod跳票了,上市日期推迟到明年
  8. 7-9 龟兔赛跑 (20 分)
  9. paip.oracle query export to insert sql
  10. 从IT到DT,再到OT
  11. 英语·句子的五大结构
  12. 【NLP】计算所汉语词性标记集
  13. 从百度“童年英雄的AI幻想”互动展说起,看AI如何赋能艺术?
  14. Powershell脚本:一键优化windows 10(原版)
  15. 加拿大鹅“跌倒”,波司登“吃饱”?
  16. 快递查询工具,如何查看单号在每个时间段的具体信息
  17. 效率倍增,5 个提高生产力的 Jupyter notebook插件
  18. 三国志战略版:萌新手册系列_总结
  19. 720度全景带你vr云游景区,vr云游在景区的应用优势
  20. 有关研究生教育的话题

热门文章

  1. 金字塔pyramid
  2. 【目标检测】FPN(Feature Pyramid Network)
  3. 大数据流批一体化架构设计
  4. Machin(梅钦/马青)公式计算圆周率π
  5. linux管理进程ps命令,ps命令进程管理-linux
  6. 2021-09-14
  7. 11.9 leetcode打卡
  8. 图表嵌入到数据表格下方_Excel中进行图表下方显示数据表的操作技巧
  9. 【CODECHEF】Children Trips(分块)
  10. windows下更改应用程序属性的详细信息