零碎之所程序员的文艺情怀程序员&&简书

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

2015-10-31  本文已影响12360人  嘿头羊

原文:Brett Berry       /    译文:藏精阁

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

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字符串,而右边的是一个数字。

(注:如果你想更深入地讨论JavaScript里的==和===,请点击此链接查看。)

矩阵乘法该有的思维模式

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

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

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

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

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

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

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

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

上一篇下一篇

猜你喜欢

热点阅读