原文:Brett Berry / 译文:藏精阁
估计你们都看过这个好像是段子的新闻了。为什么题目里的算法是错的?这是好问题。
5 x 3 = 5 + 5 + 5 居然不对,这看起来很荒诞,不是吗?
可以归结为一个理由
相等 VS 等价
原因仅仅在于,两个相等的东西并不意味着它们是等价的。
根据定义,相等的意思是,“在数量,大小,深度,或者价值方面一样。”而等价,则是“在价值,数量,功能,或者意义方面的对等。”
上文中的5x3和5+5+5相等,但它们并不必然等价。等价与意义有关,它取决于乘法的意义,正如方位的指向。
我做了件之前从未做过的事,我查阅了乘法的定义。
正如我怀疑的那样,乘法中的第一个“值”是倍数,第二个“值”是被乘数。
所以根据定义,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字符串,而右边的是一个数字。
(注:如果你想更深入地讨论JavaScript里的==和===,请点击此链接查看。)
矩阵乘法该有的思维模式
注意到了么,上面的第二个例子也被标为错误。为什么用4列6代替6列4那么重要?
这不仅源于乘法的定义,它还教给学生图解矩阵的正确指令,即列数乘以行数。
保持列与行的线性在矩阵乘法中相当重要。矩阵用行符列符m x n来标记。
把矩阵乘起来,你用第一个矩阵的行数乘以第二个矩阵的列数。第一个矩阵的列数必须跟第二个矩阵的行数相等,否则,你没法将它们相乘。
比如,我们可以用一个2 x 3 的矩阵乘以一个 3 x 4 的矩阵。然而如果我们交换指令用一个3 x 4矩阵乘以一个2 x 3 矩阵,那么就没有足够的列和行,运算就没法完成。
学生学习正确的乘法定义和图解异常重要,之后他们就不会被搞晕了。
我知道这令人沮丧,但是尊重那些老师吧。
他们在孩童教育方面是合格的专家。对于学生,他们心中有着最良好的心愿。如果你感到困惑,在你抨击他们并晒到网上之前,先去问问他们为什么那么做。