常用软考算法大全内附实例

合集下载

软考挣值计算题大全 项目管理软考

软考挣值计算题大全 项目管理软考

软考挣值计算题大全项目管理软考软考挣值计算题是项目管理软考中的一个重要部分,也是考生们备考时经常遇到的难题之一。

挣值管理是项目管理中的一种重要的成本和进度控制技术,通过对项目的成本和进度进行实时跟踪和评估,为项目管理决策提供重要依据。

掌握挣值管理方法,对于提高项目管理水平,提升个人能力都具有重要意义。

挣值管理中最常见的题目类型就是挣值计算题,通过计算实际成本、计划成本以及挣值三个指标之间的关系,来评估项目的成本和进度的执行情况。

下面将通过全面的评估,深入分析挣值计算题,为大家进行解析和总结。

一、挣值计算题的基本概念1.实际成本(Actual Cost,AC):项目执行阶段实际完成某项工作所花费的费用。

2.计划成本(Planned Value,PV):预定在某一时间段内,完工的预控成本。

3.挣值(Earned Value,EV):在某一时间点上实际完成的工作量所对应的成本。

这三个指标是挣值管理中的基本概念,也是求解挣值计算题时需要用到的核心数据。

二、挣值计算题的解题步骤1.要根据题目所给的数据,找出实际成本、计划成本和挣值的具体数值。

2.利用挣值计算公式进行计算,计算出实际成本、计划成本和挣值的具体数值。

其中,挣值计算公式为:实际成本(AC)= 实际费用计划成本(PV)= 计划费用挣值(EV)= 计划工作量× 完成工作百分比3.通过比较实际成本、计划成本和挣值的数值,分析项目的执行情况,评估项目的成本和进度表现。

三、挣值计算题的常见形式1.给定实际成本和计划成本,求解挣值。

2.给定实际成本和挣值,求解计划成本。

3.给定计划成本和挣值,求解实际成本。

4.根据实际成本、计划成本和挣值,分析项目的执行情况。

四、挣值计算题的实际应用挣值计算题不仅仅是理论知识,更是实际项目管理中的重要工具。

通过挣值计算,可以及时了解项目的成本和进度执行情况,及时调整项目管理策略,确保项目按时按质完成。

挣值计算也是评估项目经理个人能力的重要指标,能够帮助项目经理及时发现问题并采取措施,提升项目管理水平。

常用算法举例范文

常用算法举例范文

常用算法举例范文在计算机科学中,算法是解决问题的一系列有序步骤,它能够帮助我们解决各种各样的问题。

以下是一些常用的算法及其举例:1.排序算法:-冒泡排序:通过比较相邻元素并交换位置来将最大的元素逐渐移动到数组的末尾。

-快速排序:选择一个基准元素,将数组分为两部分,左边的元素小于基准,右边的元素大于基准,然后递归地对两部分进行快速排序。

-归并排序:将数组划分为两个子数组,对每个子数组分别进行归并排序,然后将两个有序子数组合并成一个有序数组。

2.查找算法:-二分查找:对于有序数组,通过与中间元素进行比较,将查找范围缩小一半,直到找到目标元素或确定不存在。

-哈希查找:通过将关键字映射到数组的索引位置来进行查找,可以在常数时间内找到目标元素。

3.图算法:-广度优先(BFS):从起始节点开始,逐层遍历图中的节点,直到找到目标节点。

-深度优先(DFS):从起始节点开始,沿着一条路径一直向下,直到找到目标节点或无法继续为止。

4.动态规划算法:-背包问题:给定一组物品和一个容量限制,选择一些物品放入背包中,使得总价值最大。

-最长公共子序列(LCS):给定两个字符串,找到它们的最长公共子序列的长度。

5.数学算法:-欧几里得算法:计算两个整数的最大公约数。

-快速幂算法:计算一个数的幂运算,通过将指数进行二进制拆分来减少计算次数。

6.字符串处理算法:-KMP算法:通过利用已匹配字符的信息来避免不必要的回溯,实现高效的字符串匹配。

- Boyer-Moore算法:利用模式串中的信息来进行快速的字符串匹配。

7.图像处理算法:-图像平滑算法:通过对图像进行滤波处理,去除图像中的噪声,使其更加平滑。

