中南大学算法设计与分析

合集下载

算法设计与分析_总结7

算法设计与分析_总结7

第一章:算法定义: 算法是若干指令的有穷序列, 满足性质: (1)输入: 有外部提供的量作为算法的输入。

(2)输出: 算法产生至少一个量作为输出。

1. (3)确定性:组成算法的每条指令是清晰, 无歧义的。

2. (4)有限性:算法中每条指令的执行次数是有限的, 执行每条指令的时间也是有限的。

3. 程序定义: 程序是算法用某种程序设计语言的具体实现。

可以不满足算法的性质(4)。

4. 算法复杂性分为时间复杂性和空间复杂性。

5. 可操作性最好且最有使用价值的是最坏情况下的时间复杂性。

6. O(n)定义: 存在正的常数C 和自然数N0, 当N>=N0时有f(N)<=Cg(N),则称函数f(N)当N 充分大时有上界, 记作f(N)=O(g(n)). 7. Ω(n)定义: 存在正的常数C 和自然数N0, 当N>=N0时有f(N)>=Cg(N),则称函数f(N)当N 充分大时有上界, 记作f(N)=Ω(g(n)). 8. (n)定义:当f(n)=O(g(n))且f(N)=Ω(g(n)), 记作f(N)= (g(n)), 称为同阶。

求下列函数的渐进表达式: 3n2+10n ~~~O(n2) n2/10+2n~~~O(2n) 21+1/n~~~O(1) logn 3~~~O(logn) 10log3n ~~~O(n) 从低到高渐进阶排序: 2 logn n2/3 20n 4n2 3n n!第二章:1. 分治法的设计思想: 将一个难以直接解决的问题, 分割成一些规模较小的相同问题, 以便各个击破分而治之。

2. 例1 Fibonacci 数列 代码(注意边界条件)。

int fibonacci(int n) {if (n <= 1) return 1;return fibonacci(n-1)+fibonacci(n-2);}3. Ackerman 函数双递归。

A(1,1)代入求值。

A(1,1)=A(A(0,1),0)=A(1,0)=24. 全排列的递归算法代码。

2014年12月中南大学网络教育课程考试:算法分析与设计作业参考答案

2014年12月中南大学网络教育课程考试:算法分析与设计作业参考答案

《算法分析与设计》作业参考答案作业一一、名词解释:1.递归算法:直接或间接地调用自身的算法称为递归算法。

2.程序:程序是算法用某种程序设计语言的具体实现。

二、简答题:1.算法需要满足哪些性质?简述之。

答:算法是若干指令的有穷序列,满足性质:(1)输入:有零个或多个外部量作为算法的输入。

(2)输出:算法产生至少一个量作为输出。

(3)确定性:组成算法的每条指令清晰、无歧义。

(4)有限性:算法中每条指令的执行次数有限,执行每条指令的时间也有限。

2.简要分析分治法能解决的问题具有的特征。

答:分析分治法能解决的问题主要具有如下特征:(1)该问题的规模缩小到一定的程度就可以容易地解决;(2)该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质; (3)利用该问题分解出的子问题的解可以合并为该问题的解;(4)该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题。

3.简要分析在递归算法中消除递归调用,将递归算法转化为非递归算法的方法。

答:将递归算法转化为非递归算法的方法主要有:(1)采用一个用户定义的栈来模拟系统的递归调用工作栈。

该方法通用性强,但本质上还是递归,只不过人工做了本来由编译器做的事情,优化效果不明显。

(2)用递推来实现递归函数。

(3)通过Cooper 变换、反演变换能将一些递归转化为尾递归,从而迭代求出结果。

后两种方法在时空复杂度上均有较大改善,但其适用范围有限。

三、算法编写及算法应用分析题: 1.冒泡排序算法的基本运算如下:for i ←1 to n-1 do for j ←1 to n-i do if a[j]<a[j+1] then 交换a[j]、a[j+1]; 分析该算法的时间复杂性。

答:排序算法的基本运算步为元素比较,冒泡排序算法的时间复杂性就是求比较次数与n 的关系。

