2014中南大学网络教育课程考试:算法分析与设计复习试题及答案解析
- 格式:doc
- 大小:118.50 KB
- 文档页数:14
《中国法制史》复习资料试题:根据下列案例材料,请分析以下案例体现了汉代司法中的什么原则?这种原则具有什么样的特点?对中国古代司法产生了什么作用?(100分)时有疑狱,曰:甲无子,拾道旁弃儿乙,养之以为子。
及已长,有罪杀人,以状语甲,甲藏匿乙。
甲当何论?仲舒断曰:甲无子,振活养乙,虽非所生,谁与易之。
……春秋之义,父为子隐。
甲宜匿乙而不当坐。
案例来源:《通典》卷六九甲夫乙将船,会海风盛,船没溺流死亡,不得葬。
四月,甲母丙即嫁甲,欲皆何论?或曰,甲夫死未葬,法无许嫁,以私为人妻,当弃世。
议曰:“臣愚以为《春秋》之义,言夫人归于齐,言夫死无男,有更嫁之道也。
妇人无专制擅恣之行,所以为顺,嫁之者妇也,甲又尊者所嫁,无淫行之心,非私为人妻也。
明于决事,皆无罪名,不当坐。
”案例来源:《太平御览·刑法部·决狱》甲父乙与丙争言相斗,丙以佩刀刺乙,甲即以杖击丙,误伤乙,甲当何论?或曰,殴父也,当枭首。
论曰:“臣愚以为父子至亲也,闻其斗,莫不有怵怅之心,扶杖而救之,非所以欲诟父也。
《春秋》之义,许止父病,进药于其父而卒,君子原心,赦而不诛。
甲非律所谓殴父,不当坐。
”案例来源:《太平御览·刑法部·决狱》案例解读案例(1)乙与丙争吵打架,丙用佩刀刺乙,乙的儿子甲(见此情况)用棍子打丙,却误伤其父。
对甲应如何处理?有人说甲应该因殴父论罪。
董仲舒认为:父子是至亲,儿子看见别人与父亲打架十分担心,(在情急之下)拿着棍子去帮忙,他并非有意要伤到父亲。
《春秋》大义中有许止进药的故事,许止的父亲病了,许止给父亲喂药,父亲却死了。
审案的君子原心定罪,赦免了许止死罪。
甲并非法律上所谓殴父,不应定罪处罚。
案例(2)甲生了儿子乙,却将其送给丙收养,乙由丙抚养长大成人。
有一天,甲因为酒色醉了,对乙说:“你是我的儿子。
”乙很生气,用棍子打了甲二十下。
甲因为乙是他亲生,咽不下这口气,就去县官那里告乙殴父。
算法分析与设计习题集基础篇1、算法有哪些特点?它有哪些特征?它和程序的主要区别是什么?特点:就是一组有穷的规则,它规定了解决某一特定类型问题的一系列运算〔书上定义〕特征:输入、输出、有穷性、明确性、有效性区别:算法是完成特定任务的有限指令集。
程序是用电脑语言编写的写成特定任务的指令序列。
2、算法的时间复杂度指的是什么?如何表示?算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。
这是一个关于代表算法输入值的字符串的长度的函数。
时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。
〔百度百科〕3、算法的空间复杂度指的是什么?如何表示?一个程序的空间复杂度是指运行完一个程序所需内存的大小。
利用程序的空间复杂度,可以对程序的运行所需要的内存多少有个预先估计。
一个程序执行时除了需要存储空间和存储本身所使用的指令、常数、变量和输入数据外,还需要一些对数据进行操作的工作单元和存储一些为现实计算所需信息的辅助空间。
程序执行时所需存储空间包括以下两部分。
〔1〕固定部分。
这部分空间的大小与输入/输出的数据的个数多少、数值无关。
主要包括指令空间〔即代码空间〕、数据空间〔常量、简单变量〕等所占的空间。
这部分属于静态空间。
〔2〕可变空间,这部分空间的主要包括动态分配的空间,以及递归栈所需的空间等。
这部分的空间大小与算法有关。
一个算法所需的存储空间用f(n)表示。
S(n)=O(f(n))其中n为问题的规模,S(n)表示空间复杂度。
答:最坏情况时间复杂性:最好情况时间复杂性::I*是DN中使T(N, I*)到达Tmax(N)的合法输入;P(I)是在算法的应用中出现输入I的概率10、限界函数的功能是什么?答:用限界函数剪去得不到最优解的子树11、设某一函数定义如下:编写一个递归函数计算给定x的M〔x〕的值。
本函数是一个递归函数,其递归出口是:M〔x〕= x-10x>100递归体是:M〔M〔x+11〕〕x ≤100实现此题功能的递归函数如下:intm ( intx ){ int y;if ( x>100 )return(x-10 );else {y =m(x+11) ;return (m (y ));}procedure M(x)if x>100 thenreturn(x-10)elsereturn M(M(x+11))endifend M12、已知一个顺序表中的元素按元素值非递减有序排列,编写一个函数删除表中多余的值相同的元素。
《中国法制史》复习题及参考答案试题:根据下列案例材料,请分析以下案例体现了汉代司法中的什么原则?这种原则具有什么样的特点?对中国古代司法产生了什么作用?(100分)时有疑狱,曰:甲无子,拾道旁弃儿乙,养之以为子。
及已长,有罪杀人,以状语甲,甲藏匿乙。
甲当何论?仲舒断曰:甲无子,振活养乙,虽非所生,谁与易之。
……春秋之义,父为子隐。
甲宜匿乙而不当坐。
案例来源:《通典》卷六九甲夫乙将船,会海风盛,船没溺流死亡,不得葬。
四月,甲母丙即嫁甲,欲皆何论?或曰,甲夫死未葬,法无许嫁,以私为人妻,当弃世。
议曰:“臣愚以为《春秋》之义,言夫人归于齐,言夫死无男,有更嫁之道也。
妇人无专制擅恣之行,所以为顺,嫁之者妇也,甲又尊者所嫁,无淫行之心,非私为人妻也。
明于决事,皆无罪名,不当坐。
”案例来源:《太平御览·刑法部·决狱》甲父乙与丙争言相斗,丙以佩刀刺乙,甲即以杖击丙,误伤乙,甲当何论?或曰,殴父也,当枭首。
论曰:“臣愚以为父子至亲也,闻其斗,莫不有怵怅之心,扶杖而救之,非所以欲诟父也。
《春秋》之义,许止父病,进药于其父而卒,君子原心,赦而不诛。
甲非律所谓殴父,不当坐。
”案例来源:《太平御览·刑法部·决狱》答:以下案例体现了汉代司法中的什么原则?1.亲亲得相首匿,依据儒家“亲亲相隐”作为判案的原则,只是扩大了该原则的适用范围,从自然血亲扩大到拟制血亲.这种原则具有什么样的特点?2. 该妇人的丈夫是淹死在大海的,尸体都无法寻找,那么无论过多久都无法安葬。
而且该妇人改嫁又是奉其母之命,若机械地适用汉律的规定而将该妇人处死,确实冤枉,有悖常理。
董仲舒首先从《春秋》中找到儒家的精神:夫死无男,有更嫁之道也。
且甲又尊命所嫁,无淫行之心,非私为人妻也。
最后判决:皆不当坐罪。
儿子为帮父亲打架,误伤了父亲,儿子的本意是为了救父亲,如果机械地引用汉律的“殴父者当枭首”规定处理,将儿子处死,太有乖情理。
1.一个算法就是一个有穷规矩的聚集,个中之规矩划定懂得决某一特别类型问题的一系列运算,此外,算法还应具有以下五个重要特点:_________,________,________,____ ______,__________.,权衡一个算法利害的尺度是______________________.3.某一问题可用动态计划算法求解的明显特点是____________________________________.4.若序列X={B,C,A,D,B,C,D},Y={A,C,B,A,B,D,C,D},请给出序列X和Y的一个最长公共子序列_____________________________.5.用回溯法解问题时,应明白界说问题的解空间,问题的解空间至少应包含___________.6.动态计划算法的根本思惟是将待求解问题分化成若干____________,先求解___________,然后从这些____________的解得到原问题的解.7.以深度优先方法体系搜刮问题解的算法称为_____________.8.0-1背包问题的回溯算法所需的盘算时光为_____________,用动态计划算法所需的盘算时光为____________.9.动态计划算法的两个根本要素是___________和___________.10.二分搜刮算法是应用_______________实现的算法.二.分解题(50分)1.写出设计动态计划算法的重要步调.2.流水功课调剂问题的johnson算法的思惟.3.若n=4,在机械M1和M2上加工功课i所需的时光分离为a i和b i,且(a1,a2,a3,a4)=(4,5,12,10),(b1,b2,b3,b4)=(8,2,15,9)求4个功课的最优调剂计划,并盘算最优值.4.应用回溯法解0/1背包问题:n=3,C=9,V={6,10,3},W={3,4,4},其解空间有长度为3的0-1向量构成,请求用一棵完整二叉树暗示其解空间(从根动身,左1右0),并画出其解空间树,盘算其最优值及最优解.5.设S={X1,X2,···,X n}是严厉递增的有序集,应用二叉树的结点来存储S中的元素,在暗示S的二叉搜刮树中搜刮一个元素X,返回的成果有两种情况,(1)在二叉搜刮树的内结点中找到X=X i,其概率为b i.(2)在二叉搜刮树的叶结点中肯定X∈(X i,X i+1),其概率为a i.在暗示S的二叉搜刮树T中,设存储元素X i的结点深度为C i;叶结点(X i,X i+1)的结点深度为d i,则二叉搜刮树T的平均路长p为若干?假设二叉搜刮树T[i][j]={X i,X i+1,···,X j}最优值为m[i][j],W[i][j]=a i-1+b i+···+b j+a j,则m[i][j](1<=i<=j<=n)递归关系表达式为什么?6.描写0-1背包问题.三.简答题(30分)1.流水功课调剂中,已知有n个功课,机械M1和M2上加工功课i 所需的时光分离为a i和b i,请写出流水功课调剂问题的johnson轨则中对a i和b i的排序算法.(函数名可写为sort(s,n))2.最优二叉搜刮树问题的动态计划算法(设函数名binarysearchtree))答案:一.填空1.肯定性有穷性可行性0个或多个输入一个或多个输出2.时光庞杂性空间庞杂性时光庞杂度高下具有最优子构造性质4.{BABCD}或{CABCD}或{CADCD}5.一个(最优)解6.子问题子问题子问题7.回溯法8. o(n*2n) o(min{nc,2n})9.最优子构造重叠子问题10.动态计划法二.分解题1.①问题具有最优子构造性质;②构造最优值的递归关系表达式;③最优值的算法描写;④构造最优解;2.①令N1={i|a i<b i},N2={i|a i>=b i};②将N1中功课按a i的非减序排序得到N1’,将N2中功课按b i的非增序排序得到N2’;③N1’中功课接N2’中功课就构成了知足Johnson轨则的最优调剂.3.步调为:N1={1,3},N2={2,4};N 1’={1,3},N 2’={4,2}; 最优值为:384.解空间为{(0,0,0),(0,1,0),(0,0,1),(1,0,0),(0,1,1),(1,0,1), (1,1,0),(1,1,1)}. 解空间树为:该问题的最优值为:16 最优解为:(1,1,0) 5.二叉树T 的平均路长P=∑=+n i 1Ci)(1*bi +∑=nj 0dj *aj{m[i][j]=0(i>j)6.已知一个背包的容量为C,有n 件物品,物品i 的重量为W i ,价值为V i ,求应若何选择装入背包中的物品,使得装入背包中物品的总价值最大. 三.简答题m[i][j]=W[i][j]+min{m[i][k]+m[k+1][j]} (1<=i<=j<=n,m[i][i-1]=0)1.void sort(flowjope s[],int n){int i,k,j,l;for(i=1;i<=n-1;i++)//-----选择排序{k=i;while(k<=n&&s[k].tag!=0) k++;if(k>n) break;//-----没有a i,跳出else{for(j=k+1;j<=n;j++)if(s[j].tag==0)if(s[k].a>s[j].a) k=j;swap(s[i].index,s[k].index);swap(s[i].tag,s[k].tag); } }l=i;//-----记下当前第一个b i的下标for(i=l;i<=n-1;i++){k=i;for(j=k+1;j<=n;j++)if(s[k].b<s[j].b) k=j;swap(s[i].index,s[k].index); //-----只移动index和tag swap(s[i].tag,s[k].tag); }}2.void binarysearchtree(int a[],int b[],int n,int **m,int**s,int **w){int i,j,k,t,l;for(i=1;i<=n+1;i++){ w[i][i-1]=a[i-1];m[i][i-1]=0;}for(l=0;l<=n-1;l++)//----l是下标j-i的差for(i=1;i<=n-l;i++){j=i+l;w[i][j]=w[i][j-1]+a[j]+b[j];m[i][j]=m[i][i-1]+m[i+1][j]+w[i][j];s[i][j]=i;for(k=i+1;k<=j;k++){ t=m[i][k-1]+m[k+1][j]+w[i][j];if(t<m[i][j]){m[i][j]=t;s[i][j]=k;}}}}一、填空题(本题15分,每小题1分)1、算法就是一组有穷的,它们划定懂得决某一特定类型问题的 .2、在进行问题的盘算庞杂性剖析之前,起首必须树立求解问题所用的盘算模子.3个根本盘算模子是...3、算法的庞杂性是的器量,是评价算法好坏的重要根据.4、盘算机的资本最重要的是和资本.因而,算法的庞杂性有和之分.5、f(n)= 6×2n+n2,f(n)的渐进性态f(n)= O( )6、贪婪算法老是做出在当前看来的选择.也就是说贪婪算法其实不从整体最优斟酌,它所做出的选择只是在某种意义上的. 7、很多可以用贪婪算法求解的问题一般具有2个重要的性质:性质和性质.二.简答题(本题25分,每小题5分)1、简略描写分治法的根本思惟.2、简述动态计划办法所应用的最优化道理.3、何谓最优子构造性质?4、简略描写回溯法根本思惟.5、何谓P.NP.NPC问题三.算法填空(本题20分,每小题5分)1.n后问题回溯算法(1)用二维数组A[N][N]存储皇后地位,若第i行第j列放有皇后,则A[i][j]为非0值,不然值为0.(2)分离用一维数组M[N].L[2*N-1].R[2*N-1]暗示竖列.左斜线.右斜线是否放有棋子,有则值为1,不然值为0.for(j=0;j<N;j++)if( 1 ) /*安然检讨*/{ A[i][j]=i+1; /*放皇后*/2 ;if(i==N-1)输出成果;else 3 ;; /*试探下一行*/4 ; /*去皇后*/5 ;;}2.数塔问题.有形如下图所示的数塔,从顶部动身,在每一结点可以选择向左走或是向右走,一路走到底层,请求找出一条路径,使路径上的值最大.for(r=n-2;r>=0;r--) //自底向上递归盘算for(c=0; 1 ;c++)if( t[r+1][c]>t[r+1][c+1]) 2 ;else 3 ;3.Hanoi算法Hanoi(n,a,b,c)if (n==1) 1 ;else{ 2 ;3 ;Hanoi(n-1,b, a, c);}4.Dijkstra算法求单源最短路径d[u]:s到u的距离 p[u]:记载前一节点信息Init-single-source(G,s)for each vertex v∈V[G]do { d[v]=∞; 1 }d[s]=0Relax(u,v,w)if d[v]>d[u]+w(u,v)then { d[v]=d[u]+w[u,v];2}dijkstra(G,w,s)1. Init-single-source(G,s)2. S=Φ3.Q=V[G]4.while Q<> Φdo u=min(Q)S=S∪{u}for each vertex 3do4四.算法懂得题(本题10分)根据优先队列式分支限界法,求下图中从v1点到v9点的单源最短路径,请画出求得最优解的解空间树.请求中央被舍弃的结点用×标识表记标帜,获得中央解的结点用单圆圈○框起,最优解用双圆圈◎框起.五.算法懂得题(本题5分)设有n=2k个运发动要进行轮回赛,现设计一个知足以下请求的比赛日程表:①每个选手必须与其他n-1名选手比赛各一次;②每个选手一天至多只能赛一次;③轮回赛要在最短时光内完成.(1)假如n=2k,轮回赛起码须要进行几天;(2)当n=23=8时,请画出轮回赛日程表.六.算法设计题(本题15分)分离用贪婪算法.动态计划法.回溯法设计0-1背包问题.请求:解释所应用的算法计谋;写出算法实现的重要步调;剖析算法的时光.七.算法设计题(本题10分)经由过程键盘输入一个高精度的正整数n(n的有用位数≤240),去失落个中随意率性s个数字后,剩下的数字按原阁下次序将构成一个新的正整数.编程对给定的n 和s,查找一种计划,使得剩下的数字构成的新数最小.【样例输入】178543S=4【样例输出】13答案:一.填空题(本题15分,每小题1分)1.规矩一系列运算2. 随机存取机RAM(Random Access Machine);随机存取存储程序机RASP(Random Access Stored Program Machine);图灵机(Turing Machine)3. 算法效力4. 时光.空间.时光庞杂度. 空间庞杂度5.2n6.最好局部最优选择7. 贪婪选择最优子构造二.简答题(本题25分,每小题5分)6、分治法的根本思惟是将一个范围为n的问题分化为k个范围较小的子问题,这些子问题互相自力且与原问题雷同;对这k 个子问题分离求解.假如子问题的范围仍然不敷小,则再划分为k个子问题,如斯递归的进行下去,直到问题范围足够小,很轻易求出其解为止;将求出的小范围的问题的解归并为一个更大范围的问题的解,自底向上慢慢求出本来问题的解.7、“最优化道理”用数学化的说话来描写:假设为懂得决某一优化问题,须要依次作出n个决议计划D1,D2,…,Dn,如若这个决议计划序列是最优的,对于任何一个整数k,1 < k < n,不管前面k个决议计划是如何的,今后的最优决议计划只取决于由前面决议计划所肯定的当前状况,即今后的决议计划Dk+1,Dk+2,…,Dn也是最优的.8、某个问题的最优解包含着其子问题的最优解.这种性质称为最优子构造性质.9、回溯法的根本思惟是在一棵含有问题全体可能解的状况空间树长进行深度优先搜刮,解为叶子结点.搜刮进程中,每到达一个结点时,则断定该结点为根的子树是否含有问题的解,假如可以肯定该子树中不含有问题的解,则废弃对该子树的搜刮,退回到上层父结点,持续下一步深度优先搜刮进程.在回溯法中,其实不是先构造出整棵状况空间树,再进行搜刮,而是在搜刮进程,慢慢构造出状况空间树,即边搜刮,边构造.10、P(Polynomial问题):也等于多项式庞杂程度的问题.NP就是Non-deterministic Polynomial的问题,也等于多项式庞杂程度的非肯定性问题.NPC(NP Complete)问题,这种问题只有把解域里面的所有可能都穷举了之后才干得出答案,如许的问题是NP里面最难的问题,这种问题就是NPC问题.三.算法填空(本题20分,每小题5分)1.n后问题回溯算法(1) !M[j]&&!L[i+j]&&!R[i-j+N](2) M[j]=L[i+j]=R[i-j+N]=1;(3) try(i+1,M,L,R,A)(4) A[i][j]=0(5) M[j]=L[i+j]=R[i-j+N]=02.数塔问题.(1)c<=r(2)t[r][c]+=t[r+1][c](3)t[r][c]+=t[r+1][c+1]3.Hanoi算法(1)move(a,c)(2)Hanoi(n-1, a, c , b)(3)Move(a,c)4.(1)p[v]=NIL(2)p[v]=u(3) v∈adj[u](4)Relax(u,v,w)四.算法懂得题(本题10分)五.(1)8天(2分);(2)当n=23=8时,轮回赛日程表(3分).六.算法设计题(本题15分)1 2 3 4 5 6 7 82 1 43 6 5 8 73 4 1 2 7 8 5 64 3 2 1 8 7 6 55 6 7 8 1 2 3 46 5 87 2 1 4 37 8 5 6 3 4 1 28 7 6 5 4 3 2 1(1)贪婪算法 O(nlog(n))➢起首盘算每种物品单位重量的价值Vi/Wi,然后,依贪婪选择计谋,将尽可能多的单位重量价值最高的物品装入背包.若将这种物品全体装入背包后,背包内的物品总重量未超出C,则选择单位重量价值次高的物品并尽可能多地装入背包.依此计谋一向地进行下去,直到背包装满为止.➢具体算法可描写如下:void Knapsack(int n,float M,float v[],float w[],float x[]){Sort(n,v,w);int i;for (i=1;i<=n;i++) x[i]=0;float c=M;for (i=1;i<=n;i++){if (w[i]>c) break;x[i]=1;c-=w[i];}if (i<=n) x[i]=c/w[i];}(2)动态计划法 O(nc)m(i,j)是背包涵量为j,可选择物品为i,i+1,…,n时0-1背包问题的最优值.由0-1背包问题的最优子构造性质,可以树立盘算m(i,j)的递归式如下.void KnapSack(int v[],int w[],int c,int n,int m[][11]) {int jMax=min(w[n]-1,c);for (j=0;j<=jMax;j++)/*m(n,j)=0 0=<j<w[n]*/m[n][j]=0;for (j=w[n];j<=c;j++)/*m(n,j)=v[n] j>=w[n]*/m[n][j]=v[n];for (i=n-1;i>1;i--){ int jMax=min(w[i]-1,c);for (j=0;j<=jMax;j++)/*m(i,j)=m(i+1,j) 0=<j<w[i]*/m[i][j]=m[i+1][j];for (j=w[i];j<=c;j++)/*m(n,j)=v[n] j>=w[n]*/m[i][j]=max(m[i+1][j],m[i+1][j-w[i]]+v[i]);}m[1][c]=m[2][c];if(c>=w[1])m[1][c]=max(m[1][c],m[2][c-w[1]]+v[1]);}(3)回溯法 O(2n)cw:当前重量 cp:当前价值 bestp:当前最优值void backtrack(int i)//回溯法i初值1{ if(i > n) //到达叶结点{ bestp = cp; return;}if(cw + w[i] <= c) //搜刮左子树{ cw += w[i];cp += p[i];backtrack(i+1);cw -= w[i];cp -= p[i];}if(Bound(i+1)>bestp)//搜刮右子树backtrack(i+1);}七.算法设计题(本题10分)为了尽可能地逼近目的,我们拔取的贪婪计谋为:每一步老是选择一个使剩下的数最小的数字删去,即按高位到低位的次序搜刮,若列位数字递增,则删除最后一个数字,不然删除第一个递减区间的首字符.然后回到串首,按上述规矩再删除下一个数字.反复以长进程s次,剩下的数字串等于问题的解了.具体算法如下:输入s, n;while( s > 0 ){ i=1; //从串首开端找while (i < length(n)) && (n[i]<n[i+1]){i++;}delete(n,i,1); //删除字符串n的第i个字符s--;}while (length(n)>1)&& (n[1]=‘0’)delete(n,1,1); //删去串首可能产生的无用零输出n;。
算法分析与设计(答案)一:二分查找的递归实现算法import java.util.Arrays;import java.util.Scanner;public class BinSearch {public static int binsearch(int[]a,int start,int stop,int b){if(start>stop)return -1;int i=(start+stop)/2;if(a[i]==b)return i;if(a[i]>b)return binsearch(a,start,i-1,b);return binsearch(a,i+1,stop,b);}/***@param args*/public static void main(String[] args) {// TODO Auto-generated method stubScanner sc=new Scanner(System.in);int n=sc.nextInt();int a[]=new int [n];System.out.println("输入数组元素");for(int i=0;i<n;i++){a[i]=sc.nextInt();}Arrays.sort(a);System.out.println("排序后的数组为");for(int i=0;i<a.length;i++){System.out.print(a[i]+" ");}System.out.println();System.out.println("输入要查找的数");int b=sc.nextInt();int x=binsearch(a,0,n-1,b);if(x==-1){System.out.println(b+"不在数组中,请输入另一个数");b=sc.nextInt();x=binsearch(a,0,n-1,b);}System.out.println(b+"在数组中的第"+(x+1)+"个位置");}}二:Ackerman函数的递归实现算法import java.util.Scanner;public class Test2 {private static int akm(int n, int m) {// 递归设计int r, g;if (n == 1 && m == 0)r = 2;else if (n == 0 && m >= 0)r = 1;else if (m == 1)r = n * 2;else if (m == 2)r = (int) Math.pow(2, n);else if (m == 0 && n >= 2)r = n + 2;else {g = akm(n-1, m);r = akm(g, m-1);// 两次连着递归}return r;}public static void main(String[] args) {try {System.out.println("请输入1个大于等于0的整数:");Scanner sc = new Scanner(System.in);int n = sc.nextInt();System.out.println("请再输入1个大于等于0的整数:");int m = sc.nextInt();System.out.println(akm(n, m));} catch (Exception e) {}}}三:全排列的递归实现算法import java.util.Scanner;public class AllSort{//全排列public static void main(String[] args) {Scanner sc=new Scanner(System.in);System.out.println("输入需要全排列的元素个数");int n=(char) sc.nextInt();int buf[]=new int [n];System.out.println("请依次输入每一个元素");for(int i=0;i<n;i++){buf[i]=sc.nextInt();}perm(buf,0,buf.length-1);}public static void perm(int[] buf,int start,int end){ if(start==end){//当只要求对数组中一个元素进行全排列时,只要就按该数组输出即可(特殊情况)for(int i=0;i<=end;i++){System.out.print(buf[i]);}System.out.println();}else{//多个字母全排列(普遍情况)for(int i=start;i<=end;i++){//(让指针start分别指向每一个数)int temp=buf[start];//交换数组第一个元素与后续的元素buf[start]=buf[i];buf[i]=temp;perm(buf,start+1,end);//后续元素递归全排列temp=buf[start];//将交换后的数组还原buf[start]=buf[i];buf[i]=temp;}}}}四:快速排序的递归实现算法import java.util.Scanner;public class QuickSort {public static int []a;public static void quicksort(int p,int r){if(p<r){int q=partition(p,r);quicksort(p,q-1);quicksort(q+1,r);}}public static int partition(int p,int r){int i=p,j=r+1;int x=a[p];while(true){while(a[++i]<x&&i<r);while(a[--j]>x);if(i>=j)break;int temp=a[i];a[i]=a[j];a[j]=temp;}a[p]=a[j];a[j]=x;return j;}/***@param args*/public static void main(String[] args) {// TODO Auto-generated method stubScanner sc=new Scanner(System.in);System.out.println("输入要排序的数组长度");int n=sc.nextInt();a=new int[n];System.out.println("输入"+n+"个元素");for(int i=0;i<n;i++)a[i]=sc.nextInt();quicksort(0,n-1);System.out.println("排序后的数组为");for(int j=0;j<a.length;j++)System.out.print(a[j]+" ");}}五:整数划分的递归实现算法import java.io.IOException;import java.util.*;public class ZhengshuHuafen {public static int a=0 ;public static int Devide(int input, int base, int []pData, int index){if(input<1||base<1)return 0;if(input==1||base==1){if(input==1){pData[index] = input;print(pData, index+1);}else{for(int k=0; k<input; k++){pData[index++] = base;}print(pData,index);}return 1;}if(input==base){pData[index] = base;print(pData,index+1);int temp = Devide(input,base-1,pData,index);return 1 + temp;}if(input<base){int temp = Devide(input,input,pData,index);return temp;}else{pData[index] = base;int temp1 = Devide(input-base,base,pData,index+1); int temp2 = Devide(input,base-1,pData,index);return temp1 + temp2;}}public static void print(int []pData ,int index){String s = new String();for(int i = 0 ; i < index - 1 ; i++){System.out.print(pData[i]+"+");s += String.valueOf(pData[i]);s += "+"; }System.out.println(pData[index-1]);s += String.valueOf(pData[index-1]) +"\r\n";}public static void main(String[] args) {int n ;Scanner in = new Scanner(System.in) ;System.out.print("请输入一个整数") ;n = in.nextInt() ;System.out.println("你刚才输入的数为"+n) ;int []pdata = new int[n] ;a=Devide(n, n, pdata, 0) ;System.out.println(""+a) ;}}六:合并排序的递归实现算法import java.util.Scanner;public class mergeSort {public static int []b;public static void mergeSort1(int []a,int left,int right) {if(left<right){int i=(left+right)/2;mergeSort1(a,left,i);mergeSort1(a,i+1,right);merge(a,b,left,i,right);copy(a,b,left,right);}}public static void merge(int []c,int []d,int l,int m,int r) {int i=l;int j=m+1;int k=l;while((i<=m)&&(j<=r))if(c[i]<=c[j])d[k++]=c[i++];else d[k++]=c[j++];if(i>m)for(int q=j;q<=r;q++)d[k++]=c[q];elsefor(int q=i;q<=m;q++)d[k++]=c[q];}public static void copy (int[]c,int[]b,int left,int right) {for(int i=left;i<=right;i++){c[i]=b[i];}}public static void main(String[]args){Scanner sc=new Scanner(System.in);int n=sc.nextInt();b=new int[n];int []a;a=new int [n];for(int i=0;i<n;i++){a[i]=sc.nextInt();}mergeSort.mergeSort1(a,0,n-1);for(int j=0;j<=n-1;j++)System.out.print(a[j]+" ");}}。
《社区管理》复习资料试题:一、案例分析题:(30分)深圳市XX区从1999年开始,先后通过三次改革创新,从居委会的”议行合一”的旧体制逐渐向以”议行分设”新理念构建的社区组织体制过渡,让曾经承担着许多政府各职能部门下沉来的大量行政事务的居委会逐渐还位于真正的居民自治组织。
第一次创新在1999年,XX区利用居委会换届选举之机,将居委会与农村城市化之后的集体经济组织分离,独立运作,启动了居委会社区化、城市化的程序。
第二次创新在2002年,按照”议行分设”理念,XX区初试社区管理体制改革,由民主选举产生的社区居委会,作为一个对社区公共事务进行议事、决策、监督的机构,在社区居委会下面设立社区工作站和社区服务站共同执行社区居委会的决策,使社区居委会的两种角色、两种责任进行初步分化和规范,形成”一会(合)两站”的社区管理模式。
但由于居委会与社区工作站两块牌子一套班子,居委会仍陷入行政事务中。
第三次创新在2005年,在原有”一会(合)两站”模式基础上,居委会管理体制实行”议行分设”,17个社区居民委员会全部由选民直接提名产生。
标志着深圳XX区成为一个完全的社区自治组织。
”议”指由居委会代表社区居民意见和利益进行议事、决策,不再承担政府行政工作。
”行”指执行,社区工作站从居委会中剥离,执行街道办事处交办的政府行政工作;社区服务站执行居委会的某些决议,并向社区居民提供服务。
社区工作站隶属于街道办事处,承担政府交办的工作,由政府雇员组成。
协助居委会处理居民事务,接受居委会协调、监督和评议。
社区服务站向社区居民提供社会公共服务,由社区居委会聘任工作人员。
阅读以上材料,请回答:(1)结合案例,请分析居委会在社区管理中的作用。
(10分)(2)分析案例中XX区管理模式可能出现的问题。
(20分)二、请到你所在的社区进行一次实地调查,完成一个社区民主选举调查报告。
主题是关于”XX社区基层民主选举状况调查”,结合所学知识,调查社区居民如何参与民主选举的;其具体流程和结果;目前存在的问题和取得的成就;需要用具体事例说明,并根据自己所学知识提出解决方法。
算法分析与设计教程习题解答第1章 算法引论1. 解:算法是一组有穷的规则,它规定了解决某一特定类型问题的一系列计算方法。
频率计数是指计算机执行程序中的某一条语句的执行次数。
多项式时间算法是指可用多项式函数对某算法进行计算时间限界的算法。
指数时间算法是指某算法的计算时间只能使用指数函数限界的算法。
2. 解:算法分析的目的是使算法设计者知道为完成一项任务所设计的算法的优劣,进而促使人们想方设法地设计出一些效率更高效的算法,以便达到少花钱、多办事、办好事的经济效果。
3. 解:事前分析是指求出某个算法的一个时间限界函数(它是一些有关参数的函数);事后测试指收集计算机对于某个算法的执行时间和占用空间的统计资料。
4. 解:评价一个算法应从事前分析和事后测试这两个阶段进行,事前分析主要应从时间复杂度和空间复杂度这两个维度进行分析;事后测试主要应对所评价的算法作时空性能分布图。
5. 解:①n=11; ②n=12; ③n=982; ④n=39。
第2章 递归算法与分治算法1. 解:递归算法是将归纳法的思想应用于算法设计之中,递归算法充分地利用了计算机系统内部机能,自动实现调用过程中对于相关且必要的信息的保存与恢复;分治算法是把一个问题划分为一个或多个子问题,每个子问题与原问题具有完全相同的解决思路,进而可以按照递归的思路进行求解。
2. 解:通过分治算法的一般设计步骤进行说明。
3. 解:int fibonacci(int n) {if(n<=1) return 1;return fibonacci(n-1)+fibonacci(n-2); }4. 解:void hanoi(int n,int a,int b,int c) {if(n>0) {hanoi(n-1,a,c,b); move(a,b);hanoi(n-1,c,b,a); } } 5. 解:①22*2)(−−=n n f n② )log *()(n n n f O =6. 解:算法略。
2014中南大学网络教育课程考试:算法分析与设计复习试题及答案解析算法分析与设计一、简要回答下列问题:1.算法重要特性是什么?2.算法分析的目的是什么?3.算法的时间复杂性与问题的什么因素相关?4.算法的渐进时间复杂性的含义?5.最坏情况下的时间复杂性和平均时间复杂性有什么不同?6.简述二分检索(折半查找)算法的基本过程。
7.背包问题的目标函数和贪心算法最优化量度相同吗?8.采用回溯法求解的问题,其解如何表示?有什么规定?9.回溯法的搜索特点是什么?10.n皇后问题回溯算法的判别函数place的基本流程是什么?11.为什么用分治法设计的算法一般有递归调用?12.为什么要分析最坏情况下的算法时间复杂性?13.简述渐进时间复杂性上界的定义。
14.二分检索算法最多的比较次数?15.快速排序算法最坏情况下需要多少次比较运算?16.贪心算法的基本思想?17.回溯法的解(x1,x2,……x n)的隐约束一般指什么?18.阐述归并排序的分治思路。
19.快速排序的基本思想是什么。
20.什么是直接递归和间接递归?消除递归一般要用到什么数据结构?21.什么是哈密顿环问题?22.用回溯法求解哈密顿环,如何定义判定函数?23.请写出prim算法的基本思想。
二、复杂性分析1、MERGESORT(low,high)if low<high;then mid←(low,high)/2;MERGESORT(low,mid);MERGESORT(mid+1,high);MERGE(low,mid,high);endifend MERGESORT2、procedure S1(P,W,M,X,n)i←1; a←0while i≤ n doif W(i)>M then return endifa←a+ii←i+1 ;repeatend3.procedure PARTITION(m,p)Integer m,p,i;global A(m:p-1)v←A(m);i←mlooploop i←i+1 until A(i) ≥v repeatloop p←p-1 until A(p) ≤v repeatif i<pthen call INTERCHANGE(A(i),A(p))else exitendifrepeatA(m) ←A(p);A(p) ←vEnd PARTITION4.procedure F1(n)if n<2 then return(1)else return(F2(2,n,1,1))endifend F1procedure F2(i,n,x,y)if i≤nthen call F2(i+1,n,y,x+y)endifreturn(y)end F25.procedure MAX(A,n,j)xmax←A(1);j←1for i←2 to n doif A(i)>xmax then xmax←A(i); j←i;endif repeatend MAX6.procedure BINSRCH(A,n,x,j)integer low,high,mid,j,n;low←1;high←nwhile low≤high domid←|_(low+high)/2_|case:x<A(mid):high ←mid-1:x>A(mid):low ←mid+1 :else:j ←mid; returnendcase repeat j ←0 end BINSRCH三、算法理解1、写出多段图最短路经动态规划算法求解下列实例的过程,并求出最优值。
各边的代价如下:C(1,2)=3,C(1,3)=5 ,C(1,4)=2C(2,6)=8 ,C(2,7)=4 ,C(3,5)=5 ,C(3,6)=4, C(4,5)=2,C(4,6)=1 C(5,8)=4, C(6,8)=5 ,C(7,8)=62、 写出maxmin 算法对下列实例中找最大数和最小数的过程。
数组 A=(48,12,61,3,5,19,32,7)3、 给出5个数(3,6,9,1,7),M=13,用递归树描述sumofsub 算法求和数=M 的一个子集的过程。
4、 快速排序算法对下列实例排序,算法执行过程中,写出数组A 第一次被分割的过程。
A=(65,70,75,80,85,55,50,2) 5、 归并排序算法对下列实例排序,写出算法执行过程。
A=(48,12,61,3,5,19,32,7)6、 写出图着色问题的回溯算法的判断X[k]是否合理的过程。
7、 对于下图,写出图着色算法得出一种着色方案的过程。
8、写出第7题的状态空间树。
9、写出归并排序算法对下列实例排序的过程。
(6,2,9,3,5,1,8,7)10、写出用背包问题贪心算法解决下列实例的过程。
P=(18,12,4,1)W=(12,10,8,3)M=2511、有一个有序表为{1,3,9,12,32,41,45,62,75,77,82,95,100},当使用二分查找值为82的结点时,经过多少次比较后查找成功并给出过程。
12、使用prim算法构造出如下图G的一棵最小生成树。
dist(1,2)=6;dist(2,5)=3;dist(5,6)=6;dist(6,4)=2;dist(4,1)=5;dist(1,3)=1;dist(2,3)=5;dist(3,4)=5;dist(3,6)=4;dist(5,3)=613、有如下函数说明int f(int x,int y){f=x Mod y +1;}已知a=10,b=4,c=5 则执行k=f(f(a+c,b),f(b,c))后,k的值是多少并写出详细过程。
14、McCathy函数定义如下:当x>100时 m(x)=x-10;当x<=100时 m(x)=m(m(x+11));编写一个递归函数计算给定x的m(x)值。
15、设计一个算法在一个向量A中找出最大数和最小数的元素。
四、设计算法1.设有n项独立的作业{1,2,…, n},由m台相同的机器加工处理。
作业i所需要的处理时间为t i。
约定:任何一项作业可在任何一台机器上处理,但未完工前不准中断处理;任何作业不能拆分更小的子作业。
多机调度问题要求给出一种调度方案,使所给的n个作业在尽可能短的时间内由m台机器处理完。
设计算法,并讨论是否可获最优解。
2. 设有n种面值为:d1≥d2≥……≥d n的钱币,需要找零钱M,如何选择钱币d k,的数目X k,满足d1×X i+……d n×X n M ,使得X i+……X n 最小请选择贪心策略,并设计贪心算法。
3.有n个物品,已知n=7, 利润为P=(10,5,15,7,6,18,3),重量W=(2,3,5,7,1,4,1),背包容积M=15,物品只能选择全部装入背包或不装入背包,设计贪心算法,并讨论是否可获最优解。
4. 设计只求一个哈密顿环的回溯算法。
5.利用对称性设计算法,求n为偶数的皇后问题所有解。
参考答案一、简要回答下列问题:1. 确定性、可实现性、输入、输出、有穷性2. 分析算法占用计算机资源的情况,对算法做出比较和评价,设计出额更好的算法。
3. 算法的时间复杂性与问题的规模相关,是问题大小n的函数。
4.当问题的规模n趋向无穷大时,影响算法效率的重要因素是T(n)的数量级,而其他因素仅是使时间复杂度相差常数倍,因此可以用T(n)的数量级(阶)评价算法。
时间复杂度T(n)的数量级(阶)称为渐进时间复杂性。
5. 最坏情况下的时间复杂性和平均时间复杂性考察的是n固定时,不同输入实例下的算法所耗时间。
最坏情况下的时间复杂性取的输入实例中最大的时间复杂度:W(n) = max{ T(n,I) } , I∈Dn平均时间复杂性是所有输入实例的处理时间与各自概率的乘积和:A(n) =∑P(I)T(n,I) I∈Dn6. 设输入是一个按非降次序排列的元素表A[i:j] 和x,选取A[(i+j)/2]与x比较,如果A[(i+j)/2]=x,则返回(i+j)/2,如果A[(i+j)/2]<x,则A[i:(i+j)/2-1]找x,否则在A[ (i+j)/2+1:j] 找x。
上述过程被反复递归调用。
回溯法的搜索特点是什么7. 不相同。
目标函数:获得最大利润。
最优量度:最大利润/重量比。
8. 问题的解可以表示为n元组:(x1,x2,……x n),x i∈S i, S i为有穷集合,x i∈S i, (x1,x2,……x n)具备完备性,即(x1,x2,……x n)是合理的,则(x1,x2,……x i)(i<n)一定合理。
9. 在解空间树上跳跃式地深度优先搜索,即用判定函数考察x[k]的取值,如果x[k]是合理的就搜索x[k]为根节点的子树,如果x[k]取完了所有的值,便回溯到x[k-1]。
10. 将第K行的皇后分别与前k-1行的皇后比较,看是否与它们相容,如果不相容就返回false,测试完毕则返回true。
11 . 子问题的规模还很大时,必须继续使用分治法,反复分治,必然要用到递归。
12 最坏情况下的时间复杂性决定算法的优劣,并且最坏情况下的时间复杂性较平均时间复杂性游可操作性。
13 .T(n)是某算法的时间复杂性函数,f(n)是一简单函数,存在正整数No和C,n〉No,有T(n)<f(n),这种关系记作T(n)=O(f(n))。
14 .二分检索算法的最多的比较次数为 log n 。
15..最坏情况下快速排序退化成冒泡排序,需要比较n 2次。
16. 是一种依据最优化量度依次选择输入的分级处理方法。
基本思路是:首先根据题意,选取一种量度标准;然后按这种量度标准对这n 个输入排序,依次选择输入量加入部分解中。
如果当前这个输入量的加入,不满足约束条件,则不把此输入加到这部分解中。
17.回溯法的解(x 1,x 2,……x n )的隐约束一般指个元素之间应满足的某种关系。
18. 讲数组一分为二,分别对每个集合单独排序,然后将已排序的两个序列归并成一个含n 个元素的分好类的序列。
如果分割后子问题还很大,则继续分治,直到一个元素。
19.快速排序的基本思想是在待排序的N 个记录中任意取一个记录,把该记录放在最终位置后,数据序列被此记录分成两部分。
所有关键字比该记录关键字小的放在前一部分,所有比它大的放置在后一部分,并把该记录排在这两部分的中间,这个过程称作一次快速排序。
之后重复上述过程,直到每一部分内只有一个记录为止。
20.在定义一个过程或者函数的时候又出现了调用本过程或者函数的成分,既调用它自己本身,这称为直接递归。
如果过程或者函数P 调用过程或者函数Q ,Q 又调用P ,这个称为间接递归。
消除递归一般要用到栈这种数据结构。