-图像边缘检测算法:通过检测图像中的边缘信息,突出物体的轮廓。

8.机器学习算法:-K均值聚类算法:将数据集划分为K个簇,使得同一个簇内的数据点之间的距离最小化。

-支持向量机(SVM):将数据集映射到高维空间,并通过找到最优的超平面来实现分类。

软考中项计算题公式

软考中项计算题公式

软考中项计算题公式软考中的计算题公式软考是指软件职业资格考试,是由中国电子学会主办的一项全国性的技术职业资格认证考试。

其中,项计算题是软考中的一种题型,要求考生掌握各个领域的计算公式。

本文将介绍软考中项计算题常见的公式。

1. 网络技术计算公式1.1 带宽计算公式带宽(kbps) = 8 * 带宽(bps)其中,带宽为bit/s,可通过将其转换为kbps来方便计算。

1.2 时延计算公式时延(s) = 数据长度 / 带宽其中,数据长度以bit为单位,时延以秒为单位。

2. 数据库计算公式2.1 总记录数计算公式总记录数 = (平均记录长度 * 块长度) / (块内记录长度)其中,平均记录长度为每条记录的平均长度,块长度为块的大小,块内记录长度为每个记录在块中占据的空间。

节点数 = 总记录数 / 每个节点的最大键数其中,总记录数为数据库中的总记录数,每个节点的最大键数为树节点中能够包含的最大键的数量。

3. 软件工程计算公式3.1 代码行数计算公式代码行数 = 注释行数 + 空白行数 + 有效代码行数其中,注释行数为代码中的注释行数,空白行数为代码中的空行数,有效代码行数为代码中的实际执行代码行数。

3.2 平均构造率计算公式平均构造率 = 实际构造率 / 理想构造率其中,实际构造率为实际构造的代码行数占全部代码行数的比例,理想构造率为按照预估时间应该构造的代码行数占全部代码行数的比例。

4. 操作系统计算公式4.1 磁盘存储容量计算公式存储容量 = 磁道数 * 每条磁道的扇区数 * 每个扇区的字节数其中,磁道数为磁盘上的磁道数量,每条磁道的扇区数为每个磁道上的扇区数量,每个扇区的字节数为每个扇区上可存储的字节数。

页面引用串长度 = 总访问命令数 * 每个命令访问的页面数其中,总访问命令数为对页面的总访问命令数量,每个命令访问的页面数为每个访问命令需要访问的页面数量。

以上是软考中项计算题常见的公式,掌握这些公式能够帮助考生在考试中更好地解决计算题。

软考中项、高项常见计算题详解

软考中项、高项常见计算题详解

选择题:一、决策树分析(EMV)2011年下半年例题1:某公司希望举办一个展销会以扩大市场,选择北京、天津、上海、深圳作为候选会址。

获利情况除了会址关系外,还与天气有关。

天气可分为晴、多云、多雨三种。

通过天气预报,估计三种天气情况可能发生的概率为0.25、0.50、0.25,其收益(单位:人民币万元)情况见下表。

使用决策树进行决策的结果为(61)。

(61)A.北京B.天津C.上海D.深圳答案:B解析:北京的期望货币值为 4.5×0.25+4.4×0.5+1×0.25=3.575 天津 5×0.25+4×0.5+1.6×0.25=3.65上海 6×0.25+3×0.5+1.3×0.25=3.325深圳 5.5×0.25+3.9×0.5+0.9×0.25=3.55例题2 (2008上)某电子商务公司要从A地向B地的用户发送一批价值90000元的货物。

从A地到B地有水、陆两条路线。

走陆路时比较安全,其运输成本为10000元;走水路时一般情况下的运输成本只要7000元,不过一旦遇到暴风雨天气,则会造成相当于这批货物总价值的10%的损失。

根据历年情况,这期间出现暴风雨天气的概率为1/4,那么该电子商务公司_(70)。

A.应选择走水路B.应选择走陆路C.难以选择路线D.可以随机选择路线答案: A。

陆路10000水路7000×3/4+(7000+90000×10%)×1/4=9250例题3二、盈亏平衡点盈亏平衡点(Break Even Point,简称BEP)又称零利润点、保本点、盈亏临界点、损益分歧点、收益转折点。

通常是指全部销售收入等于全部成本时(销售收入线与总成本线的交点)的产量。