(1)设比较一次花时间1;(2)内循环次数为:n-i 次,(i=1,…n ),花时间为:∑-=-=in j i n 1)(1(3)外循环次数为:n-1,花时间为:2.设计一个分治算法计算一棵二叉树的高度。

中南大学C++程序设计报告

中南大学C++程序设计报告

C++程序设计报告一、前言我认为安排此次课程设计的目的,是让同学们在独立完成设计、编写、调试应用程序及编写文档的任务的过程中,及时巩固已学的知识,补充未学但是非常重要的知识,提高程序设计的能力。

针对C++语言中的重点和难点内容,如数组和函数等,进行训练,并且能充分发挥独立自主学习的能力,对于在程序设计和调试中遇到的问题,应积极和同学交流,相互学习,共同进步二、正文1.(1)题目:任意输入一个正整数,要求:(1)求它是几位数;(2)按逆序输出各位数字;(3)求奇数位数字之和。

(2)算法分析分离出每一末位数字,然后输出;判断是否为奇数位,将奇数位数字相加求和;利用循环结构进行编程,每位数字逐一进行分离、判断。

(3)程序:程序要有详尽注释,如:各参数的含义、函数的功能等#include<iostream>using namespace std;void main(){int n,m,s=0,i=0; //定义变量cout<<"请输入一个正整数n"<<endl;cin>>n;do{m=n%10;// n对10取模,得到该数的最后一位数字cout<<m;//逆序输出每位数字n/=10;i++;if(i%2==1)//判断是否为奇数位{s+=m;}//各奇数位数字之和}while(n>0); //循环一次,计算一次,共循环i次cout<<"共有"<<i<<"位数字"<<endl;cout<<"奇数位之和是:"<<s<<endl;}(4)运行结果(5)调试过程中出现过的问题和解决的方法2.(1)题目:输入阶数n(1≤n≤10),输出对应的n阶旋转矩阵。

所谓旋转矩阵,就是在n阶矩阵中,起始数1置于方阵的左上角,然后从起始数开始依次递增,按顺时针方向从外向里旋转填数而成。

中南大学算法设计与分析

中南大学算法设计与分析
25
算法问题求解基础
• 证明算法的正确性
– 证明对于每一个合法的输入,该算法都会在有 限的时间内输出一个满足要求的结果。
– 一般方法:数学归纳法 – 证明算法的正确性与不正确哪一个更容易?
• 分析算法
– 算法有两种效率:时间效率和空间效率 – 算法的另外两个特性:简单性和一般性
26
算法问题求解基础
• 为算法写代码
– 用计算机程序实现算法 – 在把算法转变为程序的过程中,可能会发生错误或者效
率非常低 作为一种规律,一个好的算法是反复努力和重新修正的结果
• 算法是一个最优性问题:对于给定的问题需要 花费多少力气(资源)?
• 是不是每个问题都能够用算法的方法来解决?
发明或者发现算法是一个非常有创造性和非常值得付出的过程!
• 程序=数据结构+算法
10
算法可以解决哪些问题?
• 找出人类DNA中所有100000中基因,确定构成人 类DNA的30亿种化学基对的各种序列。
• 快速地访问和检索互联网数据 • 电子商务活动中各种信息的加密及签名 • 制造业中各种资源的有效分配 • 确定地图中两地之间的最短路径 • 各种数学、几何计算(矩阵、方程、集合)
6
例4:八后问题: 在8*8的棋盘上,每行放置 一个皇后,要求它们不能在同一列, 同一斜线上。
由国际西洋棋棋手马克斯·贝瑟尔于1848年 提出
高斯认为有76种方案。1854年在柏林的象 棋杂志上不同的作者发表了40种不同的解, 后来有人用图论的方法解出92种结果。
7
第一章 绪论
• 算法是计算机的核心
27
重要的问题类型
• 排序(Sorting) • 查找(Search) • 串处理(String)

中南大学计算机程序设计报告—FORTRAN

中南大学计算机程序设计报告—FORTRAN

中南大学本科生课程设计(实践)任务书、设计报告(计算机程序设计基础—FORTRAN)题目线性病态方程组问题学生姓名***指导教师***学院土木工程学院专业班级土木工程****班学生学号**********计算机基础教学实验中心20**年* 月* 日课程设计实践报告一、任务内容本次实践我的研究课题为“线性病态方程组问题”,题目如下:2.线性病态方程组问题。

下面是一个线性病态方程组:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡52.067.095.06/15/14/15/14/13/14/13/12/1321x x x (1)求方程的解。

(2)将方程右边向量元素b 3改为0.53,再求解,并比较b 3的变化和解的相对变化。

(3)计算系数矩阵A 的条件数并分析结论。

提示:矩阵A 的条件数等于A 的范数与A 的逆矩阵的范数的乘积,即1)(-⋅=A A A cond 。

这样定义的条件数总是大于1的。

条件数越接近于1,矩阵的性能越好,反之,矩阵的性能越差。

矩阵A 的条件数1()cond A A A -=⋅,其中11max{}mij j ni A a ≤≤==∑,a ij 系矩阵A 的元素。

要求:(1)方程的系数矩阵、常数向量均从文件中读入。

(2)定义求解线性方程组Ax=b 的子程序,要求该子程序能求解任意线性方程组。

(3)在主程序中调用子程序,并对求解结果进行对比分析。

(4)绘制常数向量修改前后所求得的方程解的数据分布图。

二.系统开发设计思想本题采用的方法主要有高斯消元法和矩阵求逆法,然后按照有关线性方程组的解法,求出方程组的解。

对所求结果进行对比,然后绘制出有关图像。

首先编写主程序,从文件中调用主程序,进行调试,输出方程组的解。

本题编写了三个子程序,第一个子程序GAUSS是用高斯消元法编写而出,第二个子程序INVERSEMATRIX是用逆矩阵法编写而出,第三个子程序FANSHU由范数的定义来编写的。

算法设计与分析实验报告(中南民族大学)

算法设计与分析实验报告(中南民族大学)

院系:计算机科学学院专业:年级:课程名称:算法设计与分析基础班号:组号:指导教师:年月日实验结果及分析1.求最大数2.递归法与迭代法性能比较递归迭代3.改进算法1.利用公式法对第n项Fibonacci数求解时可能会得出错误结果。

主要原因是由于double类型的精度还不够,所以程序算出来的结果会有误差,要把公式展开计算。

2.由于递归调用栈是一个费时的过程,通过递归法和迭代法的比较表明,虽然递归算法的代码更精简更有可读性,但是执行速度无法满足大数问题的求解。

3.在当前计算机的空间较大的情况下,在一些速度较慢的问题中,空间换时间是一个比较周全的策略。

实验原理(算法基本思想)定义:若A=(a ij), B=(b ij)是n×n的方阵,则对i,j=1,2,…n,定义乘积C=A⋅B 中的元素c ij为:1.分块解法通常的做法是将矩阵进行分块相乘,如下图所示:二.Strassen解法分治法思想将问题实例划分为同一问题的几个较小的实例。

对这些较小实例求解,通常使用递归方法,但在问题规模足够小时,也会使用另一种算法。

如果有必要,合并这些问题的解,以得到原始问题的解。

求解矩阵相乘的DAC算法,使用了strassen算法。

DAC(A[],B[],n){If n=2 使用7次乘法的方法求得解ElseDivide(A)//把A分成4块Divide(B)//把B分成4块调用7次strassen算法求得解的4块合并这4块得到解并返回}伪代码Serial_StrassenMultiply(A, B, C) {T1 = A0 + A3;T2 = B0 + B3;StrassenMultiply(T1, T2, M1);T1 = A2 + A3;StrassenMultiply(T1, B0, M2);T1 = (B1 - B3);StrassenMultiply (A0, T1, M3);T1 = B2 - B0;StrassenMultiply(A3, T1, M4);T1 = A0 + A1;StrassenMultiply(T1, B3, M5);T1 = A2 – A0;T2 = B0 + B1;StrassenMultiply(T1, T2, M6);T1 = A1 – A3;T2 = B2 + B3;StrassenMultiply(T1, T2, M7);C0 = M1 + M4 - M5 + M7C1 = M3 + M5C2 = M2 + M4C3 = M1 - M2 + M3 + M6}实验结果及分析时间复杂度1.分块相乘总共用了8次乘法,因而需要Θ(n log28)即Θ(n3)的时间复杂度。

中南大学现代远程教育课程考试复习试题及参考答案

中南大学现代远程教育课程考试复习试题及参考答案

中南大学现代远程教育课程考试复习试题及参考答案《算法分析与设计》一简答题1.算法的复杂性分析主要是分析算法的什么耗费情况?2.算法的重要特性是什么?3.算法的时间复杂度用什么计量?4.用比较树模型描述三个数排序的过程。

5.分治法的基本思想。

6.二分检索算法为什么可以提高查找的效率?7.简述顺序选择select算法的基本流程。

8.简述顺序选择select2算法的改进思路。

9.简述快速排序的基本思想。

10.快速排序算法的最坏时间复杂性和平均时间复杂性函数。

11.快速排序算法怎样抽取分割元素?12.partition怎样将数组划分成3段?13.分治合并排序的是怎样分治的?14.分治合并排序的二分归并过程在最坏情况下花费多少时间?15.分治合并排序的二分归并过程在最好情况下花费多少时间?16.MaxMin算法是怎样分治的?17.贪心法的基本思路是什么?18.用贪心法求解的问题有什么特点?19.背包问题的目标函数是什么,最优量度是什么?20.带限期的作业调度的贪心策略是什么?约束条件是什么?21.说明n皇后问题的解(x1,x2,….,x n)的含义。

22.简述n皇后算法的place函数的功能。

23.简述动态规划方法所运用最优化原理。

24.用多段图说明最优化原理。

二解释下列动态规划优解的一般递归形式。

1)0/1背包2)货郎担问题3)流水作业调度三算法分析。

