学习如何计数(避免栅栏柱问题(Fencepost Problem))

计数并不容易。假设老板让你从早上8点到11点工作,并且拖地8到11楼。简单——每小时一层楼,对吧?

不对!有4层楼要拖(8、9、10、11),但只有3小时工作时间(8-9、9-10和10-11)。

哇——我们数楼层和小时的方式不一样?当然。不知何故,如果老板说"在4月8日至11日拖8至11楼",一切就都没问题了。

今天让我们解开这个计数之谜。

基本计数

数字帮助我们了解"有多少"。以编号的房屋列表为例:

counting numbered houses

这里有52栋房子。不要逐一计数:门牌号替我们数好了!这些号码像我们通常做的那样,逐一标记了房子。我们只需读取最后一项:"1到52"就是52栋房子。

示例:

  • 员工ID卡从1到3493。共有3493名员工。
  • 一个月中的天数从1到31。该月有31天。

减法意味着什么?

我们常常将数字视为直线上的点:

number line

这些点可以是房子、楼层或普通整数。无论它们是什么,它们都被标记,以便我们轻松计数。1到10表示十个物品。

但是像8到11这样的范围呢?那里有多少个物品?

number line distance of 3 but 4 numbers

我们可能会尝试减法:11 - 8 = 3,对吗?但这里的关键是:

  • 减法是两个数字之间的间隔,而不是计数

等式11 - 8 = 3意味着8和11之间有3个"间隔",但该范围内有四个数字!

间隔是 距离度量,比如从上午8点到上午11点的时间(3小时)或8英寸到11英寸的距离(3英寸)。

但在计数楼层时,我们问的不是8层到11层之间的距离(实际上是3层或30英尺,假设每层10英尺)。我们想知道范围"8到11"包含多少个物品!

处理跨度和计数

意识到 两种计数类型 是我思维的重大转变。从a到b"计数"时,我们有两种可能的选择:

  • 从a到b的距离: b - a [常规减法]
  • 从a到b的项目数量: b - a + 1 (跨度触及额外元素)

好了,公式都行得通。但为什么计数需要额外加一个元素呢?

嗯,最短的间隔(距离1)实际上触及了两个数字:

single span, two items

间隔是一条有起点和终点的线段;距离为1的间隔覆盖了2个点。随着间隔增长,我们吞并更多的点,并且总是"领先一步"。

additional span

另一种思考方式:间隔为3意味着我们从一个物品(#8)开始,然后数出另外3个(#9、#10、#11)。所以,间隔N包含1个原始物品和N个新物品,总共N + 1个物品。

我喜欢看到不同的观点;使用适合你的方法。

栅栏柱问题

间隔与计数之间的混淆通常被称为栅栏问题。你是在数柱子(点)还是它们之间的距离(栅栏间隔)?

问题如下:

你正在建造一个100英尺长的围栏,每隔10英尺立一根柱子。你需要多少根柱子?

下面是用我们的新思维模型来思考这个问题的方法:

嗯,我们想要一个100英尺长的栅栏。好:那是一个由十个10英尺段组成的跨度。但我们想要的是 文章:这十个段触及了多少根柱子?嗯,一个跨度总是触及一个额外的点,所以十个段意味着11根柱子。

应该是11根柱子。但这个问题对我来说并不自然——我不得不考虑跨度与点。我会用一个更小的例子来验证——一个10英尺长的围栏需要2根柱子,所以是的,我们需要“多一根柱子”。

再举几个例子:

  • 工作日: 我从4月8日工作到4月11日。我一共工作了几天?嗯,跨度是3(11-8),但我们"触及"了4天:4月8、9、10、11。所以我工作了4天。
  • 小时: 小时就像跨度。从8工作到11意味着你覆盖了 跨度 8-9、9-10和10-11。8到11意味着一个3小时的"时间段"。
  • 秒: 我参加一场比赛,开始时间是12:01:08(12小时1分8秒)。结束时间是12:01:11。持续了多长时间?11 - 8 = 3秒。(短比赛)

有趣吧?有些时间单位用跨度(小时、秒)来衡量,而另一些则是被计数的项目(天)。

衡量类型取决于上下文。我们把较短的时间单位视为“瞬间”,并希望得到这些瞬间之间的持续时间,而不是我们触及的“瞬间”数量。

我们把“天”看作是一个模糊的大块,覆盖了一个时间段(上午9点到下午5点)——我们想知道覆盖了多少个这样的块。说你在4月8日到4月9日工作,意味着你在两天的时间里工作了上午9点到下午5点的时间段。

计数类型取决于上下文——但至少你知道 为什么 我们以不同的方式计数。

最终想法

计数并不简单。围栏柱问题和其他“差一”边界错误是出了名的常见。但不要只记住一个特殊技巧,比如“有时我需要加1”。记住有两种衡量事物的方式:

  • 我们是在测量差值(距离、时间)吗? 然后做常规减法得到跨度。
  • 我们是在计数吗? 然后减1再加1(b - a + 1)——我们想要跨度触及的项目数。

区分它们并不容易——我们习惯于只有一种衡量方式。尝试一个简单的例子(一个10英尺长的围栏)来测试你是在计数还是测量跨度。

我遇到过很多次围栏柱问题,但我读过的文章只告诉我如何修正。不,不,不—— 为什么会这样?

原来我们经常对两种不同类型的计数采用相同的方法。虽然正确的方法可能不明显,但至少我们知道要尝试两种方法。数学愉快。

本系列其他文章

  1. 将数字 1 到 100 相加的技巧
  2. 重新思考算术(Arithmetic):可视化指南
  3. 快速洞察:除法的直观含义(Intuitive Meaning of Division)
  4. 快速洞察:减去负数
  5. 平方数(1, 4, 9, 16…)中令人惊讶的规律
  6. 模运算(Modular Arithmetic)的乐趣
  7. 学习如何计数(避免栅栏柱问题(Fencepost Problem))
  8. 数字系统的奇特入门
  9. 再看一眼素数(Prime Numbers)
  10. 黄金比例(Golden Ratio)的直观理解
  11. 数字零(Zero)的不同解释

加入 45 万月度读者

喜欢这篇文章?还有更多内容能帮你建立持久、直观的数学理解。加入通讯以获取额外内容和最新更新。