以盈亏平衡点的界限,当销售收入高于盈亏平衡点时企业盈利,反之,企业就亏损。

盈亏平衡点可以用销售量来表示,即亏平衡点的销售量;也可以用销售额来表示,即盈亏平衡点的销售额。

软考中级软件设计师算法题

软考中级软件设计师算法题

软考中级软件设计师算法题软考中级软件设计师考试中,算法题是一个重要的考点,也是考生容易失分的地方。

本文将介绍一些常见的软考中级软件设计师算法题,并给出解题思路和算法实现,以帮助考生更好地备考。

一、选择排序算法题目描述:给定一个包含n个元素的数组,对其进行选择排序,找出最小元素的下标,并输出其下标。

解题思路:选择排序的基本思想是在每一趟遍历过程中,找出最小元素,将其放到已排序序列的末尾。

具体步骤如下:1.从数组的第一个元素开始,依次遍历数组;2.记录当前遍历到的最小元素的下标min_index;3.将当前遍历到的元素与min_index对应的元素进行交换;4.将min_index向前移动一位,继续遍历下一个元素;5.重复步骤2-4,直到遍历完整个数组。

算法实现:```c++intmin_index(intarr[],intn){intmin_index=0;for(inti=1;i<n;i++){if(arr[i]<arr[min_index]){min_index=i;}}returnmin_index;```二、最长递增子序列问题题目描述:给定一个长度为n的数组,求其最长递增子序列的长度。

解题思路:可以使用动态规划来解决该问题。

定义一个长度为n+1的数组dp,其中dp[i]表示以arr[i]结尾的最长递增子序列的长度。

初始时,所有元素都为1,除了最后一个元素外。

然后从左到右遍历数组,对于每个元素arr[j],如果它比前一个元素arr[i]大,则将dp[j]更新为max(dp[j],dp[i]+1)。

最终,dp[n]就是最长递增子序列的长度。

算法实现:```c++intlongest_increasing_subsequence(intarr[],intn){intdp[n+1];for(inti=1;i<=n;i++){dp[i]=1;for(intj=0;j<i;j++){if(arr[i]>arr[j]){dp[i]=max(dp[i],dp[j]+1);}}}returndp[n];```三、最长公共子序列问题题目描述:给定两个长度为n和m的序列,求它们的最长公共子序列的长度。

软考计算题进度类考点公式汇总

软考计算题进度类考点公式汇总

软考计算题进度类考点公式汇总一、PERT三点估算1、β分布期望持续时间/成本=(最悲观+最可能*4+最乐观)/62、三角分布期望持续时间/成本=(最悲观+最可能+ 最乐观)/33、标准差= (最悲观时间-最乐观时间)/64、正负西格玛1(68%)、2(95%)、3(99%)二、单代号网络图(会画图)1、画图正推法:最早,取最大逆推法:最迟,取最小2、找关键路径从起点到终点所有路径活动之和最大的路径;可能有多条关键路径;3、计算总工期关键路径上所有活动持续时间之和;4、总时差画图:最迟最早不画图:关键路径长度-经过这个活动最大非关键路径长度5、自由时差画图:min{紧后工作最早开始时间} -本工作最早完成时间不画图:紧后工作是关键工作:自由时差= 总时差紧后工作不是关键工作或者既有关键工作也有非关键工作:自由时差= 06、工期压缩压缩关键路径上的工作;压缩可以压缩的活动;压缩花费代价最小的活动;注意关键路径变化的问题;注意是否有间接费用的节约;三、双代号网络图(会画图)1、关键路径从起点到终点所有路径活动之和最大的路径2、总工期关键路径上所有活动持续时间之和3、总时差关键路径长度-经过这个活动最大非关键路径长度4、自由时差用标号法结合网络图去求解;四、双代号时标网络图(会画图)1、画图会看图、画图;是资源平衡/平滑类计算题解题神器,需要会算最少几个人的问题;2、找关键路径持续时间最长的路径【虽有波形线但是时间最长也是关键路径】3、计算总工期关键路径上所有活动持续时间之和4、总时差以该工作为起点,到终点,可能有很多条路径,把每条路径的波浪线的长度的和求出来,和的最小值就是自由时差;该工作完成节点到项目全部完成时的节点之间波形线投影值之和的最小值+ 该工作的自由时差;5、自由时差该工作箭线上波形线投影的长度6、工期压缩同单代号网络图五、横道图1、关键路径从后往前推,能够收尾相连的2、总工期关键路径上所有活动持续时间之和3、总时差和自由时差图上看不出来,可结合单双代号网络图进行计算六、其他类1、EMV决策树计算EMV = 盈利百分比*影响值-风险百分比*影响值EMV = 各活动Σ净利润(收入-成本)×%2、沟通渠道计算n(n-1)/2,n代表干系人数量3、自制/外购分析对比成本大小、技术、涉密、长期使用等方面对比;自制的成本算出来,外购的成本算出来,比较大小就好;4、加权系统n项分值之和除以n,乘以权重比例;5、系统可用性可用时间/总时间平均无故障时间/(平均无故障时间+平均维修时间)*100%6、运筹学计算具体看我发的视频资料;7、其他净现值投资回收期(静态) = (T-1)+ 第(T-1)年累计现金流量绝对值/第T年现金流量投资回收期(动态) = (T-1)+ 第(T-1)年累计折现值/第T年折现值ROI投资收益率分析= (总的折现收益-总的折现成本)/折现成本ROI投资收益率分析(第4版的公式) = 项目达产后正常年份的利润/投资总额。

