if(m>n递归结束条件
output相应的处理(输出结果)
elsea[m]=0设置状态:0表示不要该物品。
search(m+1); 递归搜索:继续确定下一个物品。
a[m]=1设置状态:1表示要该物品。
search(m+1); 递归搜索:继续确定下一个物品。
搜索排列树的一般模式:
void search(int m)
if(m>n递归结束条件
output相应的处理(输出结果)
elsefor(i=m;i<=n;i++)
swap(m,i); 交换a[m]和a[i]
if()if(canplace(m)) 如果m处可放置。
search(m+1); 搜索下一层。
swap(m,i); 交换a[m]和a[i](换回来)
5.动态规划的基本思想、基本步骤、基本要素是什么。
基本思想:将待求解问题分解成若干子问题,先求解子问题,然后从这些子问题的解得到原问题的解。
基本步骤:①找出最优解的性质,并刻画其结构特征;
递归地定义最优值;
以自底向上的方式计算出最优值;
根据计算最优值时得到的信息,构造最优解。
基本要素:最优子结构性质和子问题重叠问题。
6.什么是最优子结构性质和子问题重叠性质。
最优子结构性质:如果问题的最优解所包含的子问题的解也是最优的,则称该问题具有最优子结构性质(即满足最优化原理)。最优子结构性质为动态规划算法解决问题提供了重要线索。
子问题重叠性质:指在用递归演算法自顶向下对问题进行求解时,每次产生的子问题并不总是新问题,有些子问题会被重复计算多次。动态规划算法正是利用了这种子问题的重叠性质,对每一个子问题只计算一次,然后将其计算结果保存在一个**中,当再次需要计算已经计算过的子问题时,只是在**中简单地查看一下结果,从而获得较高的效率。
7.分治法与动态规划的联系与区别。
联系:基本思想相同,即将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。
区别:适用于动态规划法求解的问题,经分解得到的子问题往往不是相互独立的。分治法子问题被重复计算多次,而动态规划子问题可用一个表来记录已解决子问题的答案,避免了子问题重复计算的问题。
8.动态规划的变形(备忘录方法)与动态规划的联系与区别。
联系:都用**保存已解决的子问题的答案。
区别:备忘录方法的递归方式是自顶向下的,而动态规划的递归方式是自底向上的。
9.分支限界法(广度优先搜索)的基本思想是什么。
分支限界法常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。在分支限界法中,每一个活结点只有一次机会成为扩展节点。活结点一旦成为扩展节点,就一次性产生所有儿子节点。
在这些儿子节点中,导致不可行解或导致非最优解的儿子节点被舍弃,其余儿子节点被加入活结点表中。此后,从活结点表中取下一节点成为当前扩展节点,并重复上述节点扩展过程,这个过程一直持续到找到所需的解或活结点表为空时为止。
10.分支限界法与回溯法的区别。
1.搜索方式不同:分支限界法使用广度优先或最小消耗优先搜索,而回溯法使用深度优先搜索。
2.主要区别:在于它们对当前扩展节点所采用的扩展方式不同。
分支限界法:每个节点只有一次成为活结点的机会。
回溯法:活结点的所有可行子节点被遍历后才被从栈中弹出。
11.搜索算法的一般模式。
搜索算法关键要解决好状态判重的问题:
void search()
open表初始化为空;
起点加入到open表;
while( open表非空 )
取open表中的一个结点u;
从open表中删除u;
for( 对扩展结点u得到的每个新结点vi )
if(vi是目标结点)
输出结果并返回;
if(notused(vi))
vi进入open表;
12.贪心算法的基本思想、基本步骤及基本要素。
基本思想:贪心算法总是做出在当前看来是最好的选择,即贪心算法并不从整体最优上加以考虑,所做的选择只是在某种意义上的局部最优选择,即贪心选择。
基本步骤:①从问题的某个初始解出发;
采用循环语句,当可以向求解目标前进一步时,就根据局部最优策略,得到一个局部最优解缩小问题的规模;
将所有局部最优解综合起来,得到原问题的解。
基本要素:①贪心选择性质:指所求问题的整体最优解可以通过一系列的局部最优的选择,即贪心选择来达到。
贪心选择策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。
最优子结构性质:一个问题的最优解包含其子问题的最优解。
13.贪心算法与动态规划算法联系与区别。
联系:都要求问题具有最优子结构性质,即一个问题的最优解包含其子问题的最优解。
区别:①在动态规划算法中,每步所做的选择往往是依赖于相关子问题的解,因而只有在解出相关子问题后,才能做出选择。而在贪心算法中,仅在当前状态下做出最好的选择,即局部最优选择,然后再去解做出这个选择后产生的相应的子问题。
动态规划算法通常以自底向上方式解各子问题,而贪心算法则通常以自顶向下的方式进行,以迭代的方式做出相机的贪心选择以简化问题规模。
2.设计题(60分---写出核心**或伪**和相关的变量声明)
1.用二分查找算法查找某一个元素**性表中的位置。此问题的输入是待查元素x和线性表l,输出为x在l中的位置或者x不在l中的信息。
最直接的做法就是一个一个地扫描l的所有元素,直到找到x为止。这种方法对于有n个元素的线性表在最坏的情况下需要n次比较。一般来说,若没有其他的附加信息,在有n个元素的线性表中查找一个元素在最坏情况都需要n次比较。
考虑最简单的情况,该线性表为有序表,设其按照主键的递增顺序从小到大排列。
核心伪**:function binarysearch(l,a,b,x)
beginif a>b then return -1
else begin
m=(a+b)div 2;
if x=l[m] then return (m)
else if x>l[m]
then return binarysearch(l,m+1,b,x);
elsereturn binarysearch(l,a,m-1,x);
end;end;
2.请采用快速排序算法为下列数字排序,并写出最终结果(21 25 49 25* 16 08)
快速排序的基本思想:选定一个基准值元素,对带排序的序列进行分割,分割之后的序列一部分小于基准值元素,另一部分大于基准值元素,再对这两个分割好的子序列进行上述的过程。
void swap(int a,int b)
int partition(int arr,int low,int high)
int pivot=arr[low];/采用子序列的第一个元素作为基准元素
while (low < high)
从后往前在后半部分中寻找第一个小于基准元素的元素
while (low < high &&arr[high] >pivot)
high;
将这个比枢纽元素小的元素交换到前半部分
swap(arr[low], arr[high]);
从前往后在前半部分中寻找第一个大于基准元素的元素
while (low
low ;
将这个基准元素大的元素交换到后半部分
swap (arr [low ],arr [high ])
return low ;/返回基准元素所在的位置
void quicksort(int a,int low,int high)
if (low
int n=partition (a ,low ,high );
汽修高级复习最终版
汽车修理工高级理论知识复习题。一 单项选择题。1.b 的基本职能是调节职能。a 社会责任 b 职业道德 c 社会意识 d 社会公德。2.d 是社会主义职业道德的灵魂。a 为社会服务 b 为行业服务 c 为企业服务 d 为人民服务。3.c 标准多元化,代表了不同企业可能具有不同的价值观。a 职业守则 ...
营销管理复习最终版
营销复习提纲。单选题。在产品整体概念中,产品维修属于产品的 d a.核心产品 b.附加产品 c.形式产品 d.以上三者都不对。缓慢撇脂策略的特点是 b a.采取 格,高 费用 b.采取 格,低 费用。c.采取低 高 费用 d.采取低 低 费用。1 对于交换的双方,如果一方比另一方更主动 更积极的寻求...
市政自己总结最终版
一 道路工程填土宽度。1 路基填土宽度应比设计宽度每侧宽500mm。2 垫层宽度与路基宽度相同。3 基层宽度应比面层每侧宽出300 mm 小型机具施工时 500 mm 轨模摊铺机施工时 650 mm 滑模式摊铺机施工时 二 基层。1 沥青道路基层的作用 起主要承重层的作用 应力传递 控制或减少路基不...