微信号:programmer_club

介绍:程序员第一自媒体,与你探讨码农人生路上遇到的各类泛技术话题,定期为你推荐码农人生思考、感悟以及启迪!

为什么 5 x 3 = 5 + 5 + 5 是错的?

2015-12-25 21:59 程序员之家

作者:Brett Berry

原文:Why Was 5 x 3 = 5 + 5 + 5 Marked Wrong

翻译:藏精阁

译文:http://www.jianshu.com/p/822965e959ea


估计你们都看过这个好像是段子的新闻了。为什么题目里的算法是错的?这是好问题。


5 x 3 = 5 + 5 + 5 居然不对,这看起来很荒诞,不是吗?


可以归结为一个理由




相等 VS 等价


原因仅仅在于,两个相等的东西并不意味着它们是等价的。

根据定义,相等的意思是,“在数量,大小,深度,或者价值方面一样。”而等价,则是“在价值,数量,功能,或者意义方面的对等。”


上文中的5x3和5+5+5相等,但它们并不必然等价。等价与意义有关,它取决于乘法的意义,正如方位的指向。


我做了件之前从未做过的事,我查阅了乘法的定义。



"multiplication",via wikipedia


正如我怀疑的那样,乘法中的第一个“值”是倍数,第二个“值”是被乘数。


所以根据定义,5x3和5个3,或者那个老师标注的3+3+3+3+3是等价的。5x3和5+5+5的算术结果相等,但并不等价。因为3个5是另外一回事。


举个例子,3组每5个为一组的香蕉跟5组3个为一组的香蕉不一样,尽管香蕉的总数一样,都是15。二者的结构不同。


再举个例子,30 ÷ 2也等于15,但30 ÷ 2能代表乘法吗?


30 ÷ 2 = 15


显然不能,它表示的含义是分割。因此,5+5+5和30 ÷ 2的算术结果相等,但二者并不等价。


我弄清区别了,但这是不是有点过于苛刻?


这得看情况。如果老师已经教了乘法交换律(a x b = b x a),那么这种变换就无伤大雅。


如果老师还没有教,那么让学生继续那种想法就不太明智。


为什么?


一个常见现象是,对于初学者来说,在二元运算里,当不同层级的价值可以互换的时候,他们很容易产生困惑。


我们知道以下算式并不相等:




小孩子发现有些时候互换数值没错,有些时候却不对,这很容易让他们感到不解。通过把关注点放在这些运算的含义上,并跟上下文对应起来的手段,老师试图让学生远离这种低级错误。


可是那个答案没错啊,为什么数值的意义稍有区别,就变得十分要紧?


如今,对学生而言,从小就理解“结果上的相等”和“意义上的等价”的区别比过去的任何时代都更重要。因为这是计算机科学的基本概念。


在编程当中,两个东西相等或等价(同一、完全一致),二者区别很大。


相等意味着它们的数值一样,比如5+5+5= 30 ÷ 2 = 15 。


等价不仅意味着数值上的相等,还意味着它们是相同的数据类型。


换句话说,它们表示的的同一个东西。


基于不同的语言,看起来一样的数值和表达式并不总是同一个东西。


比如,在JavaScript中,如果我们用操作符 == 作相等测试:


·“4”== 4 returns True


因为二者都指的是数字4。但是如果我们用操作符===再来一次,结果是这样:


·“4”=== 4 returns False


因为它们不是同一个元素。左边的是string字符串,而右边的是一个数字。


矩阵乘法该有的思维模式


注意到了么,上面的第二个例子也被标为错误。为什么用4列6代替6列4那么重要?


这不仅源于乘法的定义,它还教给学生图解矩阵的正确指令,即列数乘以行数。


保持列与行的线性在矩阵乘法中相当重要。矩阵用行符列符m x n来标记。


把矩阵乘起来,你用第一个矩阵的行数乘以第二个矩阵的列数。第一个矩阵的列数必须跟第二个矩阵的行数相等,否则,你没法将它们相乘。


比如,我们可以用一个2 x 3 的矩阵乘以一个 3 x 4 的矩阵。然而如果我们交换指令用一个3 x 4矩阵乘以一个2 x 3 矩阵,那么就没有足够的列和行,运算就没法完成。


学生学习正确的乘法定义和图解异常重要,之后他们就不会被搞晕了。


我知道这令人沮丧,但是尊重那些老师吧!


他们在孩童教育方面是合格的专家。对于学生,他们心中有着最良好的心愿。如果你感到困惑,在你抨击他们并晒到网上之前,先去问问他们为什么那么做。

 
程序员之家 更多文章 我们这一代人的困惑 神剪辑,揭秘程序员加班内幕,不能看,看完想笑又想哭! 美国12位创新型程序员:让科技永远改变 说说怎么写clean code 500,000+年薪程序猿出身哪里 猎聘网揭秘前十大学校
猜您喜欢 【技术干货】如何自学 Python 爬虫? 我花了十万,找到了IT从业者缓解压力,避免脱发的办法… Tomcat 与Apache/Nginx有啥区别? 途牛资讯 | 途牛323旅游节首日再破行业纪录 截至19时单日销售额破亿 【干货】超级有用的9个PHP代码片段