软考中级系统集计算题公式

软考中级系统集计算题公式

软考中级系统集计算题公式
在软考中级系统集计算题中,常见的公式包括:
1. 机器周期(TP)= 主频(MHz)/ 时钟周期(ns)
其中,主频表示CPU的工作频率,时钟周期表示CPU完成一个基本操作所需的时间。

2. CPU执行时间(Texec)= TP × CPI × IC
其中,TP表示机器周期,CPI表示每指令周期数,IC表示指令数。

3. 系统吞吐率(Throughput)= 1 / Tavg
其中,Tavg表示平均响应时间。

4. 计算机存储器存取时间(Tmem)= Tcache × Ha + Tmain ×(1-Ha)
其中,Tcache表示高速缓存存取时间,Tmain表示主存存取时间,Ha表示高速缓存的命中率。

5. 磁盘平均访问时间(Tdisk)= (1-P) × Tseek + P ×Trotation + Ttransfer
其中,P表示盘块命中率,Tseek表示寻道时间,Trotation表示旋转延迟时间,Ttransfer表示传输时间。

6. 系统响应时间(Tresp)= Tcpu + Tmem + Tdisk + Tio
其中,Tcpu表示CPU执行时间,Tmem表示存储器存取时间,Tdisk 表示磁盘访问时间,Tio表示输入输出设备的响应时间。

以上是一些常见的公式,根据具体的题目要求,还可能会需要其
他的计算公式。

常见算法及其运算实例分析

常见算法及其运算实例分析

常见算法及其运算实例分析算法是计算机科学中最重要的一部分。

算法既是计算机科学的基础,又是计算机编程的核心。

了解算法,可以让我们更深入地理解计算机的运行原理,以及如何利用计算机处理各种问题。

本文将为大家介绍几个常见的算法及其运算实例分析。

一、递归算法递归算法是一种函数调用自身的算法。

递归算法具有简单、直观、可理解等优点。

但同时也存在着栈溢出、时间复杂度高等问题。

递归算法通常包含有一些关键参数,如递归的次数和递归深度等,这些参数的变化对于程序的运行和结果都有着重要的影响。

实例:斐波那契数列我们可以通过递归算法来实现斐波那契数列。

斐波那契数列的定义如下:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n>=2)。

通过递归算法,可以很容易地实现斐波那契数列。

我们只需要以递归方式调用F函数即可,代码如下:```def F(n):if n==0:return 0elif n==1:return 1else:return F(n-1)+F(n-2)```二、分治算法分治算法是将问题分解成若干个子问题,然后递归地分别解决每个子问题,最终合并成一个整体的算法。

分治算法通常解决的问题都具备“可分解性”和“合并性”的特征。

实例:二分查找二分查找可以用分治算法来实现。

二分查找的思想是将数组分成两个区间,分别判断目标值是否在每个区间中。

如果目标值存在于某个区间中,则继续在该区间中进行查找;否则在另一个区间中进行查找。

通过分治算法,我们可以将二分查找优化成O(log n)的时间复杂度。

