首页
试卷库
试题库
当前位置:
X题卡
>
所有题目
>
题目详情
用16K×4位的RAM芯片构成64K×4位存储需要______RAM芯片,______根地址线。
查看本题答案
包含此试题的试卷
中级软件设计师《相同项单选集》真题及答案
点击查看
你可能感兴趣的试题
用16K×16位的SRAM芯片构成64K×32位的存储器要求画出该存储器的组成逻辑框图
用16K×4位的RAM芯片构成64K×4位存储需要1RAM芯片2根地址线 2处填
14
15
16
17
用32K×4位的RAM芯片构成256K×32位存储器芯片M至少需要20个RAM芯片若用构成的芯片M来
16
64
2
128
内存地址从AC000H到C7FFFH共有1K个地址单元如果该内存地址按字16位编址由28片存储
4
8
16
24
地址编号从80000H到BFFFFH且按字节编址的内存容量为KB若用16K×4bit的存储器芯
8
16
32
64
用4K×4位的RAM芯片组成一个16K×16位的存储器按字节寻址需要的RAM芯片数和地址线数分别是
74片,14根
16片,15根
16片,16根
32片,15根
若用24K×4位芯片构成64KB的存储器需要
16片
32片
64片
128片
用16K×4位的RAM芯片构成64K×4位存储需要1RAM芯片2根地址线 1处填
2
3
4
5
设用2k×4位的存储器芯片组成16k×8位的存储器地址单元为0000H~3FFFH每个芯片的地址空间
0000H
0800H
2000H
2800H
用8k×8位的存储器芯片组成容量为16k×16位的存储器共需几个芯片共需多少根地址线寻址
2片芯片,14根地址线寻址
4片芯片,14根地址线寻址
2片芯片,15根地址线寻址
4片芯片,15根地址线寻址
设用2K×4位的存储器芯片组成16K×8位的存储器地址单元为0000H~3FFFH每个芯片的地址空间
0000H
0800H
2000H
2800
用16K×4位的RAM芯片构成64K×4位存储需要______RAM芯片______根地址线
14
15
16
17
若内存RAM的容量为64K字长为16位的存储器所采用的芯片16K×1bit的芯片共需个芯片
4×4个
4×32个
4×8个
4×16个
内存地址从AC000H到C7FFFH共有个地址单元如果该内存地址按宇16bit编址由28块芯片
4
8
16
24
用32K×4位的RAM芯片构成256K×32位存储器芯片M至少需要20个RAM芯片若用构成的芯片M来
4
32
64
8
内存地址从AC000H到C7FFFH共有K个地址单元如果该内存地址按字16位编址由28片存储器
4
8
16
24
用32K×4位的RAM芯片构成256K×32位存储器芯片M至少需要6个RAM芯片若用构成的芯片M来存
16
64
2
128
用32K×4位的RAM芯片构成256K×32位存储器芯片M至少需要6个RAM芯片若用构成的芯片M来存
4
32
64
8
设用2K×4位的存储器芯片组成16K×8位的存储器地址单元为0000H~3FFFH每个芯片的地址空间
0000H
0800H
2000H
2800H
用16K×8位的SRAM芯片组成64K×16位的存储器该存储器按16位字编址画出存储器扩展图
热门试题
更多
阅读下列说明和c代码回答问题1至问题3将解答写在对应栏内[说明]某应用中需要对100000个整数元素进行排序每个元素的取值在0~5之间排序算法的基本思想是对每一个元素x确定小于等于x的元素个数记为m将x放在输出元素序列的第m个位置对于元素值重复的情况依次放入第m-1m-2个位置例如如果元素值小于等于4的元素个数有10个其中元素值等于4的元素个数有3个则4应该在输出元素序列的第10个位置第9个位置和第8个位置上算法的具体步骤如下步骤1统计每个元素值的个数步骤2统计小于等于每个元素值的个数步骤3将输入元素序列中的每个元素放入有序的输出元素序列[C代码]下面是该排序算法的c语言实现1常量和变量说明R常量定义元素取值范围中的取值个数如上述应用中R值应取6i循环变量n待排序元素个数a输入数组长度为nb输出数组长度为nc辅助数组长度为R其中每个元素表示小于等于下标所对应的元素值的个数2函数sort1voidsortintninta[]intb[]2intc[R]i3fori=0i<1i++4c[i]=056fori=0i<ni++7c[a[i]]=289fori=1i<Ri++10c[i]=31112fori=0i<ni++13b[c[a[i]]-1]=414c[a[i]]=c[a[i]]-11516根据以上C代码分析该排序算法是否稳定若稳定请简要说明不超过100字若不稳定请修改其中代码使其稳定给出要修改的行号和修改后的代码
阅读下列说明和C函数代码将应填入n处的字句写在对应栏内 [说明] 对二叉树进行遍历是二叉树的一个基本运算遍历是指按某种策略访问二又树的每个结点且每个结点仅访问一次的过程函数InOrder借助栈实现二叉树的非递归中序遍历运算 设二叉树采用二叉链表存储结点类型定义如下 typedefstructBtNode ElemTypedata/*结点的数据域ElemType的具体定义省略*/ structBtNode*lchiid*rchiid/*结点的左右孩子指针域*/ BtNode*BTree 在函数InOrderO中用栈暂存二叉树中各个结点的指针并将栈表示为不含头结点的单向链表简称链栈其结点类型定义如下 typedefstructStNode/*链栈的结点类型*/ BTreeelem/*栈中的元素是指向二叉链表结点的指针*/ StructStNode*link StNode 假设从栈顶到栈底的元素为enen-1…e1则不含头结点的链栈示意图如图21-11所示 [C函数] intInOrderBTreeroot/*实现二叉树的非递归中序遍历*/ BTreeptr/*ptr用于指向二叉树中的结点*/ StNode*q/*q暂存链栈中新创建或待删除的结点指针*/ StNode*stacktop=NULL/*初始化空栈的栈顶指针stacktop*/ ptr=root/*ptr指向二叉树的根结点*/ while1||stacktop!=NULL whileptr!=NULL q=StNode*mallocSizeofStNode ifa==NULL return-1 q->elem=ptr 2 stacktop=q/*stacktop指向新的栈顶*/ ptr=3/*进入左子树*/ q=stacktop 4/*栈顶元素出栈*/ visitq/*visit是访问结点的函数其具体定义省略*/ ptr=5/*进入右子树*/ freeq/*释放原栈顶元素的结点空间*/ return0 /*Inorder*/ 2处填
阅读下列说明回答问题1和问题2将解答填入对应栏内 [说明] 0-1背包问题可以描述为有n个物品i=12…n第i个物品价值为vi重量为wivi和wi为非负数背包容量为WW为非负数选择其中一些物品装入背包使装入背包物品的总价值最大即且总重量不超过背包容量即其中xi∈01xi=0表示第i个物品不放入背包xi=1表示第i个物品放入背包 [问题1] 用回溯法求解此0-1背包问题请填充伪代码中的空缺1~4 回溯法是一种系统的搜索方法在确定解空间后回溯法从根结点开始按照深度优先策略遍历解空间树搜索满足约束条件的解对每一个当前结点若扩展该结点已经不满足约束条件则不再继续扩展为了进一步提高算法的搜索效率往往需要设计一个限界函数判断并剪枝那些即使扩展了也不能得到最优解的结点现在假设已经设计了BOUNDvwkw函数其中vwk和W分别表示当前已经获得的价值当前背包的重量已经确定是否选择的物品数和背包的总容量对应于搜索树中的某个结点该函数值表示确定了部分物品是否选择之后对剩下的物品在满足约束条件的前提下进行选择可能获得的最大价值若该价值小于等于当前已经得到的最优解则该结点无须再扩展 下面给出0-1背包问题的回溯算法伪代码 函数参数说明如下 W背包容量n物品个数w重量数组v价值数组fw获得最大价值时背包的重量fp背包获得的最大价值X问题的最优解 变量说明如下 cw当前的背包重量cp当前获得的价值k当前考虑的物品编号Y当前已获得的部分解 BKNAPWnwvfwfpX 1cw←cp←0 21 3fp←-1 4Whiletrue 5whilek≤nandcw+w[k]≤Wdo 62 7cp←cp+v[k] 8Y[k]←1 9k←k+1 10ifk>nthen 11iffp<cpthen 12fp←cp 13fw←cw 14k←n 15X←Y 16elseYk←0 17whileBOUNDcpcwkW≤fpdo 18whilek≠0andYk≠1do 193 20ifk=0thenreturn 21Y[k]←0 22cw←cw←w[k] 23cp←cp←v[k] 244 [问题2] 考虑表21-3所示的实例假设有3个物品背包容量为22图21-12是根据上述算法构造的搜索树其中结点的编号表示搜索树生成的顺序边上的数字I/O分别表示选择/不选择对应物品除了根结点之外每个左孩子结点旁边的上下两个数字分别表示当前背包的重量和已获得的价值右孩子结点旁边的数字表示扩展了该结点后最多可能获得的价值为获得最优解应该选择物品5获得的价值为6 对于表21-3所示的实例若采用穷举法搜索整个解空间则搜索树的结点数为7而采用上述的回溯法搜索树的结点数为8 1处填
[说明] 图1是某医院组织的结构图该医院分为多个病区每个病区有一个唯一的编号一个病区包括多个病房多名医生每位医生有一个唯一的编号负责管辖其主治病人的所有病房病人住院后给以一个唯一的编号根据“患何病科”住在相应病区的某个病房里有且仅有一位医生担任主治医生除主治医生外其他医生不对其负责 现假定病区名称有“内科”和“外科”“内科”病区又细分为多个病区以编号区分名称都为“内科”“外科”病区亦然图2是经分析得到的E-R图 图1 图2 查询内科病区患胃病的病人的姓名
[说明]目前大多数操作系统都采用虚拟存储技术这样可在较小的可用内存中执行较大的用户程序可在内存中容纳更多程序并发执行引入虚拟存储技术其基本思想是利用大容量的外存来扩充内存产生一个比有限的实际空间大得多逻辑的虚拟内存空间以便能够有效地支持多道程序系统的实现和大型程序运行的需要从而增强系统的处理能力虚拟存储技术主要分为虚拟页式存储管理和虚拟段式存储管理虚拟页式存储管理中在进程开始运行之前不是装入全部页面而是装入一个或零个页面之后根据进程运行的需要动态装入其他页面当内存空间已满而又需要装入新的页面时则根据某种算法淘汰某个页面以便装入新的页面在简单页式存储管理的基础上增加请求调页和页面置换功能使用虚拟页式存储管理时需要在页表中增加以下内容页号驻留号内存块号外存地址访问位修改位其中驻留位又称中断位表示该页是在内存还是在外存访问位表示该页在内存期间是否被访问过修改位表示该页在内存中是否被修改过访问位和修改位可以用来决定置换哪个页面具体由页面置换算法决定执行指令时计算页号与页内地址判断该页在内存吗若在则进行地址映射过程若不在内存则产生缺页中断当发生缺页中断时保存当前进程现场判断有空闲页面吗如有直接调入所需的页面若没有按照某种算法选择一页置换判断该页被修改过吗如果被修改过就必须把它写回磁盘以便更新该页在磁盘上的副本如果该页没有被修改过那么它在磁盘上的副本已经是最新的了则不需要写回调入的所需的页面直接覆盖被淘汰的页调整页表及内存分配表恢复被中断进程现场补充缺页中断处理流程图中的判断1~3[*]
阅读下列说明和c函数将应填入n处的字句写在对应栏内 [说明] 已知集合A和B的元素分别用不含头结点的单链表存储函数Difference用于求解集合A与B的差集并将结果保存在集合A的单链表中例如若集合A=51020152530集合B=5153525如图21-10a所示运算完成后的结果如图21-10b所示 链表结点的结构类型定义如下 typedefstructNode ElemTypeelem structNode*next NodeType [C函数] voidDifferenceNodeType**LANodeType*LB NodeType*pa*pb*pre*q pre=NULL 1 whilepa pb=LB while2 pb=pb->next if3 if!pre *LA=4 else 5=pa->next q=pa pa=pa->next freeq else 6 pa=pa->next 5处填
[说明]若要在N个城市之间建立通信网络只需要N-1条线路即可如何以最低的经济代价建设这个网络是一个网的最小生成树的问题现要在8个城市间建立通信网络其间拓扑结构如图所示边表示城市间通信线路边上标示的是建立该线路的代价无向图用邻接矩阵存储元素的值为对应的权值考虑到邻接矩阵是对称的且对角线上元素均为0故压缩存储只存储上三角元素不包括对角线现用Prim算法生成网络的最小生成树由网络G=VE构造最小生成树T=UTE的Prim算法的基本思想是首先从集合V中任取一顶点放入集合U中然后把所有一个顶点在集合U里另一个顶点在集合V-U里的边中找出权值最小的边uv将边加入TE并将顶点v加入集合U重复上述操作直U=V为止函数中使用的预定义符号如下#defineMAX32768/*无穷大权表示顶点间不连通*/#defineMAXVEX30/*图中顶点数目的最大值*/typedefstructintStartVexStopVex;/*边的起点和终点*/floatweight;/*边的权*/Edge;typedefstructcharvexs[MAXVEX];/*顶点信息*/floatarcs[MAXVEX*MAXVEX-1/2];/*邻接矩阵信息压缩存储*/intn;/*图的顶点个数*/Graph;[函数]voidPrimMSTGraph*pGraphEdgemst[]intijkminvxvy;floatweightminWeight;Edgeedge;fori=0;i<pGraph->n-1;i++mst[i].StartVex=0;mst[i].StopVex=i+1;mst[i].weight=pGraph->arcs[i];fori=0;i<______;i++/*共n-1条边*/minWeight=floatMAX;min=i;/*从所有边vxvy中选出最短的边*/forj=i;j<pGraph->n-1;j++ifmst[j].weight<minWeightminWeight=______;min=j;/*mst[min]最短的边vxvy将mst[min]加入最小生成树*/edge=mst[min];mst[min]=mst[i];met[i]=edge;vx=______;/*vx为刚加入最小生成树的顶点下标*//*调整mst[i+1]到mst[n-1]*/forj=i+1;j<pGraph->n-1;j++vy=mst[j].StopVex;if______/*计算vxvy对应的边在压缩矩阵中的下标*/k=pGraph->n*vy-vy*vy+1/2+vx-vy-1;elsek=pGraph->n*vx-vx*vx+1/2+vy-vx-1;weight=______;ifweight<mst[j].weightmst[j].weight=weight;mst[j].StartVex=vx;
[说明]在多道程序系统中各个程序之间是并发执行的共享系统资源CPU需要在各个运行的程序之间来回地切换这样的话要想描述这些多道的并发活动过程就变得很困难为此操作系统设计者提出了进程的概念进程是具有独立功能的程序关于某个数据集合上的一次动态执行过程是系统进行资源分配和调度的独立单位进程在生命周期结束前处于且仅处于三种基本状态之一运行态Running进程占有CPU并在CPU上运行就绪态Ready一个进程已经具备运行条件但由于无CPU暂时不能运行的状态当调度给其CPU时立即可以运行等待态Blocked指进程因等待某种事件的发生而暂时不能运行的状态即使CPU空闲该进程也不可运行指出如下进程状态转换图图1中状态1~状态3分别是什么状态[*]图1
[说明]某大型旅店为了便于管理欲开发一个客房管理系统希望实现客房预定入住登记帐务结算退房以及将服务项目记入客人帐单旅客包括散客和团体散客预定或入住时需要提供姓名性别身份证和联系电话团体则提供团体名称负责人的姓名性别身份证和联系电话以及团体人数对于散客还要提供换房旅店还提供了很多服务项目比如早餐对每一个入住客人服务列表记录了住宿期间的各项服务包括服务类型日期数量等当然客人也可以不要任何服务旅店的客房有一个唯一的房间号分为不同的类别不同的房间床位数和价格不同为了有效的管理需要记录每天的客房状态客房的状态有空闲占用已预定和维修·客人入住后客房处于占用状态·客人退房后客房处于空闲状态·客人预定后客房处于已预定状态·预定客人入住后客房处于占用状态·预定客人取消预定后客房处于空闲状态·需要维修时客房处于维修状态·维修完成后客房处于空闲状态该系统采用面向对象方法开发系统中的类以及类之间的关系用UML类图表示图1是该系统的类图的一部分图2描述了客房状态的转变情况图1图2在UML中重复度Multiplicity定义了某个类的一个实例可以与另一个类的多少个实例相关联通常把它写成一个表示取值范围的表达式或者一个具体的值例如图1中的类客人和住宿客人端的1表示一个住宿类的实例只能与一个1个客人类的实例相关联住宿类端的0..*表示一个住宿类的实例可以与0个或多个客人类的实例相关请指出图1中1到4的重复度分别为多少
[说明] 现要编写一个画矩形的程序目前有两个画图程序DP1和DP2DP1用函数draw_a_linex1y1x2y2画一条直线DP2则用drawlinex1x2y1y2画一条直线当实例化矩形时确定使用DP1还是DP2为了适应变化包括“不同类型的形状”和“不同类型的画图程序”将抽象部分与实现部分分离使它们可以独立地变化这里“抽象部分”对应“形状”“实现部分”对应“画图”与一般的接口抽象方法与具体实现不同这种应用称为Bridge桥接模式图显示了各个类间的关系 这样系统始终只处理3个对象Shape对象Drawing对象DP1或DP2对象以下是C++语言实现能够正确编译通过 [C++代码] classDP1 public: staticvoiddraw_a_linedoublex1doubley1doublex2doubley2 //省略具体实现 ; classDP2 public: staticvoiddrawlinedoublex1doublex2doubley1doubley2 //省略具体实现 ; classDrawing public: ______voiddrawLinedoublex1doubley1doublex2doubley2=0 ; classViDrawing:publicDrawing public: voiddrawLinedoublex1doubley1doublex2doubley2 DP1∷draw_a_linex1y1x2y2; ; classV2Drawing:publicDrawing public: voiddrawLinedoublex1doubley1doublex2doubley2 ______; ; classShape private: _______dp; public: ShapeDrawing*dp; virtualvoiddraw=0; voiddrawLinedoublex1doubley1doublex2doubley2; ; Shape∷ShapeDrawing*dp _dp:dp; voidShape∷drawLinedoublex1doubley1doublex2doubley2 //画一条直线 ______; classRectangle:publicShape private: double_x1_y1_x2_y2; public: RectangleDrawing*dpdoublex1doubley1 doublex2doubley2; voiddraw; ; Rectangle∷RectangleDrawing*dpdoublex1doubley1doublex2doubley2 :______ _x1=x1;_y1=y1;_x2=x2;_y2=y2 voidRectangle∷draw //省略具体实现
阅读下列说明和c代码回答问题1至问题3将解答写在对应栏内[说明]某应用中需要对100000个整数元素进行排序每个元素的取值在0~5之间排序算法的基本思想是对每一个元素x确定小于等于x的元素个数记为m将x放在输出元素序列的第m个位置对于元素值重复的情况依次放入第m-1m-2个位置例如如果元素值小于等于4的元素个数有10个其中元素值等于4的元素个数有3个则4应该在输出元素序列的第10个位置第9个位置和第8个位置上算法的具体步骤如下步骤1统计每个元素值的个数步骤2统计小于等于每个元素值的个数步骤3将输入元素序列中的每个元素放入有序的输出元素序列[C代码]下面是该排序算法的c语言实现1常量和变量说明R常量定义元素取值范围中的取值个数如上述应用中R值应取6i循环变量n待排序元素个数a输入数组长度为nb输出数组长度为nc辅助数组长度为R其中每个元素表示小于等于下标所对应的元素值的个数2函数sort1voidsortintninta[]intb[]2intc[R]i3fori=0i<1i++4c[i]=056fori=0i<ni++7c[a[i]]=289fori=1i<Ri++10c[i]=31112fori=0i<ni++13b[c[a[i]]-1]=414c[a[i]]=c[a[i]]-11516根据说明和C代码填充C代码中的空缺1~4
阅读下列说明和C代码回答问题1至问题3将解答写在对应栏内 [说明] 堆数据结构定义如下 对于n个元素的关键字序列a1a2…an当且仅当满足下列关系时称其为堆 在一个堆中若堆顶元素为最大元素则称为大顶堆若堆顶元素为最小元素则称为小顶堆堆常用完全二叉树表示图21-16是一个大顶堆的例子 堆数据结构常用于优先队列中以维护由一组元素构成的集合对应于两类堆结构优先队列也有最大优先队列和最小优先队列其中最大优先队列采用大顶堆最小优先队列采用小顶堆以下考虑最大优先队列 假设现已建好大顶堆A且已经实现了调整堆的函数heapifyAnindex 对C代码中需要完善的3个函数说明如下 1heapMaximumA返回大顶堆A中的最大元素 2heapExtractMaxA去掉并返回大项堆A的最大元素将最后一个元素“提前”到堆顶位置并将剩余元素调整成大顶堆 3maxHeapInsertAkey把元素key插入到大顶堆A的最后位置再将A调整成大顶堆 优先队列采用顺序存储方式其存储结构定义如下 #definePARENTii/2 typedefstructarray int*int_arrav//优先队列的存储空间首地址 intarray_size//it先队列的长度 intcapacity//优先队列存储空间的容量 ARRAY [C代码] 1函数heapMaximum intheapMaximumARRAY*Areturn1 2函数heapExtractMax intheapExtractMaxARRAY*A intmax max=A->int_array[0] 2 A->array_size-- heapifyAA->array_size0//将剩余元素调整成大顶堆 returnmax 3函数maxHeapInsert intmaxHeapInsertARRAY*Aintkey inti*p ifA->array_size==A->capacity//存储空间的容量不够时扩充空间 p=int*reallocA->int_arrayA->capacity*2*sizeofint if!preturn-1 A->int_array=p A->capacity=2*A->capacity A->array_size++ i=3 whilei>0&&4 A->int_array[i]=A->int_array[PARENTi] i=PARENTi 5 return0 根据以上C代码函数heapMaximumheapExtractMax和maxHeaplnsert的时间复杂度的紧致上界分别为67和8用0符号表示
[说明] 考务处理系统具有如下功能 1对考生送来的报名单进行检查 2对合格的报名单编好准考证号后将准考证送给考生并将汇总后的考生名单送给阅卷 3对阅卷站送来的成绩清单进行检查并根据考试中心制订的合格标准审定合格者 4制作考生通知单送给考生 5进行成绩分类统计按地区年龄文化程度职业考试级别等分类和试题难度分析产生统计分析表 以下是经分析得到的数据流图及部分数据字典有些地方有待填充假定项层数据流图是正确的图1是顶层数据流图图2是第0层数据流图图3是第1层数据流图其中A是加工1的子图B是加工2的子图 图1 图2 图3 [数据字典] 报名单=地区+序号+姓名+性别+年龄+文化程度+职业+考试级别+通信地址 正式报名单=报名单+准考证号 准考证=地区+序号+姓名+准考证号+考试级别 考生名单=准考证号+考试级别 统计分析表=分类统计表+难度分析表 考生通知单=考试级别+准考证号+姓名+合格标志+通信地址 根据题意指出加工1子图图3A中缺失的数据流的名称并指出该数据流的起点和终点
阅读下列说明回答问题1和问题2将解答填入对应栏内 [说明] 现需要在某城市中选择一个社区建一个大型超市使该城市的其他社区到该超市的距离总和最小用图模型表示该城市的地图其中顶点表示社区边表示社区间的路线边上的权重表示该路线的长度 现设计一个算法来找到该大型超市的最佳位置即在给定图中选择一个顶点使该顶点到其他各顶点的最短路径之和最小首先算法需要求出每个顶点到其他任一顶点的最短路径即需要计算任意两个顶点之间的最短路径然后对每个顶点计算其他各顶点到该顶点的最短路径之和最后选择最短路径之和最小的顶点作为建大型超市的最佳位置 [问题1] 本题采用Floyd-Warshall算法求解任意两个顶点之间的最短路径已知图G的顶点集合为V=12…nW=Wijn*n为权重矩阵 设为从顶点i到顶点j的一条最短路径的权重 当k=0时不存在中间顶点因此当k>0时该最短路径上所有的中间顶点均属于集合12…k 若中间顶点包括顶点k则若中间顶点不包括顶点k则 于是得到如下递归式 因为对于任意路径所有的中间顶点都在集合12…n内因此矩阵给出了任意两个顶点之间的最短路径即对所有ij∈V表示顶点i到顶点j的最短路径 下面是求解该问题的伪代码请填充其中的空缺1~6 伪代码中的主要变量说明如下 W权重矩阵 n图的顶点个数 SP最短路径权重之和数组SP[i]表示顶点i到其他各顶点的最短路径权重之和i取值为1~n min_SP最小的最短路径权重之和 min_v具有最小的最短路径权重之和的顶点 i循环控制变量 j循环控制变量 k循环控制变量 LOCATE-SHCPPINGNALLWn 1D0=W 2for1 3fori=1ton 4forj=1ton 5if 62 7else 83 9fori=1ton 10SP[i]=0 11forj=1ton 124 13min_SP=SP[1] 145 15fori=2ton 16ifmin_SP>SP[i] 17min_SP=SP[i] 18min_v=i 19return6 [问题2] 问题1中伪代码的时间复杂度为7用O符号表示 7处填
阅读下列说明回答问题1和问题2将解答填入对应栏内 [说明] 0-1背包问题可以描述为有n个物品i=12…n第i个物品价值为vi重量为wivi和wi为非负数背包容量为WW为非负数选择其中一些物品装入背包使装入背包物品的总价值最大即且总重量不超过背包容量即其中xi∈01xi=0表示第i个物品不放入背包xi=1表示第i个物品放入背包 [问题1] 用回溯法求解此0-1背包问题请填充伪代码中的空缺1~4 回溯法是一种系统的搜索方法在确定解空间后回溯法从根结点开始按照深度优先策略遍历解空间树搜索满足约束条件的解对每一个当前结点若扩展该结点已经不满足约束条件则不再继续扩展为了进一步提高算法的搜索效率往往需要设计一个限界函数判断并剪枝那些即使扩展了也不能得到最优解的结点现在假设已经设计了BOUNDvwkw函数其中vwk和W分别表示当前已经获得的价值当前背包的重量已经确定是否选择的物品数和背包的总容量对应于搜索树中的某个结点该函数值表示确定了部分物品是否选择之后对剩下的物品在满足约束条件的前提下进行选择可能获得的最大价值若该价值小于等于当前已经得到的最优解则该结点无须再扩展 下面给出0-1背包问题的回溯算法伪代码 函数参数说明如下 W背包容量n物品个数w重量数组v价值数组fw获得最大价值时背包的重量fp背包获得的最大价值X问题的最优解 变量说明如下 cw当前的背包重量cp当前获得的价值k当前考虑的物品编号Y当前已获得的部分解 BKNAPWnwvfwfpX 1cw←cp←0 21 3fp←-1 4Whiletrue 5whilek≤nandcw+w[k]≤Wdo 62 7cp←cp+v[k] 8Y[k]←1 9k←k+1 10ifk>nthen 11iffp<cpthen 12fp←cp 13fw←cw 14k←n 15X←Y 16elseYk←0 17whileBOUNDcpcwkW≤fpdo 18whilek≠0andYk≠1do 193 20ifk=0thenreturn 21Y[k]←0 22cw←cw←w[k] 23cp←cp←v[k] 244 [问题2] 考虑表21-3所示的实例假设有3个物品背包容量为22图21-12是根据上述算法构造的搜索树其中结点的编号表示搜索树生成的顺序边上的数字I/O分别表示选择/不选择对应物品除了根结点之外每个左孩子结点旁边的上下两个数字分别表示当前背包的重量和已获得的价值右孩子结点旁边的数字表示扩展了该结点后最多可能获得的价值为获得最优解应该选择物品5获得的价值为6 对于表21-3所示的实例若采用穷举法搜索整个解空间则搜索树的结点数为7而采用上述的回溯法搜索树的结点数为8 5处填
阅读下列说明回答问题1和问题2将解答填入对应栏内 [说明] 0-1背包问题可以描述为有n个物品i=12…n第i个物品价值为vi重量为wivi和wi为非负数背包容量为WW为非负数选择其中一些物品装入背包使装入背包物品的总价值最大即且总重量不超过背包容量即其中xi∈01xi=0表示第i个物品不放入背包xi=1表示第i个物品放入背包 [问题1] 用回溯法求解此0-1背包问题请填充伪代码中的空缺1~4 回溯法是一种系统的搜索方法在确定解空间后回溯法从根结点开始按照深度优先策略遍历解空间树搜索满足约束条件的解对每一个当前结点若扩展该结点已经不满足约束条件则不再继续扩展为了进一步提高算法的搜索效率往往需要设计一个限界函数判断并剪枝那些即使扩展了也不能得到最优解的结点现在假设已经设计了BOUNDvwkw函数其中vwk和W分别表示当前已经获得的价值当前背包的重量已经确定是否选择的物品数和背包的总容量对应于搜索树中的某个结点该函数值表示确定了部分物品是否选择之后对剩下的物品在满足约束条件的前提下进行选择可能获得的最大价值若该价值小于等于当前已经得到的最优解则该结点无须再扩展 下面给出0-1背包问题的回溯算法伪代码 函数参数说明如下 W背包容量n物品个数w重量数组v价值数组fw获得最大价值时背包的重量fp背包获得的最大价值X问题的最优解 变量说明如下 cw当前的背包重量cp当前获得的价值k当前考虑的物品编号Y当前已获得的部分解 BKNAPWnwvfwfpX 1cw←cp←0 21 3fp←-1 4Whiletrue 5whilek≤nandcw+w[k]≤Wdo 62 7cp←cp+v[k] 8Y[k]←1 9k←k+1 10ifk>nthen 11iffp<cpthen 12fp←cp 13fw←cw 14k←n 15X←Y 16elseYk←0 17whileBOUNDcpcwkW≤fpdo 18whilek≠0andYk≠1do 193 20ifk=0thenreturn 21Y[k]←0 22cw←cw←w[k] 23cp←cp←v[k] 244 [问题2] 考虑表21-3所示的实例假设有3个物品背包容量为22图21-12是根据上述算法构造的搜索树其中结点的编号表示搜索树生成的顺序边上的数字I/O分别表示选择/不选择对应物品除了根结点之外每个左孩子结点旁边的上下两个数字分别表示当前背包的重量和已获得的价值右孩子结点旁边的数字表示扩展了该结点后最多可能获得的价值为获得最优解应该选择物品5获得的价值为6 对于表21-3所示的实例若采用穷举法搜索整个解空间则搜索树的结点数为7而采用上述的回溯法搜索树的结点数为8 7处填
阅读下列说明和C代码回答问题1至问题3将解答写在对应栏内 [说明] 对有向图进行拓扑排序的方法如下 1初始时拓扑序列为空 2任意选择一个入度为0的顶点将其放入拓扑序列中同时从图中删除该顶点以及从该顶点出发的弧 3重复2直到不存在入度为0的顶点为止若所有顶点都进入拓扑序列则完成拓扑排序否则由于有向图中存在回路无法完成拓扑排序 函数int*TopSortLinkedDigraphG的功能是对有向图G中的顶点进行拓扑排序返回拓扑序列中的顶点编号序列若不能完成拓扑排序则返回空指针其中图G中的项点从1开始依次编号顶点序列为v1v2…vn图G采用邻接表表示其数据类型定义如下 #defineMAXVNUM50/*最大顶点数*/ typedefstructArcNode/*表结点类型*/ intadjvex/*邻接顶点编号*/ StructArcNode*nextarc/*指示下一个邻接顶点*/ ArcNode typedefstructAdjList/*头结点类型*/ charvdata/*顶点的数据信息*/ ArcNode*firstarc/*指向邻接表的第一个表结点*/ AdjList typedefstructLinkedDigraph/*图的类型*/ intn/*图中顶点个数*/ AdjListVhead[MAXVNUM]/*所有顶点的头结点数组*/ LinkedDigraph 例如某有向图G如图21-13所示其邻接表如图21-14所示 函数TopSort中用到了队列结构Queue的定义省略实现队列基本操作的函数原型如表21-4所示 [C代码] int*TopSortLinkedDigraphG ArcNode*p/*临时指针指示表结点*/ QueueQ/*临时队列保存入度为0的顶点编号*/ intk=0/*临时变量用作数组元素的下标*/ intj=0w=0/*临时变量用作顶点编号*/ int*topOrder*inDegree topOrder=int*mallocG.n+1*sizeofint/*存储拓扑序列中的顶点编号*/ inDegree=int*mallocG.n+1*siZeofint/*存储图G中各顶点的入度*/ if!inDegree||!topOrderreturnNULL 1/*构造一个空队列*/ forj=1j<=G.nj++/*初始化*/ topOrder[j]=0inDegree[j]=0 forj=1j<=G.nj++/*求图G中各顶点的入度*/ forp=G.Vhead[j].firstarcpp=p->nextarc inDegree[p->adjvex]+=1 forj=1j<=G.nj++/*将图G中入度为0的顶点保存在队列中*/ if0==inDegree[j]EnQueue&Qj while!IsEmptyQ 2/*队头顶点出队列并用W保存该顶点的编号*/ topOrder[k++]=w /*将顶点w的所有邻接顶点的入度减1模拟删除顶点W及从该顶点出发的弧的操作*/ forp=G.Vhead[w].firstarepp=p->nextarc 3-=1 if0==4EnQueue&Qp->adjvex /*for*/ /*while*/ freeinDegree if5 returnNULL returntopOrder /*TopSort*/ 设某有向无环图的顶点个数为n弧数为e那么用邻接表存储该图时实现上述拓扑排序算法的函数TopSort的时间复杂度为6若有向图采用邻接矩阵表示例如图21-13所示的有向图的邻接矩阵如图21-15所示且将函数TopSort中有关邻接表的操作修改为针对邻接矩阵的操作那么对于有n个顶点e条弧的有向无环图实现上述拓扑排序算法的时间复杂度为7[*]
[说明]在多道程序系统中各个程序之间是并发执行的共享系统资源CPU需要在各个运行的程序之间来回地切换这样的话要想描述这些多道的并发活动过程就变得很困难为此操作系统设计者提出了进程的概念进程是具有独立功能的程序关于某个数据集合上的一次动态执行过程是系统进行资源分配和调度的独立单位进程调度算法解决以何种次序对各就绪进程进行处理机的分配以及按何种时间比例让进程占用处理机常见的的调度算法有先进先出FIFO按照进程进入就绪队列的的先后次序选择时间片轮转RR进程轮流运行一个时间片最高优先级HPF分配给具有最高优先级的就绪进程在实际系统中调度模式往往是几种调度算法的结合某系统按优先级别设置若干个就绪队列对级别较高的队列分配较小的时间片Sii=12n即有S1<S2<<Sn除第n级队列是按RR法调度之外其他各级队列均按FIFO调度系统总是先调度级别较高的队列中的进程仅当该队列为空时才去调度下一级队列中的进程当执行进程用完其时间片时便被剥夺并进入下一级就绪队列当等待进程被唤醒时它进入其优先级相应的就绪队列若其优先级高于执行进程便抢占CPU执行进程现有五个进程P1P2P3P4P5它们同时依次进入就绪队列它们所需的CPU时间和优先级如表所示注意优先数越大优先级越低进程CPU时间优先数P1103P211P323P414P552在该系统中假定不同级别的时间片为Si=2i-1i为优先数请给出五个进程的CPU占用序列并注明每次占用所用的时间
阅读下列说明和C代码回答问题1至问题3将解答写在对应栏内 [说明] 对有向图进行拓扑排序的方法如下 1初始时拓扑序列为空 2任意选择一个入度为0的顶点将其放入拓扑序列中同时从图中删除该顶点以及从该顶点出发的弧 3重复2直到不存在入度为0的顶点为止若所有顶点都进入拓扑序列则完成拓扑排序否则由于有向图中存在回路无法完成拓扑排序 函数int*TopSortLinkedDigraphG的功能是对有向图G中的顶点进行拓扑排序返回拓扑序列中的顶点编号序列若不能完成拓扑排序则返回空指针其中图G中的项点从1开始依次编号顶点序列为v1v2…vn图G采用邻接表表示其数据类型定义如下 #defineMAXVNUM50/*最大顶点数*/ typedefstructArcNode/*表结点类型*/ intadjvex/*邻接顶点编号*/ StructArcNode*nextarc/*指示下一个邻接顶点*/ ArcNode typedefstructAdjList/*头结点类型*/ charvdata/*顶点的数据信息*/ ArcNode*firstarc/*指向邻接表的第一个表结点*/ AdjList typedefstructLinkedDigraph/*图的类型*/ intn/*图中顶点个数*/ AdjListVhead[MAXVNUM]/*所有顶点的头结点数组*/ LinkedDigraph 例如某有向图G如图21-13所示其邻接表如图21-14所示 函数TopSort中用到了队列结构Queue的定义省略实现队列基本操作的函数原型如表21-4所示 [C代码] int*TopSortLinkedDigraphG ArcNode*p/*临时指针指示表结点*/ QueueQ/*临时队列保存入度为0的顶点编号*/ intk=0/*临时变量用作数组元素的下标*/ intj=0w=0/*临时变量用作顶点编号*/ int*topOrder*inDegree topOrder=int*mallocG.n+1*sizeofint/*存储拓扑序列中的顶点编号*/ inDegree=int*mallocG.n+1*siZeofint/*存储图G中各顶点的入度*/ if!inDegree||!topOrderreturnNULL 1/*构造一个空队列*/ forj=1j<=G.nj++/*初始化*/ topOrder[j]=0inDegree[j]=0 forj=1j<=G.nj++/*求图G中各顶点的入度*/ forp=G.Vhead[j].firstarcpp=p->nextarc inDegree[p->adjvex]+=1 forj=1j<=G.nj++/*将图G中入度为0的顶点保存在队列中*/ if0==inDegree[j]EnQueue&Qj while!IsEmptyQ 2/*队头顶点出队列并用W保存该顶点的编号*/ topOrder[k++]=w /*将顶点w的所有邻接顶点的入度减1模拟删除顶点W及从该顶点出发的弧的操作*/ forp=G.Vhead[w].firstarepp=p->nextarc 3-=1 if0==4EnQueue&Qp->adjvex /*for*/ /*while*/ freeinDegree if5 returnNULL returntopOrder /*TopSort*/ 根据以上说明和C代码填充C代码中的空1~5
阅读下列说明回答问题1和问题2将解答填入对应栏内 [说明] 现需要在某城市中选择一个社区建一个大型超市使该城市的其他社区到该超市的距离总和最小用图模型表示该城市的地图其中顶点表示社区边表示社区间的路线边上的权重表示该路线的长度 现设计一个算法来找到该大型超市的最佳位置即在给定图中选择一个顶点使该顶点到其他各顶点的最短路径之和最小首先算法需要求出每个顶点到其他任一顶点的最短路径即需要计算任意两个顶点之间的最短路径然后对每个顶点计算其他各顶点到该顶点的最短路径之和最后选择最短路径之和最小的顶点作为建大型超市的最佳位置 [问题1] 本题采用Floyd-Warshall算法求解任意两个顶点之间的最短路径已知图G的顶点集合为V=12…nW=Wijn*n为权重矩阵 设为从顶点i到顶点j的一条最短路径的权重 当k=0时不存在中间顶点因此当k>0时该最短路径上所有的中间顶点均属于集合12…k 若中间顶点包括顶点k则若中间顶点不包括顶点k则 于是得到如下递归式 因为对于任意路径所有的中间顶点都在集合12…n内因此矩阵给出了任意两个顶点之间的最短路径即对所有ij∈V表示顶点i到顶点j的最短路径 下面是求解该问题的伪代码请填充其中的空缺1~6 伪代码中的主要变量说明如下 W权重矩阵 n图的顶点个数 SP最短路径权重之和数组SP[i]表示顶点i到其他各顶点的最短路径权重之和i取值为1~n min_SP最小的最短路径权重之和 min_v具有最小的最短路径权重之和的顶点 i循环控制变量 j循环控制变量 k循环控制变量 LOCATE-SHCPPINGNALLWn 1D0=W 2for1 3fori=1ton 4forj=1ton 5if 62 7else 83 9fori=1ton 10SP[i]=0 11forj=1ton 124 13min_SP=SP[1] 145 15fori=2ton 16ifmin_SP>SP[i] 17min_SP=SP[i] 18min_v=i 19return6 [问题2] 问题1中伪代码的时间复杂度为7用O符号表示 3处填
阅读下列说明回答问题1和问题2将解答填入对应栏内 [说明] 现需要在某城市中选择一个社区建一个大型超市使该城市的其他社区到该超市的距离总和最小用图模型表示该城市的地图其中顶点表示社区边表示社区间的路线边上的权重表示该路线的长度 现设计一个算法来找到该大型超市的最佳位置即在给定图中选择一个顶点使该顶点到其他各顶点的最短路径之和最小首先算法需要求出每个顶点到其他任一顶点的最短路径即需要计算任意两个顶点之间的最短路径然后对每个顶点计算其他各顶点到该顶点的最短路径之和最后选择最短路径之和最小的顶点作为建大型超市的最佳位置 [问题1] 本题采用Floyd-Warshall算法求解任意两个顶点之间的最短路径已知图G的顶点集合为V=12…nW=Wijn*n为权重矩阵 设为从顶点i到顶点j的一条最短路径的权重 当k=0时不存在中间顶点因此当k>0时该最短路径上所有的中间顶点均属于集合12…k 若中间顶点包括顶点k则若中间顶点不包括顶点k则 于是得到如下递归式 因为对于任意路径所有的中间顶点都在集合12…n内因此矩阵给出了任意两个顶点之间的最短路径即对所有ij∈V表示顶点i到顶点j的最短路径 下面是求解该问题的伪代码请填充其中的空缺1~6 伪代码中的主要变量说明如下 W权重矩阵 n图的顶点个数 SP最短路径权重之和数组SP[i]表示顶点i到其他各顶点的最短路径权重之和i取值为1~n min_SP最小的最短路径权重之和 min_v具有最小的最短路径权重之和的顶点 i循环控制变量 j循环控制变量 k循环控制变量 LOCATE-SHCPPINGNALLWn 1D0=W 2for1 3fori=1ton 4forj=1ton 5if 62 7else 83 9fori=1ton 10SP[i]=0 11forj=1ton 124 13min_SP=SP[1] 145 15fori=2ton 16ifmin_SP>SP[i] 17min_SP=SP[i] 18min_v=i 19return6 [问题2] 问题1中伪代码的时间复杂度为7用O符号表示 5处填
阅读下列说明回答问题1和问题2将解答填入对应栏内 [说明] 现需要在某城市中选择一个社区建一个大型超市使该城市的其他社区到该超市的距离总和最小用图模型表示该城市的地图其中顶点表示社区边表示社区间的路线边上的权重表示该路线的长度 现设计一个算法来找到该大型超市的最佳位置即在给定图中选择一个顶点使该顶点到其他各顶点的最短路径之和最小首先算法需要求出每个顶点到其他任一顶点的最短路径即需要计算任意两个顶点之间的最短路径然后对每个顶点计算其他各顶点到该顶点的最短路径之和最后选择最短路径之和最小的顶点作为建大型超市的最佳位置 [问题1] 本题采用Floyd-Warshall算法求解任意两个顶点之间的最短路径已知图G的顶点集合为V=12…nW=Wijn*n为权重矩阵 设为从顶点i到顶点j的一条最短路径的权重 当k=0时不存在中间顶点因此当k>0时该最短路径上所有的中间顶点均属于集合12…k 若中间顶点包括顶点k则若中间顶点不包括顶点k则 于是得到如下递归式 因为对于任意路径所有的中间顶点都在集合12…n内因此矩阵给出了任意两个顶点之间的最短路径即对所有ij∈V表示顶点i到顶点j的最短路径 下面是求解该问题的伪代码请填充其中的空缺1~6 伪代码中的主要变量说明如下 W权重矩阵 n图的顶点个数 SP最短路径权重之和数组SP[i]表示顶点i到其他各顶点的最短路径权重之和i取值为1~n min_SP最小的最短路径权重之和 min_v具有最小的最短路径权重之和的顶点 i循环控制变量 j循环控制变量 k循环控制变量 LOCATE-SHCPPINGNALLWn 1D0=W 2for1 3fori=1ton 4forj=1ton 5if 62 7else 83 9fori=1ton 10SP[i]=0 11forj=1ton 124 13min_SP=SP[1] 145 15fori=2ton 16ifmin_SP>SP[i] 17min_SP=SP[i] 18min_v=i 19return6 [问题2] 问题1中伪代码的时间复杂度为7用O符号表示 1处填
[说明] 移动电话是传统固定式电话的延伸通过无线电网络可以与千里之外的朋友沟通而不受电话线的束缚现在的移动电话功能更全面除了作为电话使用外还可以发送短信可以管理电话簿可以下载铃声图案 手机由键盘显示屏以及移动通信设备组成移动通信设备负责发送和接收信号与基站进行连线打电话的流程如下 1用户拨电话号码每按下一个数字键显示屏上显示相应数字 2按OK键进行连线显示屏上显示“连线中…”请连接基站基站通过移动电话网络连接到对方手机若有误则返回相关信息 3接通后显示屏显示“连线成功” 4打电话结束后按Cancel送出断线信号通知移动电话基站断线基站切断连接显示屏显示“断线成功” 该系统采用面向对象方法开发系统中的类以及类之间的关系用UML类图表示图1是该系统的用例图图2是该系统的类图图3描述了打电话包括断开的序列图 图1 图2 图3 根据题意用题中及类图中提供的术语指出图1中的参与者A及用例BC各是什么
[说明]有个关于运动会的管理系统在该系统中委员会为每一个参赛的运动员赋以一个唯一的编号运动员号同时记录姓名性别年龄和队名姓名和队名必须填写一个运动员属于且只属于一个队一个运动员可以参赛多个项目运动员参加比赛取得一个成绩相应有一个积分第一名积分6分第二名积分4分第三名积分2分其他的没有积分一个队的总积分是该队的所有队员的积分之和下图是该系统的E-R图图中的实体和属性同时给出了中英文两种名字回答问题时只需写出英文名即可假定Games表存储参赛情况如下的SQL语句是委员会用于查询队名为‘China’的各个运动员各自夺取得的总积分的不完整语句请在空缺处填入正确的内容SELECT______FROMGamesWHEREANo______SELECTANoFROM______WHEREATeam=ChinaGROUPBYANo;
[说明]有个关于运动会的管理系统在该系统中委员会为每一个参赛的运动员赋以一个唯一的编号运动员号同时记录姓名性别年龄和队名姓名和队名必须填写一个运动员属于且只属于一个队一个运动员可以参赛多个项目运动员参加比赛取得一个成绩相应有一个积分第一名积分6分第二名积分4分第三名积分2分其他的没有积分一个队的总积分是该队的所有队员的积分之和下图是该系统的E-R图图中的实体和属性同时给出了中英文两种名字回答问题时只需写出英文名即可根据E-R图中给出的词汇按照有关模式名属性属性...的格式将此E-R图转换为3个关系模式指出每个关系模式中的主码和外码其中模式名根据需要取实体名或联系名
阅读下列说明和C函数代码将应填入n处的字句写在对应栏内 [说明] 对二叉树进行遍历是二叉树的一个基本运算遍历是指按某种策略访问二又树的每个结点且每个结点仅访问一次的过程函数InOrder借助栈实现二叉树的非递归中序遍历运算 设二叉树采用二叉链表存储结点类型定义如下 typedefstructBtNode ElemTypedata/*结点的数据域ElemType的具体定义省略*/ structBtNode*lchiid*rchiid/*结点的左右孩子指针域*/ BtNode*BTree 在函数InOrderO中用栈暂存二叉树中各个结点的指针并将栈表示为不含头结点的单向链表简称链栈其结点类型定义如下 typedefstructStNode/*链栈的结点类型*/ BTreeelem/*栈中的元素是指向二叉链表结点的指针*/ StructStNode*link StNode 假设从栈顶到栈底的元素为enen-1…e1则不含头结点的链栈示意图如图21-11所示 [C函数] intInOrderBTreeroot/*实现二叉树的非递归中序遍历*/ BTreeptr/*ptr用于指向二叉树中的结点*/ StNode*q/*q暂存链栈中新创建或待删除的结点指针*/ StNode*stacktop=NULL/*初始化空栈的栈顶指针stacktop*/ ptr=root/*ptr指向二叉树的根结点*/ while1||stacktop!=NULL whileptr!=NULL q=StNode*mallocSizeofStNode ifa==NULL return-1 q->elem=ptr 2 stacktop=q/*stacktop指向新的栈顶*/ ptr=3/*进入左子树*/ q=stacktop 4/*栈顶元素出栈*/ visitq/*visit是访问结点的函数其具体定义省略*/ ptr=5/*进入右子树*/ freeq/*释放原栈顶元素的结点空间*/ return0 /*Inorder*/ 4处填
[说明] 图1是某医院组织的结构图该医院分为多个病区每个病区有一个唯一的编号一个病区包括多个病房多名医生每位医生有一个唯一的编号负责管辖其主治病人的所有病房病人住院后给以一个唯一的编号根据“患何病科”住在相应病区的某个病房里有且仅有一位医生担任主治医生除主治医生外其他医生不对其负责 现假定病区名称有“内科”和“外科”“内科”病区又细分为多个病区以编号区分名称都为“内科”“外科”病区亦然图2是经分析得到的E-R图 图1 图2 实体间的联系有一对一一对多和多对多指出图2中各联系分别属于哪一种
阅读下列说明回答问题1和问题2将解答填入对应栏内 [说明] 0-1背包问题可以描述为有n个物品i=12…n第i个物品价值为vi重量为wivi和wi为非负数背包容量为WW为非负数选择其中一些物品装入背包使装入背包物品的总价值最大即且总重量不超过背包容量即其中xi∈01xi=0表示第i个物品不放入背包xi=1表示第i个物品放入背包 [问题1] 用回溯法求解此0-1背包问题请填充伪代码中的空缺1~4 回溯法是一种系统的搜索方法在确定解空间后回溯法从根结点开始按照深度优先策略遍历解空间树搜索满足约束条件的解对每一个当前结点若扩展该结点已经不满足约束条件则不再继续扩展为了进一步提高算法的搜索效率往往需要设计一个限界函数判断并剪枝那些即使扩展了也不能得到最优解的结点现在假设已经设计了BOUNDvwkw函数其中vwk和W分别表示当前已经获得的价值当前背包的重量已经确定是否选择的物品数和背包的总容量对应于搜索树中的某个结点该函数值表示确定了部分物品是否选择之后对剩下的物品在满足约束条件的前提下进行选择可能获得的最大价值若该价值小于等于当前已经得到的最优解则该结点无须再扩展 下面给出0-1背包问题的回溯算法伪代码 函数参数说明如下 W背包容量n物品个数w重量数组v价值数组fw获得最大价值时背包的重量fp背包获得的最大价值X问题的最优解 变量说明如下 cw当前的背包重量cp当前获得的价值k当前考虑的物品编号Y当前已获得的部分解 BKNAPWnwvfwfpX 1cw←cp←0 21 3fp←-1 4Whiletrue 5whilek≤nandcw+w[k]≤Wdo 62 7cp←cp+v[k] 8Y[k]←1 9k←k+1 10ifk>nthen 11iffp<cpthen 12fp←cp 13fw←cw 14k←n 15X←Y 16elseYk←0 17whileBOUNDcpcwkW≤fpdo 18whilek≠0andYk≠1do 193 20ifk=0thenreturn 21Y[k]←0 22cw←cw←w[k] 23cp←cp←v[k] 244 [问题2] 考虑表21-3所示的实例假设有3个物品背包容量为22图21-12是根据上述算法构造的搜索树其中结点的编号表示搜索树生成的顺序边上的数字I/O分别表示选择/不选择对应物品除了根结点之外每个左孩子结点旁边的上下两个数字分别表示当前背包的重量和已获得的价值右孩子结点旁边的数字表示扩展了该结点后最多可能获得的价值为获得最优解应该选择物品5获得的价值为6 对于表21-3所示的实例若采用穷举法搜索整个解空间则搜索树的结点数为7而采用上述的回溯法搜索树的结点数为8 3处填
[说明]图书管理系统旨在用计算机对图书进行管理包括图书的购入借阅归还以及注销管理人员可以查询某位读者某种图书的借阅情况还可以对当前图书借阅情况进行一些统计给出统计表格以便掌握图书的流通情况系统要实现以下四方面的功能购入新书读者借书读者还书以及图书注销1购入新书需要为该书编制图书卡片包括分类目录号图书流水号要保证每本书都有唯一的流水号即使同类图书也是如此书名作者内容摘要价格和购书日期等信息写入图书目录文件中2读者借书填写借书单包括读者号欲借图书分类目录号系统首先检查该读者号是否有效若无效则拒绝借书否则进一步检查该读者所借图书是否超过最大限制数若已达到最大借阅数则拒绝借书否则读者可以借出该书登记图书分类目录号图书流水号读者号和借阅日期等写回到借书文件中去3读者还书根据图书流水号从借书占文件中读出和该图书相关的借阅记录表明还书日期再写回借书文件中如果图书逾期未还则处以相应罚款4图书注销将一些过时或无保留价值的图书注销从图书文件中删除相关记录5流通查询管理员可以对图书流通情况进行查询包括某位读者某种图书和全局图书给出流通情况统计表以下是经分析得到的数据流图及部分数据字典有些地方有待填充假定顶层数据流图是正确的图1是顶层数据流图图2是第0层数据流图图3是第1层数据流图图1图2图3[数据字典]1数据流条目图书管理要求=[入库单|借书单|还书单|注销单]入库单=分类目录号+数量+书名+作者+内容摘要+价格+购书日期借书单=读者号+d+借阅日期还书单=e+还书日期2文件说明文件名目录文件组成分类目录号+书名+作者+内容摘要+价格+入库日期+总数+库存数+f将下述文件正确填充在数据流图bc处读者文件借书文件
[说明]现有一个显示系统要显示的图形有线Line矩形Square抽象出一个Shape类接口有方法显示display需要新增图形Circle又已知有类XXCircle实现了所需要实现的功能显示displayIt为了继承自Shape以提供统一接口又不希望从头开发代码希望使用XXCircle这样将XXCircle作为Circle的一个属性即Circle的对象包含一个XXCircle对象当一个Circle对象被实例化时它必须实例化一个相应的XXCircle对象当Circle对象收到的做任何事的请求都将转发给这个XXCircle对象通过这种称为Adapter模式Circle对象就可以通过让XXCircle做实际工作来表现自己的行为了图显示了各个类间的关系以下是JAVA语言实现能够正确编译通过[Java代码]//Shape.jav__件publicinterfaceShapepublic______voiddisplay;//XXCircle.jav__件publicclassxxCirclepublicvoiddisplayIt//省略具体实现//circle.jav__件publicclassCircle______ShapeprivateXXCirclepcx=______;publicvoiddisplaypcx.displayIt;//mactory.jav__件publicclassFactorypublic______getShapeInstanceinttypeswitchtypecase1:returnnewLine;case2:returnnewSquare;case3:returnnewCircle;default:returnnull;//Main.jav__件publicclassMainpublicstaticvoidmainString[]argsinttype=1;Factoryfactory=newFactory;Shapes;s=factory.______;ifs==nullSystem.out.printlnErrorgettheinstance!;return;s.display;return;
热门题库
更多
中级网络工程师
中级信息系统管理工程师
初级程序员
中级软件设计师
初级网络管理员
初级信息处理技术员
中级数据库系统工程师
中级多媒体应用设计师
高级系统分析师
高级网络规划设计师
高级系统架构师
中级信息系统监理师
初级通信工程师
中级通信工程师
通信新技术、新业务知识
无线通信专业技术