导论一直作为“菜谱”使用,还没有很细致地看过,如今决定仔细复习一遍,从现在开始写博客作为笔记。
概念
算法=定义良好的计算过程+输入+输出
习题
1.1-1 给出一个实际的应用例子,其中包含着下列的某种计算问题:排序,确定多矩阵想成的最佳顺序,或者找出凸壳。
之前做过一个项目,检测图片中某个区域的钢筋数目,需要用户在图上点击以划定检测区域(因为要排除其他不想检测的钢筋堆的干扰)。要找到包含用户点击的这几个点的最小凸多边形,就是找出凸壳的问题。
1.1-2 除了运行速度以外,在真是世界问题背景中, 还可以使用哪些效率指标?
机器学习模型的准确率、召回率,软件开发中的运行时资源占用率、程序可维护性等。
1.1-3 选择你原来见过的某种数据结构,讨论下其长处和局限性。
比如哈希表。长处是查询、插入、删除效率都很高。局限性在于空间利用率不高;元素是无序的,无法按固定顺序遍历元素,无法快速找到元素的最值。
1.1-4 上文给出的最短路径问题和旅行商人问题有哪些相似之处?有哪些不同之处?
相似之处:都是在所有可能的路径中找到最短的路径。
不同之处:最短路径问题是寻找起点到终点的最短路径,此外没有要求必须要经过任何额外的节点。旅行商人问题1.起点和终点是同一个节点,路径是环路;2.要求必须经过指定的节点,其复杂度高于最短路径问题。
1.1-5 举出一个现实世界的问题例子,它只能用最佳解决方案来解决。再举出另一个例子,在其中“近似”最优解决也足以解决问题。
只能用最佳方案解决的问题,即不得到最佳方案便无法解决的问题:人已经很饿了,要做一道指定的菜,在各种流程和各流程预计耗时已知的情况下找到最省时间的做菜方案。
近似最优也足以解决的问题:如翻译,将一种语言翻译成另一种语言,意思接近即可。