代码如下:```def binary_search(arr, left, right, target):if left > right:return -1mid = (left + right) // 2if arr[mid] == target:return midelif arr[mid] < target:return binary_search(arr, mid+1, right, target)else:return binary_search(arr, left, mid-1, target)```三、贪心算法贪心算法可以理解为通过每步选择中的局部最优解,从而达到全局最优的解决方案。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

河南大学软件学院 计算机应用 单付尚 2009-3-9常用算法大全【程序1-1】欧几里德递归算法 (1)【程序1-2】欧几里德迭代算法 (1)【程序1-3】 Gcd的连续整数检测算法 (1)【程序1-4】求F n (1)【程序1-5】逆序输出正整数的各位数 (2)【程序1-6】汉诺塔问题 (2)【程序1-7】排列产生算法 (2)【程序2-1】求数组元素累加之和的迭代程序 (3)【程序2-2】求数组元素累加之和的递归程序 (3)【程序2-3】矩阵乘法 (3)【程序3-1】伸展树类 (4)【程序3-2】旋转函数 (4)【程序3-3】伸展树插入 (5)【程序3-4】跳表结点类 (6)【程序3-5】跳表类 (7)【程序3-6】构造函数 (7)【程序3-7】级数分配 (8)【程序3-8】插入运算 (8)【程序4-1】 ENode类 (9)【程序4-2】图的广度优先遍历 (10)【程序4-3】图的深度优先搜索 (10)【程序4-4】计算d和Low (11)【程序4-5】求双连通分量 (11)【程序4-6】与或树及其结点类型 (12)【程序4-7】判断与或树是否可解算法 (13)【程序4-8】广度优先生成解树的算法框架 (13)【程序5-1】分治法 (14)【程序5-2】一分为二的分治法 (14)【程序5-3】可排序表类 (15)【程序5-4】求最大最小元 (15)【程序5-5】分治法求最大、最小元 (16)【程序5-6】二分搜索算法框架 (16)【程序5-7】对半搜索递归算法 (17)【程序5-8】对半搜索的迭代算法 (17)【程序5-9】 Merge函数 (17)【程序5-10】两路合并排序 (18)【程序5-11】分划函数 (18)【程序5-12】快速排序 (18)【程序5-13】 Select函数 (19)【程序5-14】线性时间选择算法 (19)【程序6-1】贪心法 (20)【程序6-2】背包问题的贪心算法 (21)【程序6-3】带时限作业排序的贪心算法 (21)【程序6-4】带时限的作业排序程序 (22)【程序6-5】使用并查集的带时限作业排序程序 (22)【程序6-6】两路合并最佳模式的贪心算法 (23)【程序6-7】最小代价生成树的贪心算法 (24)【程序6-8】普里姆算法 (24)【程序6-9】克鲁斯卡尔算法 (26)【程序6-10】迪杰斯特拉算法 (26)【程序6-11】多带最优存储 (28)【程序7-1】多段图的向前递推算法 (28)【程序7-2】弗洛伊德算法 (29)【程序7-3】矩阵连乘算法 (29)【程序7-4】矩阵连乘的备忘录方法 (30)【程序7-5】求LCS的长度 (32)【程序7-6】构造最长公共子序列 (32)【程序7-7】构造最优二叉搜索树 (33)【程序7-8】 0/1背包的递归算法 (33)【程序7-9】 0/1背包算法的粗略描述 (34)【程序7-10】 0/1背包最优解值算法 (35)【程序7-11】 0/1背包最优解算法 (36)【程序7-12】Johnson算法 (37)【程序8-1】递归回溯法 (37)【程序8-2】迭代回溯法 (38)【程序8-3】蒙特卡罗算法 (38)【程序8-4】n-皇后问题的回溯算法 (38)【程序8-5】子集和数的回溯算法 (39)【程序8-6】图的m-着色算法 (40)【程序8-7】哈密顿环算法 (40)【程序8-8】 0/1背包算法 (42)【程序8-9】批处理作业调度算法 (43)【程序9-1】分枝限界算法 (44)【程序9-2】基于上下界函数的FIFO分枝限界法 (45)【程序9-3】基于上下界的LC分枝限界法 (46)【程序9-4】带时限的作业排序 (47)【程序9-5】类声明 (49)【程序9-6】上下界函数 (50)【程序9-7】 0/1背包问题的LC分枝限界法 (50)【程序9-8】批作业类和活结点结构 (51)【程序9-9】下界函数 (53)【程序9-10】批处理作业调度LCBB算法 (53)【程序10-1】不确定搜索算法 (54)【程序10-2】不确定排序算法 (54)【程序10-3】最大集团判定问题不确定算法 (55)【程序10-4】可满足性问题的不确定算法 (55)【程序11-1】标识重复元素的拉斯维加斯算法 (55)【程序11-2】伪素数测试 (56)【程序11-3】合数性检测 (56)【程序11-4】素数测试的蒙特卡罗算法 (57)【程序11-5】快速排序舍伍德算法 (57)【程序12-1】平面图着色近似算法 (57)【程序12-2】最小顶点覆盖近似算法 (57)【程序12-3】集合覆盖近似算法 (58)【程序12-4】子集和数算法 (58)【程序12-5】修正表L为新表 (58)【程序12-6】子集和数近似方案 (58)【程序1-1】欧几里德递归算法v o i d S w a p(i n t&a,i n t&b){i n t c=a;a=b;b=c;}i n t R G c d(i n t m,i n t n){i f(m==0)r e t u r n n;r e t u r n R G c d(n%m,m);}i n t G c d(i n t m,i n t n){i f(m>n)S w a p(m,n);r e t u r n R G c d(m,n);}【程序1-2】欧几里德迭代算法i n t G c d(i n t m,i n t n){i f(m==0)r e t u r n n;i f(n==0)r e t u r n m;i f(m>n)S w a p(m,n);w h i l e(m>0){i n t c=n%m;n=m;m=c;}r e t u r n n;}【程序1-3】Gc d的连续整数检测算法i n t G c d(i n t m,i n t n){i f(m==0)r e t u r n n;i f(n==0)r e t u r n m;i n t t=m>n?n:m;w h i l e(m%t||n%t)t--;r e t u r n t;}【程序1-4】求F nl o n g F i b(l o n g n){i f(n<=1)r e t u r n n;e l s e r e t u r n F i b(n-2)+F i b(n-1);}【程序1-5】逆序输出正整数的各位数#i n c l u d e<i o s t r e a m.h>v o i d P r i n t D i g i t(u n s i g n e d i n t n){//设k位正整数为d1d2 d k,按各位数的逆序d k d k 1 d1形式输出c o u t<<n%10;//输出最后一位数d ki f(n>=10)P r i n t D i g i t(n/10);//以逆序输出前k-1位数}v o i d m a i n(){u n s i g n e d i n t n;c i n>>n;P r i n t D i g i t(n);}【程序1-6】汉诺塔问题#i n c l u d e<i o s t r e a m.h>e n u m t o w e r{A='X',B='Y',C='Z'};v o i d M o v e(i n t n,t o w e r x,t o w e r y){//将第n个圆盘从塔座x移到塔座y的顶部c o u t<<"T h ed i s k"<<n<<"i s m o ve df r o m"<<c h a r(x)<<"t o t o p o f t o w e r"<<c h a r(y)<<e n d l;}v o i d H a n o i(i n t n,t o w e r x,t o w e r y,t o w e r z){//将塔座x上部的n个圆盘移到塔座y上,顺序不变。

