您的位置:首页 > 其它

《算法导论》学习笔记: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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法导论
相关文章推荐