聪明的数据结构和笨拙的逻辑代码
前言
《大教堂和市集》中有这样一句话:聪明的数据结构和笨拙的代码要比相反的搭配工作的更好 ,我深以为然。本篇博文就是对此话题的个人简单理解,涉及的编程问题基本上来源于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
聪明的数据结构和笨拙的逻辑代码相关推荐
- 大恶人吉日嘎拉之走火入魔闭门造车之.NET疯狂架构经验分享系列之(一)后台控制逻辑代码部分...
我也是本着善意把自己的代码结构分享给大家,欢迎大家用批评指点.首先我为什么把这个标题写为恶人,因为我很喜欢招惹别人,因为喜欢跟别人交流,喜欢指出别人的缺点,偷偷学习别人的优点,所以大家都会反感我,因为 ...
- 【C 语言】字符串拷贝 ( 字符串拷贝业务逻辑代码 | 分离 主函数 与 字符串拷贝 业务模型 )
文章目录 一.字符串拷贝业务逻辑代码 二.分离 主函数 与 字符串拷贝 业务模型 一.字符串拷贝业务逻辑代码 下面的代码 , 是 字符串 拷贝 最简单的代码 , 仅 使用 指针 遍历内存 , 实现了字 ...
- java逻辑代码_Java逻辑代码判断字数
package cn.com.f_young.erp.util; public class WorldTrueCount { /** * 判断中文和标点符号的逻辑代码 * @param value * ...
- 【深度解析RBAC用户-角色-权限设计方案,以及核心逻辑代码的讲解】
首先对于b2b.b2c等这一些网站后台,一般情况下都需要权限管理的设计与实现,对于这部分,通常是固定不变的,每次只需要做少量的改动即可. 如何设计这几张表呢? RBAC(基于角色的访问控制),也就是用 ...
- 爱说说技术原理:前后台参数约定及逻辑代码(三)
上一节:"爱说说"技术原理:与TXT交互及MDataTable对Json的功能扩展 中, 我们解决了TXT数据存储和Json的交互问题,本节,看一下后台的业务逻辑: 爱说说:htt ...
- pycharm pyqt5实现登陆界面_PyQt5可以实现界面和逻辑代码分离吗?大声说出你的答案!...
必须的!!! PyQt5作为最强大的Python GUI设计模块,小编在这里告诉大家:PyQt5可以实现界面与逻辑代码分离,实现非常简单,用处特别大! 初学者在学习PyQt5时,使用Qt Design ...
- 通过MVC模式将Web视图和逻辑代码分离
MVC模式(Model-View-Controller)常被用在Web程序中.如Struts框架就是一个基于MVC模式的Web框架.所谓MVC模式,就是将视图(也就是客户端代码,包括html.java ...
- MMO移动游戏性能分析报告:渲染、UI、逻辑代码和内存
http://www.gameres.com/688154.html 两个月前,UWA发布了Unity性能数据分析报告,对提交测试(登陆www.uwa4d.com )的所有项目进行了客观的分析和汇总. ...
- 我是WPF菜鸟之(4)---关于XAML与逻辑代码
原文出处:http://liutiemeng.blog.51cto.com/120361/129508 昨天晚上(确切地说应该是今天凌晨),我和草羹讨论"XAML能不能写逻辑代码" ...
最新文章
- Spanned.SPAN_EXCLUSIVE_EXCLUSIVE的含义
- 李德毅院士:希望智能驾驶成为我国继高铁之后又一张新名片
- dbms_rowid包的BUG问题
- jacobi迭代法matlab_解线性方程组的经典迭代法(1)-理论
- 动态规划练习1 [导弹拦截]
- php怎么给页面链接,怎么给一个PHP密码访问页面加超链接
- 苹果智能音箱HomePod跳票了,上市日期推迟到明年
- 7-9 龟兔赛跑 (20 分)
- paip.oracle query export to insert sql
- 从IT到DT,再到OT
- 英语·句子的五大结构
- 【NLP】计算所汉语词性标记集
- 从百度“童年英雄的AI幻想”互动展说起,看AI如何赋能艺术?
- Powershell脚本:一键优化windows 10(原版)
- 加拿大鹅“跌倒”,波司登“吃饱”?
- 快递查询工具,如何查看单号在每个时间段的具体信息
- 效率倍增,5 个提高生产力的 Jupyter notebook插件
- 三国志战略版:萌新手册系列_总结
- 720度全景带你vr云游景区,vr云游在景区的应用优势
- 有关研究生教育的话题