i f(n){H a n o i(n-1,x,z,y);//将前n-1个圆盘从塔座x移到塔座z,塔座y为中介M o v e(n,x,y);//将第n个圆盘从塔座x移到塔座yH a n o i(n-1,z,y,x);//将塔座z上的n-1个圆盘移到塔座y上,塔座x为中介}}v o i d m a i n(){H a n o i(4,A,B,C);//假定n=4}【程序1-7】排列产生算法t e m p l a t e<c l a s s T>v o i d P e r m(T a[],i n t k,i n t n){i f(k==n-1){//输出一种排列f o r(i n t i=0;i<n;i++)c o u t<<a[i]<<"";c o u t<<e nd l;}e l s e//产生{a[k],…,a[n-1]}各种排列f o r(i n t i=k;i<n;i++){T t=a[k];a[k]=a[i];a[i]=t;P e r m(a,k+1,n);//产生{a[k+1],…,a[n-1]}各种排列t=a[k];a[k]=a[i];a[i]=t;}}【程序2-1】求数组元素累加之和的迭代程序f l o a t S u m(f l o a t l i s t[],c o n s t i n t n){f l o a t t e m p s u m=0.0;c o u n t++;//针对赋值语句f o r(i n t i=0;i<n;i++){c o u n t++;//针对f o r循环语句t e m p s u m+=l i s t[i];c o u n t++;//针对赋值语句}c o u n t++;//针对f o r的最后一次执行c o u n t++;//针对r e t u r n语句r e t u r n t e m p s u m;}【程序2-2】求数组元素累加之和的递归程序f l o a t R S u m(f l o a t l i s t[],c o n s t i n t n){c o u n t++;//针对i f条件i f(n){c o u n t++;//针对R S u m调用和r e t u r n语句r e t u r n R S u m(l i s t,n-1)+l i s t[n-1];}c o u n t++;//针对r e t u r n语句r e t u r n0;}【程序2-3】矩阵乘法f o r(i=0;i<n;i++)//n+1f o r(j=0;j<n;j++){//n(n+1)c[i][j]=0;//n2f o r(k=0;k<n;k++)//n2(n+1)c[i][j]+=a[i][k]*b[k][j];//n3 }【程序3-1】伸展树类#i n c l u d e<i o s t r e a m.h>e n u m R e s u l t C o d e{U n d e rf l o w,O v e r f l o w,S u c c e s s,D u p l i c a t e,F a i l,N o t P r e s e n t};t e m p l a t e<c l a s s T>s t r u c t B T N o d e{//二叉树结点类B T N o d e(c o n s t T&x){e l e m e n t=x;l C h i l d=r C h i l d=N U L L;}T e l e m e n t;B T N o d e*lC h i l d,*r C h i l d;};t e m p l a t e<c l a s s T,c l a s s K>c l a s s S P T r e e{//伸展树类p u b l i c:S P T r e e(){r o o t=N U L L;}R e s u l t C o d e I n s e r t(T x);p r o t e c t e d:B T N o d e<T>*r o o t;p r i v a t e:R e s u l t C o d e I n s e r t(B T N o d e<T>*&p,T x);v o i d L R o t(B T N o d e<T>*&p);v o i d R R o t(B T N o d e<T>*&p);};【程序3-2】旋转函数t e m p l a t e<c l a s s T>v o i d S P T r e e<T>::L R o t(B T N o d e<T>*&p){//前置条件:p有右孩子,实现向左旋转B T N o d e<T>*r=p->rC h i l d;p->r C h i l d=r->l C h i l d;r->l C h i l d=p;p=r;//p的右孩子成为子树根}t e m p l a t e<c l a s s T>v o i d S P T r e e<T>::R R o t(B T N o d e<T>*&p){//前置条件:p有左孩子,实现向右旋转B T N o d e<T>*r=p->lC h i l d;p->l C h i l d=r->r C h i l d;r->r C h i l d=p;p=r;//p的左孩子成为子树根}【程序3-3】伸展树插入t e m p l a t e<c l a s s T,c l a s s K>R e s u l t C o d e S P T r e e<T,K>::I n s e r t(T x){r e t u r n I n s e r t(r o o t,x);}t e m p l a t e<c l a s s T,c l a s s K>R e s u l t C o d e S P T r e e<T,K>::I n s e r t(B T N o d e<T>*&p,T x){//假定T类上已重载了关系运算符或类型转换运算符①R e s u l t C o d e r e s u l t=S u c c e s s;B T N o d e<T>*r;i f(p==N U L L){//插入新结点p=n e w B T N o d e<T>(x);r e t u r n r e s u l t;}i f(x==p->e l e m e n t){r e s u l t=D u p l i c a t e;r e t u r n r e s u l t;}i f(x<p->e l e m e n t){r=p->l C h i l d;i f(r==N U L L){//z i g旋转r=n e w B T N o d e<T>(x);r->r C h i l d=p;p=r;r e t u r n r e s u l t;}e l s e i f(x==r->e l e m e n t){//z i g旋转R R o t(p);r e s u l t=D u p l i c a t e;r e t u r n r e s u l t;①一个类上通过重载关系运算符或类型转换运算符,将结构间的比较视为关键字间的比较。

相关文档
最新文档