L39 思考解决问题

  • 本堂课是期末复习课,主要介绍如何思考解决算法问题

  • 当遇到一个问题时特别是递归问题时的解决思路

    • 首先,我们可能会先想到解决它的固定模板,特别是解决固定型问题比如Tree型,如果固定模板失效,我们需要对问题重新建模
    • 在重新建模时,我们需要在最高抽象层面考虑我们需要什么,即使它还没有跟踪或实现
    • 当重新建模完成,知道各种我们需要的量或方法时,我们就对需要的量或方法进行跟踪或实现,最终完成任务
    • 跟踪 --- 在递归问题中 如果给定函数的参数太少,以致于我们无法跟踪某些量,我们就可以使用 辅助函数 helper 拓展参数来跟踪我们需要的量,然后实现 helper 函数
      • 使用辅助函数还有个益处,就是在原函数中定义某些量,在辅助函数中将成为全局量,有助于解决问题
  • Designing Functions

    • 函数设计,有一本书 介绍函数设计的六个步骤
    • 从问题分析到数据定义 --- 确定必须表示的信息以及如何在所选编程语言中表示它。制定数据定义并用示例说明
    • 签名,目的陈述,标题 --- 说明函数消耗和产生哪种类型的数据。对函数计算的内容给出一个简洁的回答。定义一个符合签名的存根。
    • 功能示例 --- 通过示例了解函数的目的。
    • 函数定义 --- 填写函数模板中的空白。利用目的陈述和示例
    • 测试 --- 将示例明确为测试,并确保函数通过所有测试。这样做可以发现错误。测试还补充了示例,因为它们在需要时帮助他人阅读和理解定义——对于任何严肃的程序,这种情况都会发生。
  • 上述的设计函数的 6 步骤在具体解决问题中就是要明确

    • 函数签名 --> 接受的参数各是什么类型、返回什么类型
    • 函数目的 --> 函数参数的含义是什么、函数要做什么、函数返回什么
  • 我的理解

    • 真正解题时,我们先用 解决思路 思考,抽象\建模完成过程,同时用6步骤更细致理解实现函数,完成任务

评论