ARTS 第 52 周

题图:Photo by Ian Dooley

每周完成一个 ARTS:
Algorithm: 每周至少做一个 LeetCode 的算法题
Review: 阅读并点评至少一篇英文技术文章
Tips: 学习至少一个技术技巧
Share: 分享一篇有观点和思考的技术文章

题图:Photo by Ian Dooley

Contents

Algorithm

111. Minimum Depth of Binary Tree

题目:111. Minimum Depth of Binary Tree

难度:Easy

题意:

Given a binary tree, find its minimum depth.

The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.

Note: A leaf is a node with no children.

示例:

Given binary tree [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

return its minimum depth = 2.

解法:

这道题也是用递归法来解决,有没有发现,很多关于二叉树的问题都是使用递归的方法,这可能也和二叉树本身就是分形图形有关。首先我们判断这棵树是否为空,如果是空数就返回 0 了;然后递归地比较左右节点,选择长度最小的子树即可;但是我们要考虑到一种特殊的情况,如下所示:

    1
   /
  2

这棵树的最短路径应该是 2,根据定义,叶子节点应该没有任何子节点,如果我们根据上面的描述,就会将空的右子树的长度 0 作为结果加 1 返回,得到错误的结果。在这种缺少左子树或右子树的情况下,我们应该将左右子树中较大的那个作为结果返回。

代码:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def minDepth(self, root: TreeNode) -> int:
        if root is not None:
            if root.left and root.right:
                return min(self.minDepth(root.left), self.minDepth(root.right)) + 1
            else:
                return max(self.minDepth(root.left), self.minDepth(root.right)) + 1
        else:
            return 0

Review

How to Build Artificial Intelligence We Can Trust

本周阅读了 Gary Marcus 和 Ernest Davis 合著的一篇文章《How to Build Artificial Intelligence We Can Trust》,这篇文章在 2019 年 9 月 6 日发表于《纽约时报》。

这篇文章讲述了如何建立一个可以信任的智能系统。文章在部分否定当下一些 AI 研究方法之后提出自己的想法。比如作者指出,现在的机器学习潮流中,研究者并不在乎是否向智能系统传递「时间、空间和因果关系」这三个构成人类常识的基本要素,这也就造成了智能系统无法基于常识而做出理性的判断,他们只能不断地发现数据集中的统计模式(statistical patterns)。

Machines can identify what things are, but not how something’s physical features correspond to its potential causal effects. 机器可以识别一个东西是什么,但不能识别这个东西的物理特征是如何对应于其潜在的因果效应的。

作者还举了一个例子,哲学家 Nick Bostrom 曾想象一个场景:一台强大的人工智能机器被人类要求制作回形针,却不知道什么时候停下来,最终它把整个世界——包括人——也变成了回形针。因此,作者指出,我们现在面临选择:要么继续使用现有的方法,同时采取更严格的监管,否则最终会走向「回形针」的悲惨结局;要么开启新的研究思路,将因果关系、时空关系纳入到机器学习之中,从而让机器产生常识。

Tips

慢碳水饮食中的一些常见问题

慢碳水饮食只适合于希望减脂和控制体脂率的人群,对于健康或无此需求的人群,请谨慎采用。

本教程不构成任何医学指导,请谨慎采用。

上周我们讲了慢碳水饮食中的几个重要的原则,这周我们讲一讲慢碳水饮食中的几个常见的问题。

Q:饮食计划这么严格,我怎么才能坚持下来?

A:可以先尝试一周,一周之后,再结合减重的效果自己评价一下,这种饮食方式真的有这么难坚持吗?至少在我看来,要坚持下来并不那么困难,况且你还有一天的休息日。

Q:需不需要补充微量元素?

A:可以适当地补充一些钾镁钠,因为慢碳水饮食容易导致水分的流失,相应地也会造成电解质的流失。那么补充方式我个人是多吃一些菠菜,一些加钾食盐中也同样含有少许氯化钾和硫酸镁。

Q:不吃水果,洪冻尼呆胶布(真的没问题吗)?

A:就像我在上周的文章中解释过的,从营养学的角度来看,水果中的葡萄糖和果糖相比较比其他任何碳水化合物,都更容易转化为甘油磷酸酯,进而通过肝脏转化为甘油三酯,然后储存为脂肪。况且一周只吃一次水果(欺骗日),难道就不会膳食平衡了吗?这一点完全是多虑。

Q:豆子吃多了放屁怎么办?

A:我一开始也遇到了这个问题,后来我放弃了吃水煮小扁豆,改成吃罐头,并在吃之前把罐头中的汁水倒掉,这种尴尬的现象就好了很多。实在不行你可以加一点珍珠粉(氢氧化钾),会减少豆类中「低聚糖」的含量(屁的来源)。

Q:欺骗日之后重了一大圈怎么办?

A:完全不用担心,这只是身体在欺骗日的饮食中吸收的多余的水分,在 48 小时之内就会代谢掉。

Q:一定要有欺骗日吗?

A:建议有,原因有以下几点:一是经过六天的慢碳水饮食之后,你的身体对糖类绝对是饥渴难耐的,这个时候千万不要硬抗,「欲望像弹簧,你强它更强」,这已经不是单靠意志力就能解决的问题了,不要和你的意志力作斗争,而要想办法驯服它;二是欺骗日的存在不仅可以帮助你减轻身体不适造成的心理压力,还能促进睾酮和生长激素的分泌,而生长激素则会帮助加速脂肪的分解;第三点原因就是,这种「六天严格一天放纵」的饮食方式,相对来说最容易坚持下来,对意志力的要求较小。

Q:我只能吃水煮的食物吗?

A:并不,只要不是过量油炸的,其他烹饪方式完全没有问题,尤其是中餐的爆炒的方式,实际上很适合慢碳水饮食,去年减脂期间我就是简单地用小扁豆替换掉了大米饭,效果还不错。

最后,多喝水。

Share

阅读《人生护城河》的一些感想

最近在阅读「辉哥奇谭」公众号主张辉的《人生护城河》一书,最近状态不是很好,是辉哥的书给了我一些力量。昨天读到了关于「人生定位」的几个问题,对我触动蛮大的,决定分享给大家。

人生定位中有三个重要的问题:

  1. 「要知道自己想要什么」
  2. 「什么才是对的事」
  3. 「做一辈子对的事」

首先,要知道自己想要什么,需要有一个判断标准,就像买东西,比方说我阅读文献的时候喜欢写写画画,但在电脑上做标注又不甚方便,阅读过程中又需要不停地去查找资料,打印出来这一点又不甚方便,所以我理想形态的设备或者说判断标准,就是一个支持手写笔的平板,今年 iPad 出来以后我就下单了,并且装上了神器 MarginNote,将自己阅读文献的效率提高了不少。将这种思维方式拓展到其他方面,形成一套标准,按照标准去选择合适自己的东西,比如合适的工作、格式的机会或者合适的人,如果合适的东西没有出现,就静静等待,如果出现,你就会知道,「这就是,我要的滑板鞋!」,最后实现「内心——标准——行动——结果」的统一。此外,想要的太多等同于不知道想要什么,所以也应学会取舍。「只需明白一点,即你最想要什么,为了你最想要的你可以放弃什么。」

第二点,所谓「对的事」,简单来说就是「边际成本递减」的事(说来惭愧,我还是最近才搞明白「边际成本」这个概念),去克服人类大脑中天生的「得过且过」的倾向。

第三点「做一辈子对的事」,作者类比了炒股中的短线思维和价值投资理念,巴菲特的「滚雪球理论」也适用于人生的其他事情,适用于那些对人生真正重要、需要长期经营的事,例如感情、人情或者一生的事业。「滚雪球理论」中的三个关键词——雪量丰厚、长长的坡道和平缓的坡道,分别对应于潜力、周期和稳定性。所谓「长线思维」,说的就是这个道理。我身边也有不少人,虽然可能不知道巴菲特的这个理念,但也在使用着同样的思路做着类似的事情,我相信我的这些朋友也会在自己的雪道上把雪球越滚越大。

虽然还没看完,但前几章的内容已经对我有很大的启发,非常推荐这本《人生护城河》。

人生护城河

WeChat QRCode