《算法设计与分析》上机指导.docx

上传人:b****5 文档编号:29429603 上传时间:2023-07-23 格式:DOCX 页数:12 大小:19.38KB
下载 相关 举报
《算法设计与分析》上机指导.docx_第1页
第1页 / 共12页
《算法设计与分析》上机指导.docx_第2页
第2页 / 共12页
《算法设计与分析》上机指导.docx_第3页
第3页 / 共12页
《算法设计与分析》上机指导.docx_第4页
第4页 / 共12页
《算法设计与分析》上机指导.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

《算法设计与分析》上机指导.docx

《《算法设计与分析》上机指导.docx》由会员分享,可在线阅读,更多相关《《算法设计与分析》上机指导.docx(12页珍藏版)》请在冰豆网上搜索。

《算法设计与分析》上机指导.docx

《算法设计与分析》上机指导

 

《算法设计与分析》上机指导(05软工)

 

上机常见错误与对策………………………………………………………1

上机指导1……………………………………………………………2

上机指导2……………………………………………………………5

上机指导3……………………………………………………………8

 

计算机与信息学院温敬和

wenjinghe@

上机常见错误与对策

㈠创建工程时,选错工程类型(应选择倒数第三个“Win32ConsoleApplication”);创建源程序文件时,选错文件类型。

㈡要修改程序,应打开工作区(dsw)文件,而不是源程序(cpp)文件。

㈢在VC++系统中,程序是用西文字符(ASCII码)来描述的,汉字只能出现在字符串常数或注释中。

◆请注意汉字双引号和西文双引号的区别

◆请注意汉字单引号和西文单引号的区别

◆请注意汉字分号和西文分号的区别

◆请注意汉字园括号和西文园括号的区别

㈣在一般情况下,一个工作区只有一个工程,一个工程对应一个程序。

当一个程序完成,编制下一个程序时,一定要新建工程(不要修改系统默认设置“创建新工作区”)。

最简单的方法是:

退出VC++集成环境后,重新进入VC++。

㈤当系统出现不可解释的现象时,此时应选择“编译”→“重建全部”,然后执行。

若还不行,则重新启动计算机,利用硬盘保护卡功能恢复系统。

操作步骤:

◆重新启动计算机后,出现菜单画面。

◆选中“Windows2000Professional”。

◆在按住“Ctrl”键的同时,按“R”健。

◆对于系统提问,按“Y”键回答。

㈥源程序若有错误,编译系统会在输出区显示错误信息。

由于识别错误能力有限,指示的错误信息有时不一定完全正确,但至少提供了线索。

双击错误信息条目,指针会自动指向出错语句,编程者可逐字符查找错误。

《算法设计与分析》上机指导1

㈠(每个)程序书写要求

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

//*工程名:

103.dsp*

//*程序名:

103.cpp*

//*主要功能:

自底向上合并排序法*

//*学号姓名:

57053001温敬和*

//*编制时间:

2007年7月13日*

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

#include//#include

voidmain()//usingnamespacestd;

{//intmain()

……//{

……//……

……//return0;

}//}

㈡实习内容

习题一(工程名为101、源程序名为101)

选择排序法的伪代码描述如下:

算法1.4SelectionSort(参见Page8)

输入:

数组A[1..n]

输出:

按升序排列的数组A[1..n]

1.fori←1ton-1

2.Selection(i)

3.endfor

过程Selection(i)

1.k←i

2.forj←i+1ton

3.ifA[j]

4.endfor

5.ifk≠ithen交换A[i]和A[k]

用C语言实现上述算法并上机通过。

选做题:

用递归方法(归纳法)实现选择排序法。

习题二(工程名为102、源程序名为102)

插入排序法的伪代码描述如下:

算法1.6InsertionSort(参见Page8-9)

输入:

数组A[1..n]

输出:

按升序排列的数组A[1..n]

1.fori←2ton

2.Insertion(i)

3.endfor

过程Insertion(i)

1.x←A[i]

2.j←i-1

3.while(j>0)and(A[j]>x)

4.A[j+1]←A[j]

5.j←j-1

6.endwhile

7.A[j+1]←x

用C语言实现上述算法并上机通过。

选做题:

用递归方法(归纳法)实现插入排序法。

习题三(工程名为103、源程序名为103)

