无优先级问题.docx

上传人:b****8 文档编号:10799845 上传时间:2023-02-23 格式:DOCX 页数:8 大小:97.78KB
下载 相关 举报
无优先级问题.docx_第1页
第1页 / 共8页
无优先级问题.docx_第2页
第2页 / 共8页
无优先级问题.docx_第3页
第3页 / 共8页
无优先级问题.docx_第4页
第4页 / 共8页
无优先级问题.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

无优先级问题.docx

《无优先级问题.docx》由会员分享,可在线阅读,更多相关《无优先级问题.docx(8页珍藏版)》请在冰豆网上搜索。

无优先级问题.docx

无优先级问题

皖西学院信息工程系

实验报告

 

姓名__王礼_学号

院系_信息工程系专业计算机科学与技术

年级2007级班级_0702班_

小组实验任务分工_独立完成

实验时间2010年_9_月20_日

实验名称无优先级运算问题

指导老师及职称苏守宝教授

 

皖西学院信息工程系

实验课程:

算法分析与设计

实验名称:

无优先级运算问题(综设型实验)

 

第一部分实验内容

1.实验目标

对于给定的n个正整数,设计一个优先队列式分支限界法用最少的无优先级运算次数产生整数m。

2.实验任务

(1)从所给定的题目中选择一题,使用分支限界法求解之。

(2)用文字来描述你的算法思路,包括解空间、限界函数、算法主要步骤等。

(3)在Windows环境下使用C/C++语言编程实现算法。

(4)记录运行结果,包括输入数据,问题解答及运行时间。

(5)分析算法最坏情况下时间复杂度和空间复杂度。

(6)谈谈实验后的感想,包括关于该问题或类似问题的求解算法的建议。

3.实验设备及环境

PC;C/C++等编程语言。

4.实验主要步骤

(1)根据实验目标,明确实验的具体任务;

(2)设计求解问题的算法,并编写程序实现算法;

(3)设计实验数据并运行程序、记录运行的结果;

(4)分析算法时空性能;

(5)实验后的心得体会。

第二部分问题及算法

1.问题描述:

给定n个正整数和4个运算符+,-,*,/,且运算符无优先级,如2+3×5=25。

对于任意给定的整数m,试设计一个算法,用以上给出的n个数和4个运算符,产生整数m,且用的运算次数最少。

给出的n个数中每个数最多只能用1次,但每种运算符可以任意使用

2.算法设计:

对于给定的n个正整数,设计一个算法,用最少的无优先级运算次数产生整数m。

3.数据输入

由文件input.txt给出输入数据。

第一行有两个正整数n和m。

第二行是给定的用于运算的n个正整数。

4.结果输出

将计算出的产生整数的m的最少无优先级运算次数以及最优无先级运算表达式输出到文件output.txt。

输入文件示例输出文件示例

Input.txtoutput.txt

5252

523672+3*5

第三部分实验结果与分析

1.实验数据及结果

2.实验分析及结论

针对该实验我做了仔细分析,刚看到这个题目,不知所云,后来分析后才知道,给定n个正整数和4个运算符+,-,*,/,且运算符无优先级,如2+3×5=25。

对于任意给定的整数m,试设计一个算法,用以上给出的n个数和4个运算符,产生整数m,且用的运算次数最少。

给出的n个数中每个数最多只能用1次,但每种运算符可以任意使用。

第四部分心得与展望

1.自我评价及心得体会

分析无优先级算法问题时候一开始有点无从下手,经过我查资料以后,再加上自己的分析和见解,以及老师的帮助,最终得出了答案,让我明白了只要自己从分利用自己掌握的技术和周边的坏境比如我们学校的老师,网络资源等,大多问题都可以解决的。

2.展望

对算法产生了浓厚的兴趣,打算以后可能会从事算法设计。

第五部分附录

1.源程序

#include

usingnamespacestd;

intk;

classreadin

{

friendintnreadin(intn,intm);

private:

boolfound();//found判断是否找到解

boolsearch(intt);

intn,m,x;

int*a;//给定的用于运算n个正整数的存放位置

int*num;//存放运算的产生整数m

int*operate;

int*flag;

char*ptr;//存储结果中的运符

};

//用迭代加深的回溯法

boolreadin:

:

search(intdepth)//depth:

递归深度

{

if(depth>k)

{

if(found())

returntrue;//判断结点是否满足件,即是否找到解

else

returnfalse;

}

else

for(inti=0;i

if(flag[i]==0)

{

num[depth]=a[i];

flag[i]=1;

for(intj=0;j<4;j++)

{

operate[depth]=j;

if(search(depth+1))

returntrue;

}

flag[i]=0;

}

returnfalse;

}

boolreadin:

:

found()

{

intx=num[0];

for(inti=0;i

{

switch(operate[i])

{

case0:

x+=num[i+1];ptr[i]='+';break;

case1:

x-=num[i+1];ptr[i]='-';break;

case2:

x*=num[i+1];ptr[i]='*';break;

case3:

x/=num[i+1];ptr[i]='/';break;

}

}

return(x==m);

}

//读入初始数据

intnreadin(intn,intm)

{

readinX;

int*a=newint[n];

int*num=newint[n];

int*operate=newint[n];

int*flag=newint[n];

char*ptr=newchar[n];

X.n=n;

X.m=m;

X.a=a;

X.operate=operate;

X.flag=flag;

X.num=num;

X.ptr=ptr;

cout<<"给定的用于运算的n个正整数:

"<

for(inti=0;i

{

cin>>a[i];

flag[i]=0;

}

cout<<"给定的运算结果整数m:

"<

for(k=0;k

if(X.search(0))

{

cout<<"计算的产生整数m的最少无优先级运算次数:

"<

cout<

cout<<"计算的产生整数m的最少无优先级运表达式:

"<

for(i=0;i<=k;i++)

{

cout<

}

cout<

return0;

}

cout<<"NoSolution!

"<

return0;

}

voidmain()

{

intn;

intm;

cout<<"输入给定的用于运算的n个正整数和给定的运算结果整数m:

"<

cin>>n>>m;

nreadin(n,m);

system("pause");

}

参考文献

1.

2.余祥宣崔国华邹海明.计算机算法基础[M].武汉:

华中科技大学出版社,2005-10

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 中国风

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1