《算法设计与分析》分治法实验报告一

《算法设计与分析》分治法实验报告一
《算法设计与分析》分治法实验报告一

宁波工程学院电信学院计算机教研室

实验报告

课程名称:算法设计与分析实验项目:实验一:分治法

指导教师:苏日娜

实验位置:计算机中心二楼姓名:梅胤

班级:计科094

学号: 29

日期: 2011/10/17

一、实验目的

通过上机实验,要求掌握分治法算法的问题描述、算法设计思想、程序设计和算法复杂性分析等。

二、实验环境:VC6.0

三、实验内容

1、用分治法算法解最接近点对问题

(1)问题的描述

给定平面上n个点,找其中的一对点,使得在n个点组成的所有点对中,该点对间的距离最小。

(2)算法设计思想

将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同。递归地解这些子问题,然后将各个子问题解合并得到原问题的解。

(3)程序设计

#include

#include

#include

#include

using std::cout;

using std::endl;

#define N 5

int x[N],y[N],record[N]; //产生原始点数据,x坐标放在x[]中,y 坐标放在y[]中。

double Min;

/////////////////////////产生随机数组///////////////////////////// void randnum()

{

int i;

srand(time(0));

for (i=0;i

{

x[i]=rand()%N;

cout<

}

cout<

for (i=0;i

{

y[i]=rand()%N;

cout<

}

cout<

}

///////////////////////////交换数组元素/////////////////////////// void swap(int & a, int & b)

{

int temp=a;

a=b;

b=temp;

}

//求平方//

int square(int x)

{

return x*x;

}

//求两点之间距离//

double lengthf(int x1,int y1,int x2,int y2)

{

return sqrt(square(x1-x2)+square(y1-y2));

}

//求两者中最小者//

double min(double a,double b)

{

if (a>=b)

return b;

else

return a;

}

//对平面数组排序//

void sort(int A[])

{

int i,j;

for (i=0;i

record[i]=i;

for (j=1;j

{

i=j;

while (i>=0&&A[i]

{

swap(A[i],A[i-1]);

swap(record[i-1],record[i]); //得到x排序后对应的原y的坐标

i--;

}

}

cout<<"排序后的元素数组:"<

for (i=0;i

cout<

cout<

for (i=0;i

cout<

cout<

}

//分治法//

double merge(int left,int right)

{

double mlength;

if (right==left)

mlength=10e-6;

if (right==left+1)

mlength=lengthf(x[right],y[record[right]],x[left],y[record[left]]); //两个点时求最小值

if (right-left==2)

mlength=min(min(lengthf(x[right-1],y[record[right-1]],x[left],y[re cord[left]]),lengthf(x[right],y[record[right]],x[left+1],y[record[ left+1]])),lengthf(x[right],y[record[right]],x[left],y[record[left ]]));

//三个点时求最大值

return mlength;

}

double divide(int left,int right)

{

if (right-left<=2)

{

Min=merge(left,right);

}

else

{

double l1,l2,mi; //l1记录划分区域后左半面最小距离,l2记录右半面最小距离,min为两者中较小者,m为全部中的最小者

int rem1,rem2,l; //记录获得最短距离对应的两个点

//int il,jl,ir,jr;

int i,j;

int R,L;

R=L=0; //记录划分小区域后的左半块和右半块个有多少元素

l1=l2=Min=100;

l=(right-left+1)/2-1; //中线位置

///////////////////////////////////////////////////

l1=divide(left,l);

l2=divide(l+1,right);

if (l1

{

Min=l1;

//cout<<"两半面最短距离是:"<

}

else

{

Min=l2;

//cout<<"两半面最短距离是:"<

}

///////////////////得到右半块元素数R

//cout<<"min="<

for (i=l+1;i

{

if (x[i]-x[l]<=Min)

R++;

else break;

}

//cout<<"R="<

/////////////////////得到左半块元素数L

for (i=l;i>=0;i--)

{

if (x[l]-x[i]<=Min)

L++;

else break;

}

//cout<<"L="<

if (L!=0&&R!=0)

{

for (i=l-L+1;i<=l;i++)

for (j=l+1;j<=l+R;j++)

{

if

(y[record[j]]-y[record[i]]

mi=lengthf(x[i],y[record[i]],x[j],y[record[j]]);

if (mi

{

Min=mi;

rem1=i;

rem2=j;

}

}

}

// cout<<"min="<

//cout<<"rem1="<

}

}

return Min;

}

/***************************************************************** ******/

//主函数//

int main()

{

//double a;

randnum();

cout<<"*********************分治法********************"<

divide(0,N-1);

cout<<"元素组中最短距离为:"<

cout<<"min="<

return 0;

}

(4)数据输入和结果输出

(5)算法复杂性分析

O(n*n+2*n)=O(n^2).

四、实验心得与小结

通过本次试验我对分治法有了更深的了解。利用分治法可以将问题简化,这有助于我们在实际中解决一些复杂性较大的问题,提高程序的运行效率。

五、指导教师成绩评定:

算法设计与分析:递归与分治法-实验报告

应用数学学院信息安全专业班学号姓名 实验题目递归与分治法 综合实验评分表

实验报告 一、实验目的与要求 1.掌握递归算法的设计思想 2.掌握分治法设计算法的一般过程 3.理解并掌握算法渐近时间复杂度的分析方法 二、实验内容 1、折半查找的递归算法 (1)源程序代码 #include #include using namespace std; int bin_search(int key[],int low, int high,int k) { int mid; if(low>high) return -1; else{ mid = (low+high) / 2; if(key[mid]==k) return mid; if(k>key[mid]) return bin_search(key,mid+1,high,k); else return bin_search(key,low,mid-1,k); } } int main() { int n , i , addr; int A[10] = {2,3,5,7,8,10,12,15,19,21}; cout << "在下面的10个整数中进行查找" << endl; for(i=0;i<10;i++){ cout << A[i] << " " ; } cout << endl << endl << "请输入一个要查找的整数" << endl; cin >> n; addr = bin_search(A,0,9,n);

if(-1 != addr) cout << endl << n << "是上述整数中的第" << addr << "个数" << endl; else cout << endl << n << "不在上述的整数中" << endl << endl; getchar(); return 0; } (2)运行界面 ①查找成功 ②查找失败

实验报告 分治与递归

实验报告分治与递归 中国矿业大学计算机科学与技术学院孟靖宇 一、实验目的与要求 1、熟悉C/C++语言的集成开发环境; 2、通过本实验加深对递归过程的理解 二、实验内容: 掌握递归算法的概念和基本思想,分析并掌握“整数划分”问题的递归算法。 三、实验题 任意输入一个整数,输出结果能够用递归方法实现整数的划分。 四、算法思想 对于数据n,递归计算最大加数等于x 的划分个数+最大加数不大于x-1的划分个数。最大加数x 从n 开始,逐步变小为n-1, (1) 考虑增加一个自变量:对于数据n,最大加数n1不大于m 的划分个数记作),(m n q 。则有: ???????>>=<==-+--+=1 1,1),()1,()1,(1),(1),(m n m n m n m n m m n q m n q n n q n n q m n q 五、代码实现 #include "stdafx.h" #include #include #include using namespace std; int q(intn,int m); int main(){ int n; cout<<"请输入要划分的整数:"<>n; int p=q(n,n); cout<<"正整数"<

return 0; } int q(intn,int m){ if((n<1)||(m<1)) return 0; if((n==1)||(m==1)) return 1; if(n

电磁场HFSS实验报告

实验一? T形波导的内场分析 实验目的? 1、?熟悉并掌握HFSS的工作界面、操作步骤及工作流程。????? 2、?掌握T型波导功分器的设计方法、优化设计方法和工作原理。?实验仪器 1、装有windows 系统的PC 一台 2、或更高版本软件 3、截图软件 实验原理 本实验所要分析的器件是下图所示的一个带有隔片的T形波导。其中,波导的端口1是信号输入端口,端口2和端口3是信号输出端口。正对着端口1一侧的波导壁凹进去一块,相当于在此处放置一个金属隔片。通过调节隔片的位置可以调节在端口1传输到端口2,从端口1传输到端口3的信号能量大小,以及反射回端口1的信号能量大小。 T形波导 实验步骤 1、新建工程设置: 运行HFSS并新建工程:打开 HFSS 软件后,自动创建一个新工程: Project1,由主菜单选 File\Save as ,保存在指定的文件夹内,命名为Ex1_Tee;由主菜单选 Project\ Insert HFSS Design,

在工程树中选择 HFSSModel1,点右键,选择 Rename项,将设计命名为 TeeModel。 选择求解类型为模式驱动(Driven Model):由主菜单选HFSS\Solution Type ,在弹出对话窗选择Driven Model 项。 设置长度单位为in:由主菜单选 3D Modeler\Units ,在 Set Model Units 对话框中选中 in 项。。 2、创建T形波导模型: 创建长方形模型:在 Draw 菜单中,点击 Box 选项,在Command 页输入尺寸参数以及重命名;在Attribute页我们可以为长方体设置名称、材料、颜色、透明度等参数Transparent(透明度)将其设为。Material(材料)保持为Vacuum。 设置波端口源励:选中长方体平行于 yz 面、x=2 的平面;单击右键,选择 Assign Excitation\Wave port项,弹出 Wave Port界面,输入名称WavePort1;点击积分线 (Integration Line) 下的 New line ,则提示绘制端口,在绘图区该面的下边缘中部即(2,0,0)处点左键,确定端口起始点,再选上边缘中部即(2,0,处,作为端口终点。 复制长方体:展开绘图历史树的 Model\Vacuum\Tee节点,右键点击Tee项,选择 Edit\Duplicate\Around Axis,在弹出对话窗的Axis项选择Z,在Angel项输入90deg,在 Total Number 项输入2,点OK,则复制、添加一个长方体,默认名为TEE_1。重复以上步骤,在Angel项输入-90,则添加第3个长方体,默认名Tee_2.

算法设计与分析课程期末试卷-A卷(自测 )

华南农业大学期末考试试卷(A卷) 2008学年第一学期考试科目:算法分析与设计 考试类型:(闭卷)考试时间:120分钟 学号姓名年级专业 一、选择题(20分,每题2分) 1.下述表达不正确的是。 A.n2/2 + 2n的渐进表达式上界函数是O(2n) B.n2/2 + 2n的渐进表达式下界函数是Ω(2n) C.logn3的渐进表达式上界函数是O(logn) D.logn3的渐进表达式下界函数是Ω(n3) 2.当输入规模为n时,算法增长率最大的是。 A.5n B.20log2n C.2n2D.3nlog3n 3.T(n)表示当输入规模为n时的算法效率,以下算法效率最优的是。A.T(n)= T(n – 1)+1,T(1)=1 B.T(n)= 2n2 C.T(n)= T(n/2)+1,T(1)=1 D.T(n)= 3nlog2n 4.在棋盘覆盖问题中,对于2k×2k的特殊棋盘(有一个特殊方块),所需的L型骨 牌的个数是。 A.(4k– 1)/3 B.2k /3 C.4k D.2k 5.在寻找n个元素中第k小元素问题中,若使用快速排序算法思想,运用分治算法 对n个元素进行划分,应如何选择划分基准?下面答案解释最合理。A.随机选择一个元素作为划分基准 B.取子序列的第一个元素作为划分基准 C.用中位数的中位数方法寻找划分基准 D.以上皆可行。但不同方法,算法复杂度上界可能不同

6. 现在要盖一所邮局为这9个村庄服务,请问邮局应该盖在 才能使到邮局到这9个村庄的总距离和最短。 A .(4.5,0) B .(4.5,4.5) C .(5,5) D .(5,0) 7. n 个人拎着水桶在一个水龙头前面排队打水,水桶有大有小,水桶必须打满水, 水流恒定。如下 说法不正确? A .让水桶大的人先打水,可以使得每个人排队时间之和最小 B .让水桶小的人先打水,可以使得每个人排队时间之和最小 C .让水桶小的人先打水,在某个确定的时间t 内,可以让尽可能多的人打上水 D .若要在尽可能短的时间内,n 个人都打完水,按照什么顺序其实都一样 8. 分治法的设计思想是将一个难以直接解决的大问题分割成规模较小的子问题,分 别解决子问题,最后将子问题的解组合起来形成原问题的解。这要求原问题和子问题 。 A .问题规模相同,问题性质相同 B .问题规模相同,问题性质不同 C .问题规模不同,问题性质相同 D .问题规模不同,问题性质不同 9. 对布线问题,以下 是不正确描述。 A .布线问题的解空间是一个图 B .可以对方格阵列四周设置围墙,即增设标记的附加方格的预处理,使得算法简化对边界的判定 C .采用广度优先的标号法找到从起点到终点的布线方案(这个方案如果存在的话)不一定是最短的 D .采用先入先出的队列作为活结点表,以终点b 为扩展结点或活结点队列为空作为算法结束条件 10. 对于含有n 个元素的子集树问题,最坏情况下其解空间的叶结点数目为 。 A .n! B .2n C .2n+1-1 D . ∑=n i i n 1 !/! 答案:DACAD CACCB

算法分析实验报告--分治策略

《算法设计与分析》实验报告 分治策略 姓名:XXX 专业班级:XXX 学号:XXX 指导教师:XXX 完成日期:XXX

一、试验名称:分治策略 (1)写出源程序,并编译运行 (2)详细记录程序调试及运行结果 二、实验目的 (1)了解分治策略算法思想 (2)掌握快速排序、归并排序算法 (3)了解其他分治问题典型算法 三、实验内容 (1)编写一个简单的程序,实现归并排序。 (2)编写一段程序,实现快速排序。 (3)编写程序实现循环赛日程表。设有n=2k个运动员要进行网球循环赛。现 要设计一个满足以下要求的比赛日程表:(1)每个选手必须与其它n-1个选手各赛一次(2)每个选手一天只能赛一场(3)循环赛进行n-1天 四、算法思想分析 (1)编写一个简单的程序,实现归并排序。 将待排序元素分成大小大致相同的2个子集合,分别对2个子集合进行 排序,最终将排好序的子集合合并成为所要求的排好序的集合。 (2)编写一段程序,实现快速排序。 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有 数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数 据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据 变成有序序列。 (3)编写程序实现循环日赛表。 按分治策略,将所有的选手分为两组,n个选手的比赛日程表就可以通

过为n/2个选手设计的比赛日程表来决定。递归地用对选手进行分割, 直到只剩下2个选手时,比赛日程表的制定就变得很简单。这时只要让 这2个选手进行比赛就可以了。 五、算法源代码及用户程序 (1)编写一个简单的程序,实现归并排序。 #include #include #define MAX 10 using namespace std; void merge(int array[],int p,int q,int r) { int i,k; int begin1,end1,begin2,end2; int* temp = new int[r-p+1]; begin1 = p; end1 = q; begin2 = q+1; end2 = r; k = 0; while((begin1 <= end1)&&(begin2 <= end2)) { if(array[begin1] < array[begin2]) { temp[k] = array[begin1]; begin1++; } else { temp[k] = array[begin2]; begin2++; } k++; } while(begin1 <= end1) {

T型功分器的设计与仿真.

T型功分器的设计与仿真 1.改进型威尔金森功分器的工作原理 功率分配器属于无源微波器件,它的作用是将一个输入信号分成两个(或多个)较小功率的信号,工程上常用的功分器有T型结和威尔金森功分器。 威尔金森功分器是最常用的一种功率分配器。图1所示的为标准的二路威尔 金森等功率分配器。从合路端口输入的射频信号被分成幅度和相位都相等的两路信号,分别经过传输线Bl和BZ,到达隔离电阻两端,然后从两个分路端口输出,离电阻R两端的信号幅度和相位都相等,R上不存在差模信号,所以它不会消耗功率,如果我们不考虑传输线的损耗,则每路分路端口将输出二分之一功率的信号。 图1威尔金森功分器 但是这种经典威尔金森等功率分配器有几个缺点: 1、大功率应用的时候,要求隔离电阻的耗散功率大因此电阻的体积也会比较大 2、如果功分器应用于较高的频段,波长就会与大功率电阻的尺寸相比拟,这样就需要考虑电阻的分布参数。 3、为了提高功分器性能,就要尽量减小Bl和BZ这两段传输线之间的藕合,因此在实际设计时,要求四分之一波长传输线Bl、BZ之间的距离较大,在低频应用时,由于四分之一波长较长,占用面积还是太大了,此外,四分之一波长传输线Bl、BZ的阻抗较高,因此线宽较细,制板的相对误差更大[24]。为克服这些缺点,本文采用了一种改进型的威尔金森等功率分配器,如图2所示

图2 改进型威尔金森功分器 可以看到,它仅由四段传输线组成,没有隔离电阻。传输线A 、Cl 、CZ 的特 征阻抗均为Z0。传输线B 位于A 和Cl 、CZ 之间,它的电长度为四分之一波长, 特征阻抗为Z0/2。从合路端输入的信号,通过传输线B ,被分成幅度和相位相等的的两路信号,分别经过传输线Cl 和C2到达分路端口一和二,在整个结构中,传输线B 起到了阻抗变换的作用。从传输线A 、B 相接处向左看,输入阻抗为Z0。从传输线B 与C1、C2相接处向右看,输入阻抗为Z0/2。利用四分之一阻抗变换器的原理我们知道,传输线的特征阻抗为2/00Z Z ?,即Z0/2。因此,整个电路处于功率分配与合成时,在中心频点处,三个端口都能匹配良好,没有反射。这种改进型的结构克服了标准威尔金森功分器的一系列缺点,同时由于省略了隔离电阻,所以成本降低,也不存在电阻分布参数的问题,与传统威尔金森功分器相比,减少了一段四分之一波长传输线,另外,构成变换器的四分之一波长传输线B 的特征阻抗较低,线宽较宽,能有效降低制板误差。 2功分器的设计与仿真 通过前面的分析,我们知道改进型威尔金森功分器四段传输线特征阻抗之间 的比例关系。由此可得,传输线A 、C1和C2的特征阻抗均为50Ω,而传输线B 的特征阻抗为352/0=Z Ω 为了实现右旋圆极化,经过C2输出的信号要比经过Cl 的相位超前?90,即Cl 要比C2长λ4/1g (λg 为中心频率所对应的介质波长)。设计的功率分配器 如图3所示,传输线段B 的长度约为λ4/1g ,起阻抗变换的作用。传输线段

【原创】南京邮电大学 课程设计 Wilkinson(威尔金森)功分器的设计

南京邮电大学电子科学与工程学院电磁场与无线技术Wilkinson功分器 课题报告 课题名称 Wilkinson功分器 学院电子科学与工程学院 专业电磁场与无线技术 班级 组长 组员 开课时间 2012/2013学年第一学期

一、课题名称 Wilkinson(威尔金森)功分器的设计 二、课题任务 运用功分器设计原理,利用HFSS软件设计一个Wilkinson功分器,中心工作频率3.0GHz。 ?基本要求 实现一个单阶Wilkinson等功分设计,带内匹配≤-10dB,输出端口隔离≤-10dB,任选一种微波传输线结构实现。 ?进阶要求 多阶(N≥2),匹配良好(S11≤-15dB),不等分,带阻抗变换器(输出端口阻抗 不为50Ω),多种传输线实现。 三、实现方式 自选一种或者多种传输线实现,如微带线,同轴线,带状线等,要求输入输出端口阻抗为50Ω,要求有隔离电阻(通过添加额外的端口实现) 四、具体过程 1.计算基本参数 通过ADS Tool中的Linecalc这个软件来进行初步的计算。 在HFSS中选定版型为Rogers RT/duroid 5880 (tm),如具体参数下图

50Ω微带线计算 得到选取微带线宽度约为0.67mm。 70.7Ω微带线计算 得到选取微带线宽度约为0.34mm,由于微带线电长度与其宽度没有必然联系,所以两个分支微带线的长度根据具体情况进行更改。

2.绘制仿真模型 微带单阶功分器

◆微带参数:w50:阻抗为50Ω的微带线宽度;w2:两分支线宽度; l1,l2,l3,l4:各部分微带线长度; rad1,rad2:各部分分支线长度(即半环半径) ◆在本例中,需要调整的调整关键参数为w2,rad1,空气腔参数随关键参数相应调 整即可。 ◆根据计算,此处的吸收电阻值应该为100Ω,但是在实际情况中,选取97Ω。 微带多阶功分器

算法实验报告

实验一分治与递归算法的应用 一、实验目的 1.掌握分治算法的基本思想(分-治-合)、技巧和效率分析方法。 2.熟练掌握用递归设计分治算法的基本步骤(基准与递归方程)。 3.学会利用分治算法解决实际问题。 二 . 实验内容 金块问题 老板有一袋金块(共n块,n是2的幂(n≥2)),最优秀的雇员得到其中最重的一块,最差的雇员得到其中最轻的一块。假设有一台比较重量的仪器,希望用最少的比较次数找出最重和最轻的金块。并对自己的程序进行复杂性分析。 三.问题分析: 一般思路:假设袋中有n 个金块。可以用函数M a x(程序 1 - 3 1)通过n-1次比较找到最重的金块。找到最重的金块后, 可以从余下的n-1个金块中用类似法通过n-2次比较找出最轻的金块。这样,比较的总次数为2n-3。

分治法:当n很小时,比如说,n≤2,识别出最重和最轻的金块,一次比较就足够了。当n 较大时(n>2),第一步,把这袋金块平分成两个小袋A和B。第二步,分别找出在A和B中最重和最轻的金块。设A中最重和最轻的金块分别为HA 与LA,以此类推,B中最重和最轻的金块分别为HB 和LB。第三步,通过比较HA 和HB,可以找到所有金块中最重的;通过比较LA 和LB,可以找到所有金块中最轻的。在第二步中,若n>2,则递归地应用分而治之方法 程序设计 据上述步骤,可以得出程序1 4 - 1的非递归代码。该程序用于寻找到数组w [ 0 : n - 1 ]中的最小数和最大数,若n < 1,则程序返回f a l s e,否则返回t r u e。 当n≥1时,程序1 4 - 1给M i n和M a x置初值以使w [ M i n ]是最小的重量,w [ M a x ]为最大的重量。 首先处理n≤1的情况。若n>1且为奇数,第一个重量w [ 0 ]将成为最小值和最大值的候选值,因此将有偶,数个重量值w [ 1 : n - 1 ]参与f o r循环。当n 是偶数时,首先将两个重量值放在for 循环外进行比较,较小和较大的重量值分别置为Min和Max,因此也有偶数个重量值w[2:n-1]参与for循环。 在for 循环中,外层if 通过比较确定( w [ i ] , w [ i + 1 ] )中的较大和较小者。此工作与前面提到的分而治之算法步骤中的2) 相对应,而内层的i f负责找出较小重量值和较大重量值中的最小值和最大值,

功分器的设计原理

设计资料项目名称:微带功率分配器设计方法 拟制: 审核: 会签: 批准: 二00六年一月

微带功率分配器设计方法 1. 功率分配器论述: 1.1定义: 功率分配器是一种将一路输入信号能量分成两路或多路信号能量输出的器件,也可反过来将多路信号能量合成一路输出,此时也可称为合路器。 1.2分类: 1.2.1功率分配器按路数分为:2路、3路和4路及通过它们级联形成的多路功率分配器。 1.2.2功率分配器按结构分为:微带功率分配器及腔体功率分配器。 1.2.2根据能量的分配分为:等分功率分配器及不等分功率分配器。 1.2.3根据电路形式可分为:微带线、带状线、同轴腔功率分配器。 1.3概述: 常用的功率分配器都是等功率分配,从电路形式上来分,主要有微带线、带状线、同轴腔功率分配器,几者间的区别如下: (1)同轴腔功分器优点是承受功率大,插损小,缺点是输出端驻波比大,而且输出端口间无任何隔离。微带线、带状线功分器优点是价格便宜,输出端口间有很好的隔离,缺点是插损大,承受功率小。(2)微带线、带状线和同轴腔的实现形式也有所不同:同轴腔功分器是在要求设计的带宽下先对输入端进行匹配,到输出端进行分路;而微带功分器先进行分路,然后对输入端和输出端进行匹配。

下面对微带线、带状线功率分配器的原理及设计方法进行分析。 2.设计原理: 2.1分配原理: 微带线、带状线的功分器设计原理是相同的,只是带状线的采用的是对称性空气填充或介质板填充,而微带线的主要采用的是非对称性部分介质填充和部分空气填充。下面我们以一分二微带线功率分配的设计为例进行分析。传输线的结构如下图所示,它是通过阻抗变换来实现的功率的分配。 图1:一分二功分器示意图 在现有的通信系统中,终端负载均为50Ω,也就是说在分支处的阻抗并联后到阻抗结处应为50Ω。如上图匹配网络,从输入端口看Ω==500Z Z in ,而Ω==50//21in in in Z Z Z ,且是等分的,所以1in Z =2in Z ,①处1in Z 、②处2in Z 的输入阻抗应为100Ω,这样由①、②处到输出终端50Ω需要通过阻抗变换来实现匹配。 2.2阶梯阻抗变换: 在微波电路中,为了解决阻抗不同的元件、器件相互连接而又不使其各自的性能受到严重的影响,常用各种形式的阻抗变换器。其中最简单又最常用的四分之一波长传输线阶梯阻抗变换器(图2)。它

递归与分治实验报告

递归与分治实验报告 班级:计科1102 姓名:赵春晓学号:2011310200631 实验目的:进一步掌握递归与分治算法的设计思想,通过实际问题来应用递归与分治设计算法。 实际问题:1集合划分问题,2输油管道问题,3邮局选址问题,4整数因子分解问题,5众数问题。 问题1:集合划分 算法思想:对于n个元素的集合,可以划分为由m个子集构成的集合,例如{{1,2}{3,4}}就是由2个子集构成的非空子集。假设f(n,m)表示将n个元素划分成由m个子集构成的集合的个数。那么1)若m == 1 ,则f(n,m)= 1 ;2)若n == m ,则f(n,m)= 1 ;3)若不是上面两种情况则有下面两种情况构成:3.1)向n-1个元素划分成的m个集合里面添加一个新的元素,则有m*f(n-1,m)种方法;3.2)向n-1个元素划分成的m-1个集合里添加一个由一个元素形成的独立的集合,则有f(n-1,m-1)种方法。 实验代码: #include #include using namespace std ; int jihehuafen( int n , int m ) { if( m == 1 || n == m ) return 1 ; else return jihehuafen( n - 1 , m - 1 ) + m*jihehuafen( n - 1 , m ) ; } int main() { ifstream fin("C:/input.txt") ; ofstream fout("C:/output.txt") ; int N , M , num ; fin >> N >> M ; num = jihehuafen( N , M) ; fout << num << endl ; return 0 ; } 问题2:输油管道 算法思想:由于主管道由东向西铺设。故主管道的铺设位置只和各油井的y坐标有关。要使主管道的y坐标最小,主管道的位置y坐标应是各个油井y坐标的中位数。先用快速排序法把各个油井的y坐标排序,然后取其中位数再计算各个油

算法设计与分析答案

1. 按分治策略求解棋盘覆盖问题时,对于如图所示的24×24 的特殊棋盘,共需要多少个L 型骨 牌;并在棋盘上填写L 型骨牌的覆盖情况。 2. 假设有7个物品,给出重量和价值。若这些物品均不能被分割,且背包容量M =140,使用回 溯方法求解此0-1背包问题。请画出状态空间搜索树。 3. 假设有7个物品,它们的重量和价值如下表所示。若这些物品均可以被分割,且背包容量M =140,使用贪心算法求解此背包问题。请写出求解策略和求解过程。 W (35,30,50,60,40,10,25)p (10,40,30,50,35,40,30) 4. 在给出的电路板中,阴影部分是已作了封锁标记的方格,请按照队列式分支限界法在图中确定 a 到 b 的最短布线方案,要求布线时只能沿直线或直角进行,在图中标出求得最优解时各方格情况。 5. 画出字符表的哈夫曼编码对应的二叉树。 6. 已知1 ()*()i i k k ij r r A a +=,k =1,2,3,4,5,6,r 1=5,r 2=10,r 3=3,r 4=8,r 5=5,r 6=20,r 7=6,求 矩阵链积A 1×A 2×A 3×A 4×A 5×A 6的最佳求积顺序。 7. 给出城市网络图,售货员要从城市1出发,经过所有城市回到城市1,画出该问题的解空间树, 描述出用优先队列式分支限界法求解时的搜索情况。表示出优先队列、当前扩展结点等的变化情况。 8. 依据优先队列式分支限界法,求从s 点到t 点的单源最短路径,画出求得最优解的解空间树。 一、假设有7个物品,它们的重量和价值如下表所示。若这些物品均不能被分割,且背包容量M =150,使用回溯方法求解此背包问题。请写出状态空间搜索树(20分)。 答:按照单位效益从大到小依次排列这7个物品为:FBGDECA 。将它们的序号分别记为1~7。则可生产如下的状态空间搜索树。其中各个节点处的限界函数值通过如下方式求得:【排序1分】

分治法实验报告一

宁波工程学院电信学院计算机系 实验报告 课程名称:算法设计与分析实验项目:用分治法算法解 最接近点对问题 指导教师:崔迪 实验位置:软件工程实验室姓名: 班级: 学号: 日期: 2016/10/12 一、实验目的 通过上机实验,要求掌握分治法算法的问题描述、算法设计思想、程序设 计和算法复杂性分析等。 二、实验环境: Eclipse 三、实验内容:用分治法解最接近点对问题 (1)问题描述 给定平面S上n个点,找其中的一对点,使得在n(n-1)/2 个点对中,该 点对的距离最小。 (2)算法设计思想 1. n较小时直接求 (n=2). 2.将S上的n个点分成大致相等的2个子集S1和S2 3.分别求S1和S2中的最接近点对 4.求一点在S1、另一点在S2中的最近点对 5.从上述三对点中找距离最近的一对.

(3)程序设计(程序清单及说明) package closestpair; import java.util.Arrays; import https://www.360docs.net/doc/b3624765.html,parator; import java.util.Random; import java.util.Scanner; //定义坐标点 class Point { double x; double y; public Point(double x, double y) { this.x = x; this.y = y; } } // 根据x坐标排序 class MyComparatorX implements Comparator { @Override public int compare(Point p1, Point p2) { if (p1.x < p2.x) { return -1; } else if (p1.x > p2.x) { return 1; } else { return 0; } } } // 根据Y坐标排序 class MyComparatorY implements Comparator { @Override public int compare(Point p1, Point p2) { if (p1.y < p2.y) { return -1; } else if (p1.y > p2.y) { return 1; } else {

《计算机算法设计与分析》习题及答案.doc

《计算机算法设计与分析》习题及答案 一.选择题 1、二分搜索算法是利用( A )实现的算法。 A、分治策略 B、动态规划法 C、贪心法 D、回溯法 2、下列不是动态规划算法基本步骤的是( A )。 A、找出最优解的性质 B、构造最优解 C、算出最优解 D、定义最优解 3、最大效益优先是( A )的一搜索方式。 A、分支界限法 B、动态规划法 C、贪心法 D、回溯法 4. 回溯法解旅行售货员问题时的解空间树是( A )。 A、子集树 B、排列树 C、深度优先生成树 D、广度优先生成树 5.下列算法中通常以自底向上的方式求解最优解的是( B )。 A、备忘录法 B、动态规划法 C、贪心法 D、回溯法 6、衡量一个算法好坏的标准是( C )。 A 运行速度快 B 占用空间少 C 时间复杂度低 D 代码短 7、以下不可以使用分治法求解的是( D )。 A 棋盘覆盖问题 B 选择问题 C 归并排序 D 0/1背包问题 8. 实现循环赛日程表利用的算法是( A )。 A、分治策略 B、动态规划法 C、贪心法 D、回溯法 9.下面不是分支界限法搜索方式的是( D )。 A、广度优先 B、最小耗费优先 C、最大效益优先 D、深度优先 10.下列算法中通常以深度优先方式系统搜索问题解的是( D )。 A、备忘录法 B、动态规划法 C、贪心法 D、回溯法 11.备忘录方法是那种算法的变形。( B ) A、分治法 B、动态规划法 C、贪心法 D、回溯法 12.哈夫曼编码的贪心算法所需的计算时间为( B )。 A、O(n2n) B、O(nlogn) C、O(2n) D、O(n) 13.分支限界法解最大团问题时,活结点表的组织形式是( B )。 A、最小堆 B、最大堆 C、栈 D、数组 14.最长公共子序列算法利用的算法是( B )。 A、分支界限法 B、动态规划法 C、贪心法 D、回溯法 15.实现棋盘覆盖算法利用的算法是( A )。 A、分治法 B、动态规划法 C、贪心法 D、回溯法 16.下面是贪心算法的基本要素的是( C )。 A、重叠子问题 B、构造最优解 C、贪心选择性质 D、定义最优解 17.回溯法的效率不依赖于下列哪些因素( D ) A.满足显约束的值的个数 B. 计算约束函数的时间 C.计算限界函数的时间 D. 确定解空间的时间 18.下面哪种函数是回溯法中为避免无效搜索采取的策略( B ) A.递归函数 B.剪枝函数 C。随机数函数 D.搜索函数 19. ( D )是贪心算法与动态规划算法的共同点。

分治算法实验(用分治法实现快速排序算法)

算法分析与设计实验报告第四次附加实验

while (a[--j]>x); if (i>=j) { break; } Swap(a[i],a[j]); } a[p] = a[j]; //将基准元素放在合适的位置 a[j] = x; return j; } //通过RandomizedPartition函数来产生随机的划分 template vclass Type> int RandomizedPartition(Type a[], int p, int r) { int i = Random(p,r); Swap(a[i],a[p]); return Partition(a,p,r); } 较小个数排序序列的结果: 测试结果 较大个数排序序列的结果:

实验心得 快速排序在之前的数据结构中也是学过的,在几大排序算法中,快速排序和归并排序尤其是 重中之重,之前的快速排序都是给定确定的轴值,所以存在一些极端的情况使得时间复杂度 很高,排序的效果并不是很好,现在学习的一种利用随机化的快速排序算法,通过随机的确 定轴值,从而可以期望划分是较对称 的,减少了出现极端情况的次数,使得排序的效率挺高了很多, 化算法想呼应,而且关键的是对于随机生成函数,通过这一次的 学习终于弄明白是怎么回事了,不错。 与后面的随机实 验和自己的 实验得分助教签名 附录: 完整代码(分治法) //随机后标记元素后的快速排序 #i nclude #in elude #inelude #include using namespacestd; template < class Type> void S &x,Type &y); // 声明swap函数 inline int Random(int x, int y); // 声明内联函数 template < class Type> int Partition(Type a[], int p, int r); // 声明 Partition 函数template int RandomizedPartition(Type a[], int p, int r); // 声明 RandomizedPartition 函数 int a[1000000]; //定义全局变量用来存放要查找的数组 更大个数排序序列的结果:

功分器的设计

功分器现在有如下几种系列[11]: 1、400MHz-500MHz 频率段二、三功分器,应用于常规无线电通讯、铁路通 信以及450MHz 无线本地环路系统。 2、800MHz-2500MHz 频率段二、三、四微带系列功分器,应用于GSM / CDMA/PHS/WLAN 室内覆盖工程。 3、800MHz-2500MHz 频率段二、三、四腔体系列功分器,应用于GSM / CDMA/PHS/WLAN 室内覆盖工程。 4、1700MHz-2500MHz 频率段二、三、四腔体系列功分器,应用于PHS/WLAN 室内覆盖工程。 5、800MHz-1200MHz/1600MHz-2000MHz 频率段小体积设备内使用的微带二、三功分器。 这里介绍几种常见的功分器: 一、威尔金森功分器 我们将两分支线长度由原来的4λ变为43λ,这样使分支线长度变长,但作用效果与4λ线相同。在两分支线之间留出电阻尺寸大小的缝隙,做成如图1-1所示结构。 图1-1 威尔金森功分器 二、变形威尔金森功分器 将威尔金森功分器进行变形,做成如图1-2所示结构。两圆弧长度由原来的4λ变为43λ,且将圆伸展开形成一个近似的半圆。每个支路通过2λ传输线与隔离电阻相连,这样做虽然会减小电路的工作带宽,但使输出耦合问题得到了解决,而且可以用于不对称,功分比高的电路,隔离电阻的放置更加容易,且两支路间的距离足够大,在输出口可直接接芯片。

图1-2 变形威尔金森功分器 三、混合环 混合环又称为环形桥路,它也可作为一种功率分配器使用。早期的混合环 是由矩形波导及其4个E-T 分支构成的,由于体积庞大已被微带或带状线环形桥路所取代。图1-3为制作在介质基片上的微带混合环的几何图形,环的平均周长为 23g λ,环上有四个输出端口,四个端口的中心间距均为4g λ。环路各段归一化特性导纳分别为a, b, c ,四个分支特性导纳均为0Y 。这种形式的 功率分配器具有较宽的带宽,低的驻波比和高的输出功率。理论上来说,它的带宽可以同威尔金森功分器相比。混合环功分器相对威尔金森功分器的优点在于,在实际应用中它在高频率上的性能更好一些。 图1-3 混合环 对比以上三种功分器,首先对比威尔金森功分器及变形威尔金森功分器, 变形威尔金森功分器性能与仿真结果相差较大,其原因可能有以下几点:加入两个21波长微带线,引入了T 型接头,使微带线产生不连续性;为了保证两21波长微带线之间的距离正好可以焊接电阻,两微带线均倾斜,使焊接电阻处微带不均匀,另外电阻焊接的非对称性影响了功分器输出两端的功分比[9]。 威尔金森功分器和混合环的插损性能较好,可以满足一般功率合成的要求。在隔离方面,威尔金森功分器隔离较好,混合环的隔离要稍差。 从上述三种功分器分析可以得出:要获得具有良好性能的微波毫米波功分 器,需保证一定的加工精度,对加隔离电阻的功分器,要特别注意选择尺寸较小的电阻,焊接时要求电阻两端对称,且从电阻反面焊接,也可以考虑使用薄膜电阻来实现。这三种功分器都可以串联用作多路功率分配/合成器。 1.3 本课题研究内容 4g λ4g λ4 g λ43g λ对称平面

计算机算法设计与分析课程设计

成绩评定表

课程设计任务书

摘要 算法分析是对一个算法需要多少计算时间和存储空间作定量的分析。算法(Algorithm)是解题的步骤,可以把算法定义成解一确定类问题的任意一种特殊的方法。在计算机科学中,算法要用计算机算法语言描述,算法代表用计算机解一类问题的精确、有效的方法。 分治法字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。在一个2^k*2^k的棋盘上,恰有一个放歌与其他方格不同,且称该棋盘为特殊棋盘。 回溯法的基本做法是深度优先搜索,是一种组织得井井有条的、能避免不必要重复搜索的穷举式搜索算法。数字拆分问题是指将一个整数划分为多个整数之和的问题。利用回溯法可以很好地解决数字拆分问题。将数字拆分然后回溯,从未解决问题。 关键词:分治法,回溯法,棋盘覆盖,数字拆分 目录 1分治法解决期盼覆问题错误!未定义书签。 问题描述错误!未定义书签。 问题分析错误!未定义书签。 算法设计错误!未定义书签。 算法实现错误!未定义书签。 结果分析错误!未定义书签。 算法分析错误!未定义书签。 2回溯法解决数字拆分问题错误!未定义书签。 问题描述错误!未定义书签。 问题分析错误!未定义书签。 算法设计错误!未定义书签。 算法实现错误!未定义书签。 结果分析错误!未定义书签。 参考文献错误!未定义书签。

1分治法解决期盼覆问题 问题描述 在一个2k×2k(k≥0)个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为特殊方格。显然,特殊方格在棋盘中出现的位置有4k中情形,因而有4k中不同的棋盘,图(a)所示是k=2时16种棋盘中的一个。棋盘覆盖问题要求用图(b)所示的4中不同形状的L型骨牌覆盖给定棋盘上除特殊方格以外的所有方格,且热河亮哥L型骨牌不得重复覆盖 问题分析 用分治策略,可以设计解决棋盘问题的一个简介算法。 当k>0时,可以将2^k *2^k棋盘分割为4个2^k-1 * 2^k-1子棋盘。由棋盘覆盖问题得知,特殊方格必位于4个较小的子棋盘中,其余3个子棋盘中无特殊方格。为了将3个无特殊方格的子棋盘转化为特殊棋盘可以将一个L型骨牌覆盖这3个较小棋盘的会合处,所以,这3个子棋盘上被L型覆盖的方格就成为给棋盘上的特殊方格,从而将原问题转化为4个较小规模的棋盘覆盖问题。递归的使用这种分割,直至棋盘简化为1*1棋盘为止。 。 算法设计 将2^k x 2^k的棋盘,先分成相等的四块子棋盘,其中特殊方格位于四个中的一个,构造剩下没特殊方格三个子棋盘,将他们中的也假一个方格设为特殊方格。如果是: 左上的子棋盘(若不存在特殊方格)----则将该子棋盘右下角的那个方格假设为特殊方格 右上的子棋盘(若不存在特殊方格)----则将该子棋盘左下角的那个方格假设为特殊方格 左下的子棋盘(若不存在特殊方格)----则将该子棋盘右上角的那个方格假设为特殊方格 右下的子棋盘(若不存在特殊方格)----则将该子棋盘左上角的那个方格假设为特殊方格 当然上面四种,只可能且必定只有三个成立,那三个假设的特殊方格刚好构成一个L型骨架,我们可以给它们作上相同的标记。这样四个子棋盘就分别都和原来的大棋盘类似,我们就可以用递归算法解决。 。 算法实现 #include<> int tile=1; int board[100][100]; void chessBoard(int tr, int tc, int dr, int dc, int size) { if(size==1) return; int t=tile++; int s=size/2; if(dr

(完整word版)分治法循环赛日程表实验报告

西北农林科技大学信息工程学院《算法分析与设计》综合训练实习报告 题目:分治法循环赛日程表 学号 姓名 专业班级 指导教师 实践日期2011年5月16日-5月20日

目录 一、综合训练目的与要求 (1) 二、综合训练任务描述 (1) 三、算法设计 (1) 四、详细设计及说明 (3) 五、调试与测试 (4) 六、实习日志 (6) 七、实习总结 (6) 八、附录:核心代码清单 (6)

一、综合训练目的与要求 本综合训练是软件工程专业重要的实践性环节之一,是在学生学习完《算法分析》课程后进行的综合练习。本课综合训练的目的和任务: (1)巩固和加深学生对算法分析课程基本知识的理解和掌握; (2)培养利用算法知识解决实际问题的能力; (3)掌握利用程序设计语言进行算法程序的开发、调试、测试的能力; (4)掌握书写算法设计说明文档的能力; (5)提高综合运用算法、程序设计语言、数据结构知识的能力。 二、综合训练任务描述 假设有n=2k 个运动员要进行网球循环赛。设计一个满足一下要求的比赛日程表:(1)每个选手必须与其他n-1个选手各赛一次 (2)每个选手一天只能赛一次 (3)循环赛一共进行n-1天 利用Java语言开发一个界面,输入运动员的个数,输出比赛日程表。对于输入运动员数目不满足n=2k时,弹出信息提示用户。 三、算法设计 (1) 文字描述 假设n位选手顺序编号为1,2,3……n,比赛的日程表是一个n行n-1列的表格。第i行j列表示第i号选手在第j天的比赛对手,根据分治法,要求n个选手的比赛日程,只要知道其中一半的比赛日程,所以使用递归最终可以分到计算两位选手的比赛日程,然后逐级合并,得出结果。 (2) 框图

相关文档
最新文档