自底向上合并排序法的伪代码描述如下:

算法1.6BottomUpSort(Page10)

输入:

n个元素的数组A[1..n]

输出:

按升序排列的数组A[1..n]

1.t←1

2.whilet

3.s←t:

t←2s:

i←0

4.whilei+t≤n

5.Merge(A,i+1,i+s,i+t)//Merge(A,p,q,r)

6.i←i+t

7.endwhile

8.ifi+s

9.endwhile//n-i>s表示剩余的元素个数大于被合并的子序列长度

过程Merge(A[1..m],p,q,r)

1.comment:

B[p..r]是个辅助数组//或B[1..m]

2.s←p:

t←q+1:

k←p//s和t分别指向数组A二个子数组元素

3.while(s≤q)and(t≤r)//k指向数组B当前空白元素位置

4.ifA[s]≤A[t]thenB[k]←A[s]:

s←s+1

5.elseB[k]←A[t]:

t←t+1

6.endif

7.k←k+1//指向数组B下一个空白位置

8.endwhile

9.ifs=q+1thenB[k..r]←A[t..r]//说明子数组A[p..q]元素已处理完

10.elseB[k..r]←A[s..q]//否则t=r+1,说明子数组A[q+1..r]已处理完。

11.endif

12.A[p..r]←B[p..r]

用C语言实现上述算法并上机通过。

选做题:

用递归方法(分治法)实现自底向上合并排序法。

㈢提交方式

首先建立个人目录,目录名为“学号姓名”,例“57053001温敬和”。

在目录“57053001温敬和”中,建立子目录1(本次实习)。

在目录“57053001温敬和\1”中,应具有如下文件:

101.cpp、101.exe、102.cpp、102.exe、103.cpp、103.exe

《算法设计与分析》上机指导2

㈠(每个)程序书写要求

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

//*工程名:

103.dsp*

//*程序名:

103.cpp*

//*主要功能:

自底向上合并排序法*

//*学号姓名:

57053001温敬和*

//*编制时间:

2007年7月13日*

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

#include//#include

voidmain()//usingnamespacestd;

{//intmain()

……//{

……//……

……//return0;

}//}

㈡实习内容

习题一(工程名为201、源程序名为201)

快速排序法的伪代码描述如下:

算法6.6QuickSort(参见Page114)

输入:

有n个元素的数组A[1..n]

输出:

按升序排列的数组A[1..n]

1.QuickSort(A,1,n)

过程QuickSort(A[1..n],low,high)

1.iflow

2.w=Split(A,low,high)

3.QuickSort(A,low,w-1)

4.QuickSort(A,w+1,high)

5.ensif

过程procedureSplit(A[1..n],low,high)

1.i←low//初始时i指向A[low]

2.x←A[low]//处理过程中有:

A[low..i]≤x=A[low]

3.forj←low+1tohigh//j指向当前处理的元素

4.ifA[j]≤xthen//处理过程中有:

A[i+1..j]>x=A[low]

5.i←i+1

6.ifi≠jthen互换A[i]和A[j]

7.endif

8.endfor

9.iflow≠ithen互换A[low]和A[i]

10.w←i

11.returnw

用C语言实现上述算法并上机通过。

习题二(工程名为202、源程序名为202)

解最长公共子序列问题的伪代码描述如下:

算法LCSRec(递归算法)

输入:

字符串A和B,设A和B的长度分别为n和m。

输出:

A和B的最长公共子序列的长度

1.LCSRec(n,m)

过程procedureLCSRec(i,j)

1.ifi=0orj=0thenreturn0

2.else

3.ifA[i]=B[j]then

4.returnLCSRec(i-1,j-1)+1

5.else

6.returnmax(LCSRec(i,j-1),LCSRec(i-1,j))

7.endif

8.endif

用C语言实现上述算法并上机通过。

选做题:

给出最长公共子序列问题的非递归算法(动态规划法),并上机通过。

习题三(工程名为203、源程序名为203)

解背包问题的伪代码描述如下:

算法7.4Knapsack(参见Page139)

输入:

背包容量C、物品体积集合S={s1,s2,...,sn}、物品价值集合V={v1,v2,...,vn}

输出:

可装入背包物品的最大总价值

1.fori←0tonV[i,0]←0//背包容量为0

2.forj←0toCV[0,j]←0//背包未装入任何物品