1.分析汉诺塔算法的时间复杂性。

2.计算冒泡排序算法时间复杂性的阶。

3.分析maxmin算法的时间复杂性。

4.分析分治合并排序算法的时间复杂性。

5.分析二分检索的时间复杂性。

6.背包问题贪心算法的时间复杂性。

7.快速排序的partition过程中,进行了多少次元素之间的比较。

8.多段图算法的时间复杂性。

四算法段填空。

1.MaxMin 算法Maxmin(i,j,max,min)ifthen 对两元素进行比较;return;else{maxmin(i,m,max1,min1); //其中max1和min1为解子问题1的解}2.Hanoi算法Hanoi(n,a,b,c)If n=1 thenElse{;Hanoi(n-1,b, a, c);}3.二分检索BINSRCH(A,n,x,j)low←1;high←n;while low<high do{ ________________ mid←(low+high)/2;case:x=A[mid] :j←mid; return;:x< A[mid]:_________________high←mid-1;:x> A[mid]:_________________low←mid+1;endcase}j←0;end4.快速排序Quicksort(p,q)if p>q then_____________{call partition(p,j);call _______________________call _______________________}end5.贪心方法的抽象化控制procedure GREEDY(A,n)//A(1:n)包含n个输入//solutions←;for i←1 to do{x←SELECT(A)if FEASIBLE(solution,x)then solutions←; endif}return(solution)end GREEDY6.背包问题贪心算法procedure GREEDY-KNAPSACK(P,W,M,X,n)X←0 ;cu←M ;for i←1 to n do{ if then exit endifX(i) ← _ ;cu←;}if i ≤n then X(i) ←;endifend GREEDY-KNAPSACK7.分治合并排序算法procedure MERGESORT(low,high)if low < high thenmid ←_______________________________________________________MERGE(low,mid,high)endifend MERGESORT8. 多段图动态规划算法 procedure FGRAPH(E ,k ,n ,P) 1 real COST(n),integerD(n 一1),P(k),r ,j ,k ,n 2; 3 for to 1 by -1do4 设r 是一个这样的结点,(j ,r)∈E 且使c(j ,r)+COST(r)取最小值5 COST(j)← ;6 ;7 repeat8 P(1)←1;P(k)←n ;9 for do10 P(j)←D ( P(j-1) )11 repeat12 end FGRAPH9. n 后问题递归算法procedure RNQUEENS(K)global x( 1:m ),n;for x(k)←1 to _____ doif place( k )= true thenif k = n then ________else_____________endifendifrepeatend ENQUEENS1. 写递归形式的二分检索算法2. 设计三分检索算法3. 有n 个大小相同而重量不同的集装箱,重量分别为(w1,w2,……,wn),已知货船的额定载重量为M ,Σwi>M,i=1,2,3,…,n 。

中南大学大三软件专业算法设计与分析试卷及答案

中南大学大三软件专业算法设计与分析试卷及答案

中南大学20XX 学年第二学期?计算机算法设计与分析?试题院系:软件学院 专业:软件工程 年级:20XX 级一.计算题〔35分〕1.(6分) 对以下各组函数f(n)和g(n),确定f(n)=O(g(n))或f(n)=Ω(g(n))或f(n)=θ(g(n))。

(1) f(n)=3n ,g(n)=2n(2) f(n)=log n + 5,g(n)=log n 2(3) f(n)=log n ,g(n)=n答:(1) f(n) = Ω(g(n)) (2分)(2) f(n) = θ(g(n)) (2分)(3) f(n) = O(g(n)) (2分)2.〔8分〕采用动态规划策略,计算a={5,-3,7,-4,-5,9,-2,10,-3,2}的最大子段和,并给出这个最大子段和的起始下标和终止下标。

[设数组a 中的元素下标从1开始。

]要求给出过程。

答:b[1]=5;b[2]=max{b[1]+a[2],a[2]}=max{2,-3}=2b[3]=max{b[2]+a[3],a[3]}=max{9,7}=9b[4]=max{b[3]+a[4],a[4]}=max{5,-4}=5b[5]=max{b[4]+a[5],a[5]}=max{0,-5}=0b[6]=max{b[5]+a[6],a[6]}=max{9,9}=9b[7]=max{b[6]+a[7],a[7]}=max{7,-2}=7b[8]=max{b[7]+a[8],a[8]}=max{17,10}=17b[9]=max{b[8]+a[9],a[9]}=max{14,-3}=14b[10]=max{b[9]+a[10],a[10]}=max{16,2}=16(上述每两行1分,共5分)最大子段和为17〔1分〕〔假设数组下标从1开始〕起始下标:6〔1分〕,终止下标:8〔1分〕 〔假设数组下标从0开始〕起始下标:5〔0.5分〕,终止下标:7〔0.5分〕3.〔11分〕设有3件工作分配给3个人,将工作i 分配给第j 个人所花的费用为C ij ,现将为每一个人都分配1件不同的工作,并使总费用到达最小。

算法分析与设计考试试卷(2011) 答案

算法分析与设计考试试卷(2011) 答案

中南大学考试试卷答案2011 -- 2012学年上学期时间120分钟 2012 年1 月6日算法分析与设计课程 48 学时 3 学分考试形式:闭卷专业年级:09级计算机、信安本科生,总分100分,占总评成绩70 %注:此页不作答题纸,请将答案写在答题纸上1. (15points) Describe the main ideas of the following strategies, and briefly describe the differences between them.(1) divide-and–conquer;Divide the problem into two or more smaller subproblems;Conquer the subproblems by solving them recursively;Combine the solutions to the subproblems into the solutions for the original problem(2) dynamic programming;Solve several smaller (overlapping) subproblems;Record solutions in a table so that each subproblem is only solved once;Final state of the table will be (or contain) solution(3)branch and boundCombine depth-first search and breadth-first search.Selecting the node with the best estimated cost among all nodes.Set up a bounding function, which is used to compute a bound (for the value of the objective function) at a node on a state-space tree and determine if it is promising.2. (30 points) Choose T or F for each of the following statements.1)The best case running time for quicksort to sort an element array is O(nlogn).T2)By the master theorem, the solution to the recurrence T(n)=3T(n/3)+3n isT(n)=O(nlogn). T3)Every binary search tree on n nodes has height O(logn). F4)By using path compression (Union- Find) technique to analyze Kruskal algorithm,the algorithm’s running time is O(mlog*n+nlog*n). F5)Depth-first search of a graph is asymptotically faster than breadth-first search. F6)Kruskal’s algorithm for findin g a minimum spanning tree employs dynamicprogramming. F7)The backtrack technique uses the idea of breath first search to get the optimalvalue. F8)n!=O(2n). F9)In the worst case, merge sort runs in O(n2)time. F10)In computer science, all the problems are either in P or NP. F11)Kruskal’s algorithm is faster Prim’s algorithm. F12)Divide-and-Conquer is a bottom-up algorithm and Dynamic Programming is atop-down algorithm. F13)For an unweighted graph G, Depth-first search algorithm can be used to find theshortest paths from a given vertex to other vertices. F14)The strategy using greedy algorithm to solve Knapsack problem is that: each time,choose the item with maximum value to put into the knapsack. T15)The problems solvable by Dynamic Programming can also be solved byDivide-and-Conquer algorithm. T3. Algorithm Design(20)(1) (10) Given a graph G=(V, E), use Depth-First-Search to count the number of connected components in G.DFS(G){for each vertex u{u.color = WHITE;}time = 0;i=0;for each vertex u{if (u.color == WHITE)DFS_Visit(u);i++;}}DFS_Visit(u){u.color = GREY;time = time+1;d[u] = time;for each v u.Adj[]{if (v.color == WHITE)DFS_Visit(v);}u.color = BLACK;time = time+1;f[u] = time;}(2) (10 points) A maximum spanning tree in a weighted graph G is a spanning tree inG with the largest weight over all spanning trees. Give an efficient algorithm that constructs a maximum spanning tree for a weighted graph G=(V, E), and analyze the running time of your algorithm.Prim1(G)1.VT={v0};2.ET=Ф;3.For i=1 to n-1 dofind a maximum weight edge e*=(u*, v*) amongall the edges (u, v) such that u is in T and v is in V-T;VT=VT∪{v*};ET=ET∪{e*};4. Return ET.4、(10) Solve the following recurrence relation. T(1)=1,a、b、c are constants, and a=b=c=1(1)T(n)=aT(n-1)+bnO(n2)(2)T(n)=aT(n/2)+bn cO(n)5.(25) For a 0/1 knapsack problem, given n items, where each item has weight W and value V, find a set of items that could be put into the knapsack without over the capacity M of the knapsack. Assume that n=4,W={10,8,6,4},V={5,4,3,2},M=12。

