【时间】2018.09.18
【题目】算法导论第三版第一章答案
【参考链接】https://ita.skanev.com/
一、练习1.1
练习1.1.1
给出一个需要排序的现实示例或需要计算凸包的真实示例。
排序的真实例子非常简单 - 例如,按字母顺序呈现列表的每个网页都需要对条目进行排序 - 目录,索引或其他任何内容。
我不知道为什么我们需要计算凸包,但维基百科说有很多应用程序。
【补充】:
a)排序:将一次考试中 500名考生的成绩按分数从高到低迕行排名。
b)确定多矩阵相乘的最佳顺序:某实验模型,需要计算 返 17个矩阵的积,根据矩阵乘法的结合律确定计算顺序,以达到计算乘法次数最少的目的。※矩阵乘法的结合律:
c)找出凸壳:木板上钉了 21个钉子,以其中一些钉子为顶点组成的凸多边形可以包含所有 21个钉子,找出使凸多边形达到最小的所有钉子。
练习1.1.2
除了速度之外,在现实环境中可以使用哪些其他效率指标?
内存使用和资源利用(网络,数据库)是很好的答案。
练习1.1.3
选择您之前看到的数据结构,并讨论其优势和局限性。
我们来看看单链表。
优势:
-
它不需要内存中的顺序空间
-
我们可以在任何地方插入新元素
限制:
-
随机访问是O(n)
-
它需要额外的内存用于链接
练习1.1.4
上面给出的最短路径和旅行商问题如何相似?他们有什么不同?
它们是相似的,因为每个人都必须走一个图并在其中找到一条路径。
不同之处在于对解决方案的约束。最短路径仅需要两点之间的路径,而旅行推销员需要在返回第一点的更多点之间的路径。
练习1.1.5
想出一个现实世界的问题,只有最好的解决方案才能解决。然后提出一个“近似”最好的解决方案就足够了。
对目录进行排序是一个问题,只有最佳解决方案才能实现。“近似”排序的目录不会那么有用。
找到一个城市中两点之间的最短路径是一个问题,在那里可以做得足够好。它可能不是最快的方式,但你仍然会到达那里。
二、练习1.2
练习1.2.1
举例说明在应用程序级别需要算法内容的应用程序,并讨论所涉及的算法的功能。
在两个地方之间找到路线时的Google地图。
算法是此用例的重要组成部分,因为路由是用户最关心的。
练习1.2.2
假设我们在同一机器上比较插入排序和合并排序的实现。对于大小为n的输入,插入排序以8n2步运行,而合并排序运行在64 nlgn步骤中。对于哪个值,插入排序优于合并排序?
在n>43处,合并排序优于插入排序。
练习1.2.3
在同一台机器上,运行时间为100 n^2的算法比运行时间为2^n的算法跑得更快,那么n的最小值是多少?
在n>14时,第一个算法运行得更快。
三、思考题
对于下表中的每个函数f(N)和时间t,确定可以在时间t中解决的问题的最大大小n,假设求解该问题的算法需要f(N)微秒。
【PS】指数部分采用的是科学计数法