我一直在阅读牛津大学数学教授 Marcus du Sautoy 的Thinking Better: The Art of the Shortcut,他提出了一些可以应用于编码的优点。

  1. 捷径不等于偷工减料。尽管两者都涉及“削减”,但捷径是实现相同最终目标的更快方法,如果你会以漫长而艰难的方式完成它,而偷工减料会给你带来劣质的产品。

  2. 我们被越来越快的计算机所宠坏了,他们选择使用蛮力而不是通过捷径思考。

第二个例子:

如果我要尝试找出带有 4 位密码的老式 iPhone 有多少种不同的可能组合,我可以让计算机为我计算出所有这些组合,然后像这样计算它们:

import itertools
it = itertools.product([0,1,2,3,4,5,6,7,8,9], repeat=4)
itlist = [x for x in it]
print(len(itlist))

10000

进入全屏模式 退出全屏模式

或者,我记得我的中学代数,并记得可能组合的数量是每个数字的所有计数的乘积。在我们的 iPhone 示例中,电话号码板只有数字 0-9 作为选项,因此我们为密码中的 4 位数字或 10 * 10 * 10 * 10 (10^4) 中的每一位提供 10 个选项。因此,我们将获得相同的解决方案:

print(10**4)

10000

进入全屏模式 退出全屏模式

对这两种方法进行计时,我能够在第一个时间的 1/10 内执行第二个函数。我们对问题的规模越大(例如 10000 位密码或允许所有字母数字选项的密码),蛮力的低效率就越明显。

重构代码不一定只是衡量mapforeachreduce是否能更快地产生相同的输出(我并没有忽视他们每个人的做法都不同的事实!),而是关于我们是否可以到达相同的最终位置在不偷工减料的情况下首先跳过/删除步骤,从而创建不太健壮的代码。

Logo

学AI,认准AI Studio!GPU算力,限时免费领,邀请好友解锁更多惊喜福利 >>>

更多推荐