3.fori←1ton

4.forj←1toC

5.ifsi>jthen//物品ui的体积si超过容量j,不装入。

6.V[i,j]←V[i-1,j]//取上一次的计算结果

7.else//物品ui的体积si不超过容量j,可装入。

8.V[i,j]←max(V[i-1,j],V[i-1,j-si]+vi)

9.endif

10.endfor

11.endfor

12.returnV[n,C]//返回最大总价值

用C语言实现上述算法并上机通过。

选做题1:

如何修改算法Knapsack,,使它只需要Θ(C)空间,其中C是背包容量。

选做题2:

给出背包问题的非递归算法,并上机通过。

㈢提交方式

首先建立个人目录,目录名为“学号姓名”,例“57053001温敬和”。

在目录“57053001温敬和”中,建立子目录2(本次实习)。

在目录“57053001温敬和\2”中,应具有如下文件:

201.cpp、201.exe、202.cpp、202.exe、203.cpp、203.exe

《算法设计与分析》上机指导3

㈠(每个)程序书写要求

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

//*工程名:

103.dsp*

//*程序名:

103.cpp*

//*主要功能:

自底向上合并排序法*

//*学号姓名:

57053001温敬和*

//*编制时间:

2007年7月13日*

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

#include//#include

voidmain()//usingnamespacestd;

{//intmain()

……//{

……//……

……//return0;

}//}

㈡实习内容

习题一(工程名为301、源程序名为301)

解最短路径问题的伪代码描述如下:

算法8.1(Page147)

输入:

含权有向图G=(V,E)的邻接矩阵,约定结点1为源。

输出:

G中结点1到其它各结点的最短路径长度

1.X={1}:

Y=V-{1}:

λ[1]=0

2.fory←2ton

3.ify相邻于顶点1thenλ[y]=length[1,y]

4.elseλ[y]=∞

5.endif

6.endfor

7.forj←1ton-1//Y中共有n-1个顶点

8.设y∈Y且λ[y]为最小

9.X←X∪{y}:

Y←Y-{y}//将结点y由集合X移入集合Y

10.for每条边(y,w)

11.ifw∈Yandλ[y]+lengh[y,w]<λ[w]then

12.λ[w]←λ[y]+lengh[y,w]

13.endif

14.endfor

15.endfor

用C语言实现上述算法并上机通过。

习题二(工程名为302、源程序名为302)

解图三着色问题的伪代码描述如下:

输入:

无向图G=(V,E)

输出:

图的结点3着色向量c[1..n],0≤c[j]≤3(1≤j≤n)。

1.c[1..n]←0//c[1..n]为全局量

2.GraphColorRec

(1)

过程GraphColorRec(k)

1.forcolor←1to3

2.c[k]←color

3.ifc[1..k]为合法着色then//部分解或解

4.ifk

5.GraphColorRec(k+1)//进入下一个结点

6.else//是解

7.outputc[1..n]andexit

8.endif

9.endif

10.endfor

11.c[k]=0//回溯前清0,即没有着任何颜色。

用C语言实现上述算法并上机通过。

选做题1:

给出图三着色问题的全部解。

选做题2:

给出图三着色问题的非递归算法,并上机通过。

习题三(工程名为303、源程序名为303)

解4皇后问题的伪代码描述如下:

算法4-QueenRec(递归解)

输入:

输出:

对应于4皇后问题的向量c[1..4](全局量)

1.c[1..4]←0

2.advanced

(1)

过程advanced(k)

1.forcol←1to4//最多只有4列

2.c[k]←col

3.ifc是解then//部分解或解

4.ifk=4then//解

5.outputcandexit

6.else//部分解

7.advanced(k+1)//移至下一行

8.endif

9.endif

10.endfor

11.c[k]←0//返回前清0(回溯)

选做题1:

给出4皇后问题的全部解。

选做题2:

给出4皇后问题的非递归算法,并上机通过。

㈢提交方式

首先建立个人目录,目录名为“学号姓名”,例“57053001温敬和”。

在目录“57053001温敬和”中,建立子目录3(本次实习)。

在目录“57053001温敬和\3”中,应具有如下文件:

301.cpp、301.exe、302.cpp、302.exe、303.cpp、303.exe

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

当前位置:首页 > 成人教育 > 自考

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

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