中南大学算法分析与设计期中测试2011答案

中南大学算法分析与设计期中测试2011答案

测试题1. 简述下列策略的基本思想 (15) (1) 分治将输入规模为n 的问题分成k (一般取k=2)个子问题,子问题相互独立,与原问题性质相同。

先分别对k 个子问题求解,再将子问题的解合并成原问题的解。

由于子问题还很大,故采用递归技术对子问题不断分割,直至子问题可直接简单地解出。

(2) 贪心贪心法希望从求局部最优达到全局最优,即依据贪心策略逐步构造最优解。

即先按确定贪心策略,将输入量排序。

再依次做出当前最优的选择,即当前输入可以构成合法的部分解,则将此输入量选入。

决策一旦做出,就不可再更改。

(3) 动态规划动态规划也是将问题求解过程分成k 个阶段(划分子问题),逐步决策的方法。

与贪心法不同的是,动态规划采用划分子问题,自底向上规划的方法。

要求子问题的划分具备最优子结构性质,即“最优化原理”成立。

需列出当前决策对前阶段决策状态的依赖关系(贝尔曼方程),求出各子问题的最优解,并将子问题的最优解代到下一步的决策中,逐步规划,解出原问题的解。

贝尔曼方程:⎪⎩⎪⎨⎧+==≠}.{min ,0ij i j i j s w u u u2. 下列数组4,1,3,2,16,9,10,14,8,7构成一个堆吗?如果不是,请用自底向上算法建一个 a max-heap.(10) 1) 不是一个最大堆2)按照算法,从i=n/2-5处开始测试i=5 它的孩子节点 2*i=10 ,满足最大堆的规定i=4 ,2i=8,2i+1=9 不满足,整理如下:i=3 ,2i=6,2i+1=7 不满足,整理如下:i=2 ,2i=4,2i+1=5不满足,整理如下:i=1 ,2i=2,2i+1=3不满足,依次整理如下:3. 针对下列叙述,根据正确或错误,选择T或F,并简要说明卫生么.(30)(1) T F nlogn=O(n3) 是上界(2) T F根据master定理, 递归方程T(n)=3T(n/3)+n 的解是T(n)=Θ(n)正确答案:T(n)=O(nlogn)(3)T F 最坏情况下, 归并排序的时间渐进阶是O(n2).归并排序最坏情况下的时间是:T(n)=O(nlogn)(4)T F 图的深度优先搜索的时间是O(n+|E|)。

