L39 思考解决问题
-
本堂课是期末复习课,主要介绍如何思考解决算法问题
-
当遇到一个问题时特别是递归问题时的解决思路
- 首先,我们可能会先想到解决它的固定模板,特别是解决固定型问题比如Tree型,如果固定模板失效,我们需要对问题重新建模
- 在重新建模时,我们需要在最高抽象层面考虑我们需要什么,即使它还没有跟踪或实现
- 当重新建模完成,知道各种我们需要的量或方法时,我们就对需要的量或方法进行跟踪或实现,最终完成任务
- 跟踪 --- 在递归问题中 如果给定函数的参数太少,以致于我们无法跟踪某些量,我们就可以使用 辅助函数
helper拓展参数来跟踪我们需要的量,然后实现helper函数- 使用辅助函数还有个益处,就是在原函数中定义某些量,在辅助函数中将成为全局量,有助于解决问题
-
Designing Functions
- 函数设计,有一本书 介绍函数设计的六个步骤
- 从问题分析到数据定义 --- 确定必须表示的信息以及如何在所选编程语言中表示它。制定数据定义并用示例说明
- 签名,目的陈述,标题 --- 说明函数消耗和产生哪种类型的数据。对函数计算的内容给出一个简洁的回答。定义一个符合签名的存根。
- 功能示例 --- 通过示例了解函数的目的。
- 函数定义 --- 填写函数模板中的空白。利用目的陈述和示例
- 测试 --- 将示例明确为测试,并确保函数通过所有测试。这样做可以发现错误。测试还补充了示例,因为它们在需要时帮助他人阅读和理解定义——对于任何严肃的程序,这种情况都会发生。
-
上述的设计函数的 6 步骤在具体解决问题中就是要明确
- 函数签名 --> 接受的参数各是什么类型、返回什么类型
- 函数目的 --> 函数参数的含义是什么、函数要做什么、函数返回什么
-
我的理解
- 真正解题时,我们先用 解决思路 思考,抽象\建模完成过程,同时用6步骤更细致理解实现函数,完成任务