算法-基础知识

算法

算法是一项技术.

非形式的说,算法就是任何良定义的计算过程,该过程取某个值或值的集合作为输入并产生某个值或值的集合作为输出.这样算法就是把输入转换成输出的计算步骤的一个序列.

也可以把算法看成是用于求解良说明的计算问题的工具.问题陈述说明了期望的输入/输出关系.算法则描述一个特定的计算过程来实现该输入/输出关系.

算法的的某个输入序列称为排序问题的一个实例,一般来说,问题实例由计算该问题解所必需的(满足问题陈述中强加的各种约束)输入组成.

排序算法中,判断哪个算法最好依赖于以下因素:将被排序的项数,这些项已被稍微排序的程度,关于项值的可能限制,计算机的体系结构,以及将使用的存储设备的种类.

若对每个输入实例,算法都以正确的输出停机,则称该算法是正确的,并称正确的算法解决了给定的计算问题.

不正确的算法对某些输入实例可能根本不停机,也可能以不正确的回答停机.与人们的期望的相反,不正确的算法只有其错误率可控有时可能是有用的.但是通常我们只关心正确的算法.

许多有趣的算法问题共有的两个特征:

  1. 存在许多候选解,但绝大多数候选解都没有解决手头的问题.寻找一个真正的解或一个最好的解可能是一个很大的挑战.
  2. 存在实际应用.

数据结构是一种存储和组织数据的方式,旨在便于访问和修改.没有一种单一的数据结构对所有用途有效,所以重要的是知道几种数据结构的优势和局限.

也许在某一天你会遇到一个问题,一时无法很快找到一个已有的算法来解决它.因此我们需要学习一些算法设计与分析的技术,以便我们能够自行设计算法,证明其正确性和理解其效率.

有一些问题,目前还不知道有效的解法,例如NP完全的.

为什么NP完全问题有趣呢?

  • 对于NP完全问题,是否存在有效算法是未知的.
  • NP完全问题集具有一个非凡的性质:如果任何一个NP完全问题存在有效算法,那么所有的NP完全问题都存在有效算法.
  • 有几个NP完全问题类似于一些有着已知有效算法的问题.

"旅行商问题"就是比较著名的NP完全问题,它没有已知的有效算法.然而,在某些假设条件下,我们知道一些有效算法,它们给出一个离最小问题可能解不太远的总距离.需要了解一些这样的"近似算法".

为什么说算法是一种技术呢?假设计算机是无限快的并且计算机存储器是免费的.你还有什么理由来研究算法吗?即使只是因为你还想证明你的解法会终止并以正确的答案终止,那么回答也是肯定的.

计算机也许是快的,但它们不是无限快,存储器也许是廉价的,但不是免费的.所以计算时间是一种有限资源,存储器中的空间也一样.

为求解相同问题而设计的不同算法在效率方面常常具有显著的差别,这些差别可能比由于硬件和软件造成的差别要重要的多.

插入排序为了排序n个项,该算法所花时间大致等于c1n^2,其中c1是一个不依赖于n的常数.也就是说该算法所花费的时间大致与n^2成正比.而归并排序为了排序n个项,该算法所花时间大致等于c2nlgn,其中lgn代表log2n且c2是另一个不依赖于n的常数.与归并序相比,插入排序通常具有一个较小的常数因子,所以c1<c2.虽然对于小的输入规模,插入排序通常比归并排序要快,但是一旦输入规模n变得足够大,归并排序lgn对n的优点将足以补偿常数因子的差别.不管c1比c2小多少,总会存在一个交叉点,超出这个点,归并排序更快.

练习:

  1. 假设我们正比较插入排序与归并排序在相同机器上的实现.对规模为n的输入,插入排序运行8n^2不,而归并排序运行64nlgn步.问对哪些n值,插入排序优于归并排序?
  2. n的最小值为何值时,运行时间为100n^2的一个算法在相同机器上快于运行时间为2^n的另一个算法?

思考:

(运行时间的比较)假设求解问题的算法需要f(n)毫秒,对下表中的每个函数f(n)和时间t.确定可以在时间t内求解的问题的最大规模n.

 1秒钟1分钟1小时1天1月1年1世纪
lgn10^1000      
√n1000^2      
n1000      
nlgn386.255      
n^231      
n^310      
2^n

9

      
n!6      

提示:lgn=1000,√n=100,n=100,nlgn=100,n^2=100,n^3=100,2^n=100,n!=100.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值