算法简答题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.在对算法进行复杂性分析时,时间复杂度用什么来度量?其间做了什么假定?渐进复杂性指的是什么?精确到什么程度?强调渐进复杂性的意义是什么?
答:○1程序中关键步骤的操作计数。
○2假定每种基本操作所用时间都是一个单位。
○3设T(n)是算法A的复杂性函数。,则。一般说来,算法的渐进复杂性是该算法复杂度
函数的主项,且一般只考虑渐进复杂性的阶。
○4算法的渐进复杂性是该算法复杂度函数的主项,且一般只考虑渐进复杂性的阶。
○5意义:简化算法复杂性分析的方法和步骤。以方便于对各类算法进行分析和比较。
2.陈述算法在最坏情况下的时间复杂度和平均时间复杂度;这两种评估算法复杂性的方法各自有什么实际意义?
答:○1最坏情况下的时间复杂度称最坏时间复杂度。一般不特别说明,讨论的时间复杂度均是最坏情况下的时间复杂度。
意义:最坏情况下的时间复杂度是算法在任何输入实例上运行时间的上界,这就保证了算法的运行时间不会比任何更长。
○2平均时间复杂度是指所有可能的输入实例均以等概率出现的情况下,算法的期望运行时间。
意义:在输入不同的情况下算法的运行时间复杂度可能会发生变化。平均时间复杂度给出了算法的期望运行时间,有助于算法好坏的评价以及在不同算法之间比较时有一个统一标准。
3.归并排序算法和快速排序算法各自强调了那个方面?各自提高效率的策略是什么?
答:○1归并排序在简单插入排序的基础上强调了通过归并减少元素的挪动次数,从而降低运行时间。策略是通过递归和归并减少了元素的挪动这样一个耗时操作的次数。
○2快速排序相比与归并排序强调了通过划分操作来避免“归并”这样的耗时步骤。策略是使用分治法,通过递归划分操作不断将序列划分成两个子序列,其中第一个子序列中的元素都比第二个小(或大)。
4.在连通图无向图的宽度优先搜索树和深度优先搜索树中,哪棵树的最长路径可能会更长些?试说明你的理由。
答:深度。因为深度优先搜索是沿着顶点的邻点一直搜索下去,直到当前被搜索的顶点不再有未被访问的邻点为止,且在此过程中记录的边构成了搜索树。而宽度优先搜索算法访问图中由一顶点可能到达的所有顶点。因此深度搜索树的最长路径里一定包含图中的最长路,而宽度搜
索则不一定包括。因此,在每个顶点邻点均较少的图上两者得到的树最长路径可能差不多,但是在每个顶点邻点较多的图上深度搜索可以产生最长路径更长的搜索树。
5.何谓最优化原理?采用动态规划算法必须满足的条件是什么?动态规划算法是通过什么问题的什么特性提高效率的?比较贪心算法与动态规划算法的异同,它们都有那些优势和劣势?
答:○1一个最优化策略的子策略总是最优的。一个问题满足最优化原理又称其具有最优子结构性质。
○2最优子结构性质,子问题重叠性质是计算模型采用动态规划算法求解的两个基本要素。
○3动态规划算法利用子问题重叠性质,对每一个子问题只计算一次,将其解保存在一个表格中。不同的子问题个数随着输入问题的规模呈多项式增长,因此,动态规划算法通常只需要多项式时间,从而获得较高的解题效率。
○4共通点:动态规划和贪心算法都是一种递推算法,均有局部最优解来推导全局最优解区别:贪心算法中,作出的每步贪心决策都无法改变,每一步的最优解一定包含上一步的最优解,而上一部之前的最优解则不作保留。
动态优化算法,全局最优解中一定包含某个局部最优解,但不一定包含前一个局部最优解,因此需要记录之前的所有最优解。动态规划算法利用子问题重叠性质,对每一个子问题只计算一次,将其解保存在一个表格中。不同的子问题个数随着输入问题的规模呈多项式增长,因此,动态规划算法通常只需要多项式时间,从而获得较高的解题效率。但它需要计算之前所有情况花费,更加耗费空间。
贪心算法所作的选择依赖于以往所作过的选择,但决不依赖于将来的选择,这使得算法在编码和执行过程中都有一定的速度优势。贪心算法是只是找局部最优解,不一定是全局最优解。
6.阐述回溯算法与分枝限界算法的区别和联系,各自强调改善那方面以提高效率,各适合那些问题?
7.确定性图灵机模型与非确定性图灵机模型的主要区别在那里?确定性图灵机模型下算法的时间复杂度和空间复杂度指的是什么?
答:○1二者的区别就在于,确定性图灵机在任一状态下只能做一种运算,而非确定性图灵机可以被想象为在同一时刻能够独立、并行地完成多种运算(表现在转移函数的多值性)。
○2时间复杂性是从开机直至进入停机状态所运行的步数。
○3空间复杂度是从开机直至进入停机状态所需要的线性带的总格子数。
8.什么是多项式时间算法?多项式时间确定性算法与多项式时间非确定性算法的主要区别是什么?
答:○1若存在一个常数C,使得对于所有n>=0,都有|f(n)| <= C*|g(n)|,则称函数f(n)是O(g(n))。
时间复杂度是O(p(n))的算法称为多项式时间算法,这里p(n)是关于n的多项式。
○2区别是:对于所有可能输入,这个算法在确定图灵机上执行后是否能在有限步里停机。
确定性算法可以在有限步里停机,非确定性算法不可以。
9.什么是NP类问题?
答:NP类问题是在确定性图灵机上没有多项式时间算法,但在非确定性图灵机上有多项式时间算法的这一类问题。
-------------------------------------------------------------------------------------------------------------------------------------
2.阐述动态规划算法与贪心算法的区别,它们都有那些优势和劣势?
动态规划算法与贪心算法都要求问题具有最优子结构性质,这是二者的一个共同点。但是对于具有最优子结构的问题应该选择前者还后者来解决?下面通过两个经典的组合优化问题谈谈动态规划算法与贪心算法的主要差异
动态规划法与分治法和贪心法类似,它也是将原问题分解为若干个更小的、相似的子问题,并通过求解子问题产生一个全局最优解。与分治法和贪心法不同之处在于:
①使用贪心法时,当前的选择可能要依赖于已经作出的所有选择,但不依赖于有待于做出的选择和子问题。因此贪心法是自顶向下(即从起点到终点),一步一步地作出贪心选择。当然,如果当前的选择可能要依赖于子问题的解时,则难以通过局部的贪心策略达到全局最优解。
②使用分治法时,由原问题分解出的各子问题通常是相互独立的,即不包含公共的子问题,因此一旦递归地求出各子问题的解后,便可自下而上地将各子问题的解合并成问题的解。如果各子问题不是相互独立的,则分治法要做许多不必要的工作,重复地求解公共的子问题。
③动态规划允许由原问题分解出的子问题之间相互依赖。每一个子问题只求解一次,并将结果保存起来,避免每次碰到此子问题时都要重复计算