【计算机类职业资格】软件设计师-18及答案解析.doc
《【计算机类职业资格】软件设计师-18及答案解析.doc》由会员分享,可在线阅读,更多相关《【计算机类职业资格】软件设计师-18及答案解析.doc(21页珍藏版)》请在麦多课文档分享上搜索。
1、软件设计师-18 及答案解析(总分:100.00,做题时间:90 分钟)一、单项选择题(总题数:39,分数:100.00)某个算法的时间复杂度递归式 T(n)=T(n-1)+n,其中 n 为问题的规模,则该算法的渐进时间复杂度为_,若问题的规模增加了 16 倍,则运行时间增加_倍。(分数:4.00)(1). A.O(n) B.O(nlgn) C.O(n2) D.O(n2lgn)(分数:2.00)A.B.C.D.A.16B.64C.256D.1024Prim 算法和 Kruscal 算法都是无向连通网的最小生成树的算法,Prim 算法从一个顶点开始,每次从剩余的顶点中加入一个顶点,该顶点与当前的
2、生成树中的顶点的连边权重最小,直到得到一颗最小生成树;Kruscal 算法从权重最小的边开始,每次从不在当前的生成树顶点中选择权重最小的边加入,直到得到一棵最小生成树,这两个算法都采用了_设计策略,且_。(分数:4.00)A.分治B.贪心C.动态规划D.回溯A.若网较稠密,则 Prim 算法更好B.两个算法得到的最小生成树是一样的C.Prim 算法比 Kruscal 算法效率更高D.Kruscal 算法比 Prim 算法效率更高考虑下述背包问题的实例。有 5 件物品,背包容量为 100,每件物品的价值和重量如下图所示,并已经按照物品的单位重量价值从大到小排好序。根据物品单位重量价值大优先的策略
3、装入背包中,则采用了_设计策略。考虑 0/1 背包问题(每件物品或者全部装入背包或者不装入背包)和部分背包问题(物品可以部分装入背包),求解该实例得到的最大价值分别为_。 (分数:4.00)A.分治B.贪心C.动态规划D.回溯A.605 和 630B.605 和 605C.430 和 630D.630 和 430给定 n 个整数构成的数组 A=a 1 ,a 2 ,a n 和整数 x,判断 A 中是否存在两个元素 a i 和 a j ,使的 a i +a j =x。为了求解问题,首先用归并排序算法对数组 A 进行从大到小排序;然后判断是否存在a i +a j =x,具体的方法如下列伪代码所示。则
4、求解该问题时排序算法应用了_算法设计策略,整个算法的时间复杂度为_。 i=1;j=n While ij If a i +a j =x return true Else if a i +a j x J-; Else I+; Return false;(分数:4.00)A.分治B.贪心C.动态规划D.回溯(2). A.O(n) B.O(nlgn) C.O(n2) D.O(nlog2n)(分数:2.00)A.B.C.D.在求解某问题时,经过分析发现该问题具有最优子结构性质,求解过程中子问题被重复求解,则采用_算法设计策略;若定义问题的解空间,以深度优先的方式搜索解空间,则采用_算法设计策略。(分数:
5、4.00)A.分治B.动态规划C.贪心D.回溯A.动态规划B.贪心C.回溯D.分支限界哈夫曼编码将频繁出现的字符采用短编码,出现频率较低的字符采用长编码。具体的操作过程为:)以每个字符的出现频率作为关键字构建最小优先级队列;)取出关键字最小的两个节点生成子树,根节点的关键字为孩子节点关键字之和,并将根节点插入到最小优先级队列中,直至得到一棵最优编码树。哈夫曼编码方案是基于_策略的,用该方案对包含 a 到 f 六个字符的文件进行编码,文件包含 100000 个字符,每个字符的出现频率(用百分比表示)如下表所示,则与固定长度编码相比,该编码方案节省了_存储空间。 字符 a b c d e f 出现
6、频率 18 32 4 8 12 26 (分数:4.00)A.分治B.贪心C.动态规划D.回溯A.21%B.27%C.18%D.36%1.以下关于渐近符号的表示中,不正确的是_。 A.n2=O(n2) B.n=O(n2) C.n2=O(n) D.n2=O(n3)(分数:2.00)A.B.C.D.某货车运输公司有一个中央仓库和 n 个运输目的地,每天要从中央仓库将货物运输到所有运输目的地,到达每个运输目的地一次且仅一次,最后回到中央仓库。在两个地点 i 和 j 之间运输货物存在费用 C ij ,为求解旅行费用总和最小的运输路径,设计如下算法:首先选择离中央仓库最近的运输目的地 1,然后选择离运输目
7、的地 1 最近的运输目的地 2每次在访问过的运输目的地中选择离当前运输目的地最近的运输目的地,最后回到中央仓库。则该算法采用了_算法设计策略,其时间复杂度为_。(分数:4.00)A.分治B.动态规划C.贪心D.回溯(2). A.O(n2) B.O(n) C.O(nlgn) D.O(1)(分数:2.00)A.B.C.D.2.现要对 n 个实数(仅包含正实数和负实数)组成的数组 A 进行重新排列,使得其中所有的负实数都位于正实数之前。求解该问题的算法的伪代码如下,则该算法的时间和空间复杂度为_。 i=0;j=n-1 while ij do while Ai0 do i=i+1; while Aj0
8、 do j=j-1; if ij do 交换 Ai和 Aj(分数:2.00)A.O(n)和 O(n)B.O(1)和 O(n)C.O(n)和 O(1)D.O(1)和 O(1)3.迪杰斯特拉(Dijkstra)算法用于求解图上的单源点最短路径。该算法按路径长度递增次序产生最短路径,本质上说,该算法是一种基于_策略的算法。(分数:2.00)A.分治B.动态规划C.贪心D.回溯4.在有 n 个无序无重复元素值的数组中查找第 i 小的数的算法描述如下:任意取一个元素 r,用划分操作确定其在数组中的位置,假设元素 r 为第 k 小的数。若 i 等于 k,则返回该元素值;若 i 小于 k,则在划分的前半部分
9、递归进行划分操作查找第 i 小的数;否则在划分的后半部分递归进行划分操作查找第 k-i 小的数。该算法是一种基于_策略的算法。(分数:2.00)A.分治B.动态规划C.贪心D.回溯5.要在 88 的棋盘上摆放 8 个“皇后”,要求“皇后”之间不能发生冲突,即任何两个“皇后”不能再同一行、同一列和相同的对角线上,则一般采用_来实现。(分数:2.00)A.分治法B.动态规划法C.贪心法D.回溯法6.分治算法设计技术_。(分数:2.00)A.一般由三个步骤组成:问题划分、递归求解、合并解B.一定是用递归技术来实现C.将问题划分为 k 个规模相等的子问题D.划分代价很小而合并代价很大7.某算法的时间复
10、杂度可用递归式 表示,若由 表示,则正确的是_。 A B(n 2 ) C(n) D (分数:2.00)A.B.C.D.8.设算法 A 的时间复杂度可用递归式 表示,算法 B 的时间复杂度可用递归式 (分数:2.00)A.48B.49C.13D.149.用动态规划策略求解矩阵连乘问题 M1M2M3M4,其中 M 1 (205)、M 2 (535)、M 3 (354)和M 4 (425),则最优的计算次序为_。(分数:2.00)A.(M1M2)M3)MB.(M1M2)(M3M4)C.(M1(M2M3)M4D.M1(M2(M3M4)10._不能保证求得 0-1 背包问题的最优解。(分数:2.00)A
11、.分支限界法B.贪心算法C.回溯法D.动态规划策略11.类_之间存在着一般和特殊的关系。(分数:2.00)A.汽车与轮船B.交通工具与飞机C.轮船与飞机D.汽车与飞机12.多态分为参数多态、包含多态、过载多态和强制多态共 4 种不同形式,其中_多态在许多语言中都存在,最常见的例子就是子类型化。(分数:2.00)A.参数B.包含C.过载D.强制在面向对象程序设计语言中,对象之间通过_方式进行通信。以下关于好的面向对象程序设计语言的叙述中,不正确的是_。(分数:4.00)A.消息传递B.继承C.引用D.多态A.应该支持被封装的对象B.应该支持类写实例的概念C.应该支持通过指针进行引用D.应该支持继
12、承和多态13._是一个类与它的一个或多个细化类之间的关系,即一般与特殊的关系。(分数:2.00)A.泛化B.关联C.聚集D.组合14.在某些程序设计语言中,在运行过程中当一个对象发送消息请求服务时,根据接收对象的具体情况将请求的操作与实现的方法进行连接,称为_。(分数:2.00)A.静态绑定B.通用绑定C.动态绑定D.过载绑定在面向对象技术中,不同的对象在收到同一消息时可以产生完全不同的结果,这一现象称为_,它由_机制来支持。利用类的层次关系,把具有通用功能的消息存放在高层次,而实现这一功能的行为放在较低层次,在这些低层次上生成的对象能够给通用消息以不同的响应。(分数:4.00)A.绑定B.继
13、承C.消息D.多态A.绑定B.继承C.消息D.多态15.在多态的几种不同形式中,_多态是一种特定的多态,指同一个名字在不同上下文中可代表不同的含义。(分数:2.00)A.参数B.包含C.过载D.强制继承是父类和子类之间共享数据和方法的机制。以下关于继承的叙述中,不正确的是_。有关下图中doIt()方法的叙述中,正确的是_。 (分数:4.00)A.一个父类可以有多个子类,这些子类都是父类的特例B.父类描述了这些子类的公共属性和操作C.子类可以继承它的父类(或祖先类)中的属性和操作而不必自己定义D.子类中可以定义自己的新操作而不能定义和父类同名的操作A.doIt()必须由 Thing3 实现,同时
14、可能由 Thing4 实现B.doIt()必须由 Thing5 实现C.doIt()必须由 Thing2、Thing3、Thing4 和 Thing5 实现D.doIt()已经由 Thing1 实现,因此无需其他类实现在面向对象技术中,_定义了超类和子类之间的关系,子类中以更具体的方式实现从父类继承来的方法称为_,不同类的对象通过_相互通信。(分数:6.00)A.覆盖B.继承C.消息D.多态A.覆盖B.继承C.消息D.多态A.覆盖B.继承C.消息D.多态16.在面向对象技术中,对象具有以下特性:_。 清晰的边界 良好定义的行为 确定的位置和数量 可扩展性(分数:2.00)A.B.C.D.在面向
15、对象技术中,_说明一个对象具有多种形态,_定义超类与子类之间的关系。(分数:4.00)A.继承B.组合C.封装D.多态A.继承B.组合C.封装D.多态17.以下关于封装在软件复用中所充当的角色的叙述,正确的是_。(分数:2.00)A.封装使得其他开发人员不需要知道一个软件组织内部是如何工作B.封装使得软件组织更有效地工作C.封装使得软件开发人员不需要编制开发文档D.封装使得软件组件开发更加容易18.在有些程序设计语言中,过程调用和响应调用需执行的代码的绑定直到运行时才进行,这种绑定称为_。(分数:2.00)A.静态绑定B.动态绑定C.过载绑定D.强制绑定19.在面向对象软件开发中,封装是一种_
16、技术,其目的是使对象的使用者和生产者分离。(分数:2.00)A.接口管理B.信息隐藏C.多态D.聚合一个类是_。在定义类时,将属性声明为 private 的目的是_。(分数:4.00)A.一组对象的封装B.表示一组对象的层次关系C.一组对象的实例D.一组对象的抽象定义A.实现数据隐藏,以免意外更改B.操作符重载C.实现属性值不可更改D.实现属性值对类的所有对象共享20.面向对象分析的第一步是_(分数:1.00)A.定义服务B.确定附加的系统约束C.确定问题域D.定义类和对象21.下列关于一个类的静态成员的描述中,不正确的是_。(分数:1.00)A.类的静态方法只能访问该类的静态数据成员B.静态
17、数据成员可被该类的所有方法访问C.该类的对象共享其静态数据成员的值D.该类的静态数据成员的值不可修改22.属于面向对象、解释型程序设计语言的是_。(分数:1.00)A.XMLB.PythonC.PrologD.C+23.以下程序设计语言中,_更适合用来进行动态网页处理。(分数:1.00)A.HTMLB.LISPC.PHPD.Java/C+24.某程序设计语言规定在源程序中的数据都必须具有类型,然而,_并不是做出此规定的理由。(分数:1.00)A.为数据合理分配存储单元B.可以定义和使用动态数据结构C.可以规定数据对象的取值范围及能够进行的运算D.对参与表达式求值的数据对象可以进行合法性检查25
18、.采用面向对象开发方法时,对象是系统运行的基本实体。以下关于对象的叙述中,正确的是_。(分数:1.00)A.对象只能包括数据(属性)B.对象只能包括操作(行为)C.对象一定有相同的属性和行为D.对象通常由对象名、属性和操作三个部分组成UML 中有 4 种事物:结构事物、行为事物、分组事物和注释事物。类、接口、构建属于_事物;依附于一个元素或一组元素之上,对其进行约束或解释的简单符号为_事物。(分数:2.00)A.结构B.行为C.分组D.注释A.结构B.行为C.分组D.注释软件设计师-18 答案解析(总分:100.00,做题时间:90 分钟)一、单项选择题(总题数:39,分数:100.00)某个
19、算法的时间复杂度递归式 T(n)=T(n-1)+n,其中 n 为问题的规模,则该算法的渐进时间复杂度为_,若问题的规模增加了 16 倍,则运行时间增加_倍。(分数:4.00)(1). A.O(n) B.O(nlgn) C.O(n2) D.O(n2lgn)(分数:2.00)A.B.C. D.解析:A.16B.64C.256 D.1024解析:解析 对于递归式,假设 T(1)=1,则: T(n)=T(n-1)+n =T(n-2)+n-1+n =T(n-3)+n-2+n-1+n = =1+2+n-1+n =n(n+1)/2 可见,时间复杂度为 O(n 2 )。若问题的规模增加了 16 倍,则运行时间
20、增加了 16 2 =256 倍。Prim 算法和 Kruscal 算法都是无向连通网的最小生成树的算法,Prim 算法从一个顶点开始,每次从剩余的顶点中加入一个顶点,该顶点与当前的生成树中的顶点的连边权重最小,直到得到一颗最小生成树;Kruscal 算法从权重最小的边开始,每次从不在当前的生成树顶点中选择权重最小的边加入,直到得到一棵最小生成树,这两个算法都采用了_设计策略,且_。(分数:4.00)A.分治B.贪心 C.动态规划D.回溯解析:A.若网较稠密,则 Prim 算法更好 B.两个算法得到的最小生成树是一样的C.Prim 算法比 Kruscal 算法效率更高D.Kruscal 算法比
21、Prim 算法效率更高解析:解析 Prim 算法和 Kruscal 算法都是基于贪心算法的应用。Prim 算法的时间复杂度为 O(n 2 ),与图中边数无关,该算法适合于稠密图。Kruskal 算法的时间复杂度只和边有关系,为 O(elog 2 e),由于 Kruskal 算法只与边有关,因此适合求稀疏图的最小生成树。考虑下述背包问题的实例。有 5 件物品,背包容量为 100,每件物品的价值和重量如下图所示,并已经按照物品的单位重量价值从大到小排好序。根据物品单位重量价值大优先的策略装入背包中,则采用了_设计策略。考虑 0/1 背包问题(每件物品或者全部装入背包或者不装入背包)和部分背包问题(
22、物品可以部分装入背包),求解该实例得到的最大价值分别为_。 (分数:4.00)A.分治B.贪心 C.动态规划D.回溯解析:A.605 和 630B.605 和 605C.430 和 630 D.630 和 430解析:解析 本题考查贪心算法和背包问题的知识点。 贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题他能产生整体最优解或者是整体最优解的近似解。 采用 0/1 背包考虑该问题时,只能放入 1、2、3 号物品,故总价值为
23、 430,采用部分背包可以将物品拆分,故放入 1、2、3 号物品后还可以将编号 4 的物品部分的装入,使得背包容量尽量的满,故总容量为 630。给定 n 个整数构成的数组 A=a 1 ,a 2 ,a n 和整数 x,判断 A 中是否存在两个元素 a i 和 a j ,使的 a i +a j =x。为了求解问题,首先用归并排序算法对数组 A 进行从大到小排序;然后判断是否存在a i +a j =x,具体的方法如下列伪代码所示。则求解该问题时排序算法应用了_算法设计策略,整个算法的时间复杂度为_。 i=1;j=n While ij If a i +a j =x return true Else i
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
5000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 职业资格 软件 设计师 18 答案 解析 DOC
