《算法导论》学习笔记:1.算法在计算中的应用
2018-02-14 17:59
232 查看
一、笔记
1.算法 是任何良定义的计算过程,该过程取某个值或值的集合作为输入,并取某个值或值的集合作为输出。输入问题,输出答案。
2.许多算法问题共同特征:(1)存在许多候选解,但其中大部分候选解都没有解决手头的问题,寻找一个真正的解很难;(2)存在实际应用。
3.数据结构:一种存储和组织数据的方式,旨在便于访问和修改。不同的数据结构各有特点,适用于不同的用途。
二、练习题(欢迎补充与指正)
1.给出现实生活中需要排序的一个例子或需要计算凸壳的一个例子。
【答】(1)排序例子:学校学生成绩排名。
(2)凸壳例子:一个橡皮筋能正好圈住木板上的一堆钉子,求橡皮筋长度。
2.除了速度以外,现实生活中还能用到哪些关于效率的度量。
【答】空间代价;结果的精确度;
3.选择一种你已知的数据结构,讨论其优势和局限。
【答】(1)顺序表:优点:随机存取;缺点:插入删除需移动大量元素,需要连续的存储空间->容易造成空间的浪费
(2)链表:优点:空间分配灵活;缺点:不能随机存取;指针需要额外的空间开销
4.前面给出的最短路径和旅行商问题有哪些相似之处和不同。
【答】相同点:都是求最短路径;不同点:最短路径是求两点之间的最短路径,旅行商问题要求求经过所有点的最短回路。
5.提供一个现实生活中的问题,只有最佳解才行;然后提供另外个近似最佳解就好。
【答】最佳解:求n个数中的最大数;近似解:旅行商问题。
6.给出应用层需要算法内容的应用的一个例子,并讨论涉及的算法的功能。
【答】成绩排序。
7.在相同机器下,出入排序运行8n^2步,归并排序运行64nlgn步,问对于哪些n,插入排序优于归并排序。
【答】当n<8*lgn时。附Python代码:
import math
for n in range(2,100): #lg1为0,所以从2开始
first=8*n*n
second=64*n*math.log(n,2)
if first < second:
print(n)
else:
print("final")
#break8.n的最小值为何值时,运行时间为100n^2的一个算法在相同机器上快于运行时间为2^n的算法?
【答】最小值为14,附Python代码:
for n in range(1,100):
first=100*n*n
second=2**n
if first >= second:
print(n)
else:
print("final")
break
1.算法 是任何良定义的计算过程,该过程取某个值或值的集合作为输入,并取某个值或值的集合作为输出。输入问题,输出答案。
2.许多算法问题共同特征:(1)存在许多候选解,但其中大部分候选解都没有解决手头的问题,寻找一个真正的解很难;(2)存在实际应用。
3.数据结构:一种存储和组织数据的方式,旨在便于访问和修改。不同的数据结构各有特点,适用于不同的用途。
二、练习题(欢迎补充与指正)
1.给出现实生活中需要排序的一个例子或需要计算凸壳的一个例子。
【答】(1)排序例子:学校学生成绩排名。
(2)凸壳例子:一个橡皮筋能正好圈住木板上的一堆钉子,求橡皮筋长度。
2.除了速度以外,现实生活中还能用到哪些关于效率的度量。
【答】空间代价;结果的精确度;
3.选择一种你已知的数据结构,讨论其优势和局限。
【答】(1)顺序表:优点:随机存取;缺点:插入删除需移动大量元素,需要连续的存储空间->容易造成空间的浪费
(2)链表:优点:空间分配灵活;缺点:不能随机存取;指针需要额外的空间开销
4.前面给出的最短路径和旅行商问题有哪些相似之处和不同。
【答】相同点:都是求最短路径;不同点:最短路径是求两点之间的最短路径,旅行商问题要求求经过所有点的最短回路。
5.提供一个现实生活中的问题,只有最佳解才行;然后提供另外个近似最佳解就好。
【答】最佳解:求n个数中的最大数;近似解:旅行商问题。
6.给出应用层需要算法内容的应用的一个例子,并讨论涉及的算法的功能。
【答】成绩排序。
7.在相同机器下,出入排序运行8n^2步,归并排序运行64nlgn步,问对于哪些n,插入排序优于归并排序。
【答】当n<8*lgn时。附Python代码:
import math
for n in range(2,100): #lg1为0,所以从2开始
first=8*n*n
second=64*n*math.log(n,2)
if first < second:
print(n)
else:
print("final")
#break8.n的最小值为何值时,运行时间为100n^2的一个算法在相同机器上快于运行时间为2^n的算法?
【答】最小值为14,附Python代码:
for n in range(1,100):
first=100*n*n
second=2**n
if first >= second:
print(n)
else:
print("final")
break
相关文章推荐
- 算法导论(第三版)第一章 算法在计算过程中的作用
- 算法导论第1章—算法在计算中的作用
- 数据结构—中缀表达式转后缀表达式算法及实现—栈的应用—计算表达式(C++代码实现)(1)
- 算法、应用与计算平台,讯飞百度阿里360的深度学习经
- 《云计算》学习笔记2——Google的云计算原理与应用(GFS和MapReduce)
- 【数据结构与算法】数组应用4:多项式计算Java版
- 《云计算》学习笔记2——Google的云计算原理与应用(GFS和MapReduce)
- 算法——算术表达式计算问题(堆栈典型应用)
- 计算几何算法基础————判断点是否在线段上(另附叉积的重要应用,折线段的拐向判断)
- 算法导论<学习笔记> 第一章 算法在计算中的作用
- 读书笔记:《算法导论》,第1章:算法在计算中的作用
- <算法导论>学习笔记(1)--第1章 算法在计算中的作用
- 算法导论——lec 10 图的基本算法及应用
- 《云计算》学习笔记3——Google的云计算原理与应用(分布式锁服务——Chubby)
- 《云计算》学习笔记4——Google的云计算原理与应用(分布式结构化数据表BigTable)
- 分治算法复杂度计算----算法导论 主定理应用讲解
- 电力产品中谐波计算算法应用与比较
- 分治算法复杂度计算----算法导论 主定理应用讲解
- 《云计算》学习笔记2——Google的云计算原理与应用(GFS和MapReduce)
- 应用各种算法都要分词计算权重