中南大学算法设计与分析试卷及答案

中南大学算法设计与分析试卷及答案

Mcolor(n)
{k←1; x[k] ←0;
While k>0 do
(2 分)
{ x[k] ← x[k]+1;
while place(k)=false and x[k]≤m do
x[k] ← x[k]+1
if x[k]≤m then
(2 分)
if k=n then
{print x
Return
(2 分)
当 X≥wi } (3 分)
fi(X)是前 i 个物品,背包容积 X 子问题的最优值,
当第 i 个物品不选入,fi(X)等于 fi-1(X)前 i-1 个物品,背包容积 X 子问题
的最优值,
当第 i 个物品不选入,得利润 pi ,但前 i-1 个物品能使用背包为 X—wi 。(3 分)
3、修改图的 m-着色的回溯算法,找到一个解,算法就结束。
else print “No”
(3 分)
它是如何提高算法的效率的?
(6 分)
4、简述归并排序算法和快速排序算法的分治方法。
(6 分)5、一般背包问源自的贪心算法可以获得最优解吗?物品的选择策略是什么?(6 分)
6、Prim 算法和 Dijkstra 算法选择下一个节点的标准分别是什么?对于有负边的无
向图,Prim 算法和 Dijkstra 算法还能保证获得最优解吗?
中南大学考试试卷
2008 -- 2009 学年 2 学期
时间 110 分钟
算法分析与设计 课程 48 学时 3 学分 考试形式: 闭 卷
专业年级: 信安 0601-0602 总分 100 分,占总评成绩 70 %
注:此页不作答题纸,请将答案写在答题纸上
一、 基本概念题(本大题 40 分)

算法设计与分析总结

算法设计与分析总结

第一章绪论 1、重要特性 1.输入 2.输出 3.有穷性 4.确定性 5.可行性2、描述算法的方法1.自然语言:优点是直观易懂,缺点是容易出现二义性2.流程图:优点是直观易懂,缺点是严密性不如程序设计语言,灵活性不如自然语言3.程序设计语言:优点是计算机直接运行,缺点是抽象性差4.伪代码:3、递归算法分析 1.猜测技术2.扩展递归技术3.通用分治递归推式11)/()(>=⎩⎨⎧+=n n cnb n aTc n T kk kk k a b k b a b a b a n O n O n O n T ab <=>⎪⎩⎪⎨⎧=)()log ()()(log第二章 NP 完全理论第三章蛮力法3.1 蛮力法的设计思想蛮力法依赖的基本技术——扫描技术,即采用一定的策略将待求解问题的所有元素依次处理一次,从而找出问题的解; 关键——依次处理所有元素。

3.2 查找问题中的蛮力法 3.2.1 顺序查找O(n) 3.2.2串匹配问题 BF O(n*m) BMP O(n+m)else j t t t t t t j k k j next j k j k j k 11}"""&"1|max{0][121121=⎪⎩⎪⎨⎧=<≤=-+-+--BM O(n*m)else m j c t j j mj m c dist j }11&|max{)(-≤≤==⎩⎨⎧-=3.3 排序问题中的蛮力法3.3.1 选择排序O(n 2)3.3.2 起泡排序O(n 2) 3.4 组合问题中的蛮力法 3.4.1 生成排列对象O(n!)3.4.2 生成子集O(2n)3.4.3 0/1背包问题O(2n) 3.4.4 任务分配问题O(n!) 3.5 图问题中的蛮力法 3.5.1 哈密顿回路问题O(n!) 3.5.2 TSP 问题O(n!)3.6 几何问题中的蛮力法3.6.1 最近对问题O(n 2)3.6.2 凸包问题O(n 3)3.7 实验项目——串匹配问题第四章分治法4.1 分治法的设计思想设计思想:将要求解的原问题划分成k 个较小规模的子问题,对这k 个子问题分别求解。

算法设计与分析报告

算法设计与分析报告

算法设计与分析报告第一点:算法设计的重要性与挑战算法设计是计算机科学和信息技术领域中至关重要的一个环节。

在现代社会,算法设计不仅广泛应用于数据处理、人工智能、网络搜索、金融分析等领域,而且对于提高生产效率、优化资源配置、提升用户体验等方面也具有重大的意义。

然而,算法设计同样面临着诸多挑战,这些挑战来自于算法效率、可扩展性、安全性、以及与硬件的协同等多个方面。

在算法设计中,我们需要关注算法的复杂度分析,包括时间复杂度和空间复杂度。

复杂度分析能够帮助我们理解算法的性能瓶颈,并在众多的算法选择中做出合理的决策。

高效算法的开发和应用,对于提升系统的处理能力、缩短计算时间、降低资源消耗等方面都有直接的积极影响。

同时,随着大数据时代的到来,算法设计需要面对的数据规模和复杂性也在不断增加。

如何在保证算法正确性的基础上,提高算法的执行效率,是算法设计师们必须考虑的问题。

此外,对于算法的可扩展性设计也是必不可少的,这要求算法能够在不同规模的数据集上都能保持良好的性能。

安全性和隐私保护也是当前算法设计中不可忽视的一环。

特别是在涉及用户敏感信息的处理过程中,如何保证数据的安全性和用户隐私不被泄露,是算法设计必须考虑的重要问题。

在这方面,加密算法、匿名化处理技术以及安全多方计算等技术的应用显得尤为重要。

最后,算法与硬件的协同优化也是当前研究的热点之一。

随着处理器架构的不断进化,比如众核处理器、GPU等,算法设计需要更加注重与这些硬件特性之间的匹配,以实现更高的计算性能。

第二点:算法分析的方法与技术算法分析是评估和比较算法性能的重要手段,它包括理论分析和实验分析两个方面。

理论分析主要通过数学模型和逻辑推理来预测算法的执行效率,而实验分析则通过在实际运行环境中执行算法来验证理论分析的结果,并进一步探究算法的性能。

在理论分析中,常用的方法有渐进分析、上下界分析、以及概率分析等。

渐进分析是通过考察算法执行次数的函数来估计其时间复杂度,这种分析方法在大多数情况下能够提供足够的信息来判断算法的效率。

算法设计与分析(详细解析(含源代码))

算法设计与分析(详细解析(含源代码))
(1)选一个方程的近似根,赋给变量x0;
(2)将x0的值保存于变量x1,然后计算g(x1),并将结果存于变量x0;
(3)当x0与x1的差的绝对值还小于指定的精度要求时,重复步骤(2)的计算。
若方程有根,并且用上述方法计算出来的近似根序列收敛,则按上述方法求得的x0就认为是方程的根。上述算法用C程序的形式表示为:
for (i=VARIABLES-1;i>j;i--,j++)
{t=*pt[j]; *pt[j]=*pt[i]; *pt[i]=t;}
}
}
从上述问题解决的方法中,最重要的因素就是确定某种方法来确定所有的候选解。下面再用一个示例来加以说明。
【问题】背包问题
问题描述:有不同价值、不同重量的物品n件,求从这n件物品中选取一部分物品的选择方案,使选中物品的总重量不超过指定的限制重量,但选中物品的价值之和最大。
为求解规模为n的问题设法将它分解成规模较小的问题然后从这些小问题的解方便地构造出大问题的解并且这些规模较小的问题也能采用同样的分解和综合方法分解成规模更小的问题并从这些更小问题的解构造出规模较大问题的解
常用算法设计方法
要使计算机能完成人们预定的工作,首先必须为如何完成预定的工作设计一个算法,然后再根据算法编写程序。计算机程序要对问题的每个对象和处理规则给出正确详尽的描述,其中程序的数据结构和变量用来描述问题的对象,程序结构、函数和语句用来描述问题的算法。算法数据结构是程序的两个重要方面。
【问题】阶乘计算
问题描述:编写程序,对给定的n(n≦100),计算并输出k的阶乘k!(k=1,2,…,n)的全部有效数字。
由于要求的整数可能大大超出一般整数的位数,程序用一维数组存储长整数,存储长整数数组的每个元素只存储长整数的一位数字。如有m位成整数N用数组a[]存储:

中南大学2014算法试卷和答案分析报告

中南大学2014算法试卷和答案分析报告

中南大学考试试卷2013 -- 2014学年下学期时间100分钟 2014 年6 月6日算法分析与设计课程 48 学时 3 学分考试形式:闭卷专业年级:12级计算机、信安、物联本科生,总分100分,占总评成绩70 % 注:此页不作答题纸,请将答案写在答题纸上一、简答题(本题30分,每小题5分)1、陈述算法在最坏情况下的时间复杂度和平均时间复杂度;这两种评估算法复杂性的方法各自有什么实际意义?1最坏情况下的时间复杂度称最坏时间复杂度。

一般不特别说明,讨论的时间复杂度均是最坏情况下的时间复杂度。

意义:最坏情况下的时间复杂度是算法在任何输入实例上运行时间的上界,这就保证了算法的运行时间不会比任何更长2平均时间复杂度是指所有可能的输入实例均以等概率出现的情况下,算法的期望运行时间。

意义:在输入不同的情况下算法的运行时间复杂度可能会发生变化。

平均时间复杂度给出了算法的期望运行时间,有助于算法好坏的评价以及在不同算法之间比较时有一个统一标准2、简单描述分治法的基本思想。

分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同。

递归地解这些子问题,然后将各个子问题的解合并得到原问题的解。

3、何谓最优子结构性质?如果问题的最优解所包含的子问题的解也是最优的,我们就称该问题具有最优子结构性质(即满足最优化原理)。

最优子结构性质为动态规划算法解决问题提供了重要线索。

4、何谓P、NP、NPC问题P(Polynomial问题):也即是多项式复杂程度的问题。

NP就是Non-deterministic Polynomial的问题,也即是多项式复杂程度的非确定性问题。

NPC(NP Complete)问题,这种问题只有把解域里面的所有可能都穷举了之后才能得出答案,这样的问题是NP里面最难的问题,这种问题就是NPC问题。

5、试比较回溯法与分支限界法。

1、引言1.1回溯法回溯法在问题的解空间树中,按深度优先策略,从根结点出发搜索解空间树。

中南大学算法设计与分析实验报告

中南大学算法设计与分析实验报告

算法设计与分析基础——实验报告姓名:学号:0909122824班级:信安1202实验一分治—最近点对一.问题ProblemHave you ever played quoit in a playground? Quoit is a game in which flat rings are pitched at some toys, with all the toys encircled awarded.In the field of Cyberground, the position of each toy is fixed, and the ring is carefully designed so it can only encircle one toy at a time. On the other hand, to make the game look more attractive, the ring is designed to have the largest radius. Given a configuration of the field, you are supposed to find the radius of such a ring.Assume that all the toys are points on a plane. A point is encircled by the ring if the distance between the point and the center of the ring is strictly less than the radius of the ring. If two toys are placed at the same point, the radius of the ring is considered to be 0.InputThe input consists of several test cases. For each case, the first line contains an integer N (2 <= N <= 100,000), the total number of toys in the field. Then N lines follow, each contains a pair of (x, y) which are the coordinates of a toy. The input is terminated by N = 0.OutputFor each test case, print in one line the radius of the ring required by the Cyberground manager, accurate up to 2 decimal places.二.分析思路题目是给n个点的坐标,求距离最近的一对点之间距离的一半。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
13
What’s an Algorithm?
假设要喝一杯茶有以下几个步骤:
a.烧水
b.洗刷水壶
c.找茶叶 d.洗刷茶具
e.沏茶
请问你怎样安排?
14
What’s an Algorithm?
第一步,把冰箱门打开 第二步,把大象装进去 第三步,把冰箱门关上
15
Chapter 1 Introduction to Algorithms
While n!=0 do rm mod n mn nr
Return m
同一个算法有不同的表达方式
19
伪码描述
算法 Euclid(m, n) // 计算 m 和 n 最大公约数的欧氏算法 // 输入:两个不全为0的非负整数 m≥n // 输出:m 和 n 的最大公约数 while n≠0 do {
--David Berlinski, The advent of the Algorithm, 2000
8
为什么要学习算法
一般来说,对程序设计的研究可以分为四个层 次:算法、方法学、语言和工具,其中算法研 究位于最高层次。
算法对程序设计的指导可以延续几年甚至几 十年,它不依赖于方法学、语言和工具的发 展与变化。
整数 n 越来越小,最终变成 0(算法收敛)
20
Example
gcd(m,n)的连续整数检测算法
第一步:将min{m,n}的值赋给t。 第二步:m除以t,如果余数为0,则进入第三步;否则,进入第四步。 第三步:n除以t,如果余数为0 ,则返回t值作为结果;否则,进入第四步。 第四步:把t的值减1。返回第二步。
r ← m mod n
问题1: 如果 m 和 n 没有公约数,本 算法是否支持这种情况?
答:支持 例:(63, 22)→(22, 19) → (19, 3)→(3,1) →(1,0) →1
m←n
n ←r }
return m
问题2:算法一定收敛吗?(n 值最后一定为 0 ?)
观察分析(理论证明略)
每一次循环,n← m mod n,n 值变小,但不会变成负数即 n > r > 0 .
10
算法可以解决哪些问题?
• 找出人类DNA中所有100000中基因,确定构成人 类DNA的30亿种化学基对的各种序列。
• 快速地访问和检索互联网数据 • 电子商务活动中各种信息的加密及签名 • 制造业中各种资源的有效分配 • 确定地图中两地之间的最短路径 • 各种数学、几何计算(矩阵、方程、集合)
描述。 • 可能存在几种解决相同问题的算法。 • 针对同一个问题的算法可能会基于完全不
同的解题思路,而且解题的速度也会有明 显区别。
17
Example
求两个正整数m,n的最大公约数gcd(m,n)
如果构造这个算法?
18
Example
• 求两个正整数m,n的最大公约数gcd(m,n) • 欧几里得算法基于的方法是重复应用下列式子,直到m
由国际西洋棋棋手马克斯·贝瑟尔于1848年 提出
高斯认为有76种方案。1854年在柏林的象 棋杂志上不同的作者发表了40种不同的解, 后来有人用图论的方法解出92种结果。
7
第一章 绪论
• 算法是计算机的核心
科技殿堂时陈列着两颗熠熠生辉的宝石,一颗是微积分, 另一颗就是算法。微积分以及在微积分基础上建立 起来的数学分析体系成就了现代科学,而算法则成就 了现代世界

12
Contents of Algorithm
• 算法基础(Foundations)
– 算法基本概念 – 算法效率分析基础
• 算法设计及分析技巧
– 蛮力法 – 分治法(Divide and Conquer) – 减治法 – 变治法 – 时空权衡 – 动态规划(Dynamic Programming) – 贪婪技术(Greedy Algorithm) – 回溯法(Back Tracking)
同一个问题有不同的解决方法 gcd(m,n)的中学计算算法
第一步:找到m的所有质因数。 第二步:找到n的所有质因数 第三步:从第一步和第二步中求得的质因数分解式找出所有的公因数 第四步:将第三步中找的质因数相乘,其结果作为给定数字的最大公因数。
例:n=6 s=3 783259 ---> 259 n=5 s=2 24351 ---> 231
5
例3:奥运会排球比赛: 预赛: A组:中国、古巴、日本、美国、波 兰、委内瑞拉、 B组:俄罗斯、塞尔维亚、巴西、意大 利、哈萨克斯坦、阿尔及利亚 1/4决赛、1/2决赛:古 vs 美、中 vs 巴
6
例4:八后问题: 在8*8的棋盘上,每行放置 一个皇后,要求它们不能在同一列, 同一斜线上。
mod n=0
• gcd(m, n) = gcd(n, m mod n)
gcd(m,n)的欧几里得算法
第一步:如果n=0,返回m的值作为结 果,结束;否则进入第二步 第二步:用n去除m,将余数赋给r。 第三步:将n的值赋给m,将r的值赋 给n,回第一步。
算法 Euclid(m,n)
//使用欧几里得算法计算gcd(m,n) //输入:两个不全为0的非负整数m,n //输出:m,n的最大公约数
一个人只有把知识教给别人,才能真正掌握
它。实际上,一个人只有把知识教给计算机,
才能真正掌握它。
9
为什么要学习算法?
• 算法不仅是计算机科学的一个分支,它更 是计算机科学的核心,而且,可以毫不夸 张地说,它和绝大多数的科学、商业和技 术都是相关的。——David Harel《算法:计算的灵魂》
• 程序=数据结构+算法
中南大学算法设计与分析
课程介绍-例子
例1:百鸡问题:“鸡翁一,值钱五;鸡母
一,值钱三;鸡雏三,值钱一。百钱买百 鸡,问鸡翁、母、雏各几何?”
中国古代约5-6世纪成书的《张邱建算经》
4
删数方案
例2:假设正整数n、s,s<n。设计算法对
任一给定n位数,删除其中的s位后,使得 剩下的位组成的新数最小。
• What’s an Algorithm?
– 算法是一系列解决问题的清晰指令,也就是说, 能够对一定规范的输入,在有限时间内获得所 要求的输出。
problem
algorithm
input
“computer”
output
16
算法的几个要点
• 算法的每一个步骤都必须清晰、明确。 • 算法所处理的输入的值域必须仔细定义。 • 同样的一个算法可以用几种不同的形式来
相关文档
最新文档