算法题

合集下载

算法练习题分章节带标准答案

算法练习题分章节带标准答案

算法练习题---算法概述一、选择题1、下面关于算法的描述,正确的是()A、一个算法只能有一个输入B、算法只能用框图来表示C、一个算法的执行步骤可以是无限的D、一个完整的算法,不管用什么方法来表示,都至少有一个输出结果2、一位爱好程序设计的同学,想通过程序设计解决“韩信点兵”的问题,他制定的如下工作过程中,更恰当的是()A、设计算法,编写程序,提出问题,运行程序,得到答案B、分析问题,编写程序,设计算法,运行程序,得到答案C、分析问题,设计算法,编写程序,运行程序,得到答案D、设计算法,提出问题,编写程序,运行程序,得到答案3、下面说法正确的是()A、算法+数据结构=程序B、算法就是程序C、数据结构就是程序D、算法包括数据结构4、衡量一个算法好坏的标准是()。

A、运行速度快B、占用空间少C、时间复杂度低D、代码短5、解决一个问题通常有多种方法。

若说一个算法“有效”是指( )。

A、这个算法能在一定的时间和空间资源限制内将问题解决B、这个算法能在人的反应时间内将问题解决C、这个算法比其他已知算法都更快地将问题解决D、A和C6、算法分析中,记号O表示(),记号Ω表示()。

A.渐进下界B.渐进上界C.非紧上界D.非紧下界7、以下关于渐进记号的性质是正确的有:()A.f(n)(g(n)),g(n)(h(n))f(n)(h(n))=Θ=Θ⇒=ΘB.f(n)O(g(n)),g(n)O(h(n))h(n)O(f(n))==⇒=C. O(f(n))+O(g(n)) = O(min{f(n),g(n)})D.f(n)O(g(n))g(n)O(f(n))=⇔=8、记号O的定义正确的是()。

A. O(g(n)) = { f(n) | 存在正常数c和n0使得对所有n≥n0有:0≤f(n) ≤cg(n) };B. O(g(n)) = { f(n) | 存在正常数c和n0使得对所有n≥n0有:0≤cg(n) ≤f(n) };C. O(g(n)) = { f(n) | 对于任何正常数c>0,存在正数和n0 >0使得对所有n≥n0有0 ≤f(n)<cg(n) };D. O(g(n)) = { f(n) | 对于任何正常数c>0,存在正数和n0 >0使得对所有n≥n0有:0 ≤cg(n) <f(n) };9、记号Ω的定义正确的是()。

算法练习题——精选推荐

算法练习题——精选推荐

算法练习题1. 斐波那契数列:1 1 2 3 5 8 13 21 …… 求第20个数;2. 今有雉兔同笼,上有三⼗五头,下有九⼗四⾜,问雉兔各⼏何?3. 求1000以内的⽔仙花数4. 求⼀个数的阶乘5. 求多个连续数的阶乘之和6. 如果今天是星期⼆,那么1000天后是星期⼏?⽤户输⼊⼀个天数,计算这个天数后是星期⼏?7. 苹果3元⼀个,鸭梨2元⼀个,桃⼦1元⼀个。

现在想⽤200元买100个⽔果,在控制台中列出所有可能性8. 求任意⼀个⼩于100000的正整数的位数,并逆序打印每⼀位数字⽐如:567,位数是3位,以此打印7 ,6 ,59. 有⼀分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。

程序分析:请抓住分⼦与分母的变化规律。

10. 有⼀些苹果,每⼈分5个多1个,每⼈分6个多2个,每⼈分7个多3个,⼀共有多少个苹果11. 判断⼀个数字是不是素数12. 利⽤条件运算符的嵌套来完成此题:学习成绩>=90分的同学⽤A表⽰,60-89分之间的⽤B表⽰,60分以下的⽤C表⽰。

1.程序分析:(a>b)?a:b这是条件运算符的基本例⼦。

13. 求s=a+aa+aaa+aaaa+aa...a的值,其中a是⼀个数字。

例如2+22+222+2222+22222(此时共有5个数相加),⼏个数相加由⽤户输⼊(prompt)14. ⼀球从100⽶⾼度⾃由落下,每次落地后反跳回原⾼度的⼀半;再落下,求它在第10次落地时,共经过多少⽶?第10次反弹多⾼?15. 求10000以内的完美数如果⼀个数恰好等于它的约数之和,则称该数位“完美数”。

16. 寻找丑数题⽬:我们把只包含因⼦2、3 和5 的数称作丑数(Ugly Number)。

例如6、8 都是丑数,但14 不是,因为它包含因⼦7。

习惯上我们把1 当做是第⼀个丑数。

求按从⼩到⼤的顺序的第1500 个丑数。

17. 猴⼦吃桃问题:猴⼦第⼀天摘下若⼲个桃⼦,当即吃了⼀半,还不瘾,⼜多吃了⼀个第⼆天早上⼜将剩下的桃⼦吃掉⼀半,⼜多吃了⼀个。

第二章算法题

第二章算法题

1.4、试编写算法,求一元多项式P n(x)=a0+a1x+a2x2+a3x3+…a n x n的值P n(x0),并确定算法中的每一语句的执行次数和整个算法的时间复杂度,要求时间复杂度尽可能小,规定算法中不能使用求幂函数。

注意:本题中的输入a i(i=0,1,…,n),x和n,输出为P n(x0)。

通常算法的输入和输出可采用下列两种方式之一:(1)通过参数表中的参数显式传递。

(2)通过全局变量隐式传递。

试讨论这两种方法的优缺点,并在本题算法中以你认为较好的一种方式实现输入和输出【解答】(1)通过参数表中的参数显式传递优点:当没有调用函数时,不占用内存,调用结束后形参被释放,实参维持,函数通用性强,移置性强。

缺点:形参须与实参对应,且返回值数量有限。

(2)通过全局变量隐式传递优点:减少实参与形参的个数,从而减少内存空间以及传递数据时的时间消耗缺点:函数通用性降低,移植性差算法如下:通过全局变量隐式传递参数PolyValue(){ int i,n;float x,a[],p;printf(“\nn=”);scanf(“%f”,&n);printf(“\nx=”);scanf(“%f”,&x);for(i=0;i<n;i++)scanf(“%f ”,&a[i]); /*执行次数:n次*/p=a[0];for(i=1;i<=n;i++){ p=p+a[i]*x; /*执行次数:n次*/x=x*x;}printf(“%f”,p);}算法的时间复杂度:T(n)=O(n)通过参数表中的参数显式传递float PolyValue(float a[ ], float x, int n){float p,s;int i;p=x;s=a[0];for(i=1;i<=n;i++){s=s+a[i]*p; /*执行次数:n次*/p=p*x;}return(p);}算法的时间复杂度:T(n)=O(n)[techer's]#include <stdio.h>#define MAXSIZE 10float pnx(float a[],float x,int n){ int j;float sum=0.0;for(j=n;j>0;j--) /*a[0]=a0,[a1]=a1,...*/sum=(sum+a[j])*x;sum=sum+a[0];return(sum);}void main(){int n,i;float a[MAXSIZE],x,result;printf("Input the value of x:\n");scanf("%f",&x);printf("\n");printf("Input The n:\n");scanf("%d",&n);printf("\n");printf("Input a0,a1,...an:");for(i=0;i<=n;i++) scanf("%f",&a[i]);printf("\n");result=pnx(a,x,n);printf("The result is:%f\n",result);}2.4 已知线性表L递增有序。

算法期末考试题及答案

算法期末考试题及答案

算法期末考试题及答案一、选择题(每题2分,共20分)1. 以下哪个算法不是排序算法?A. 快速排序B. 归并排序C. 深度优先搜索D. 堆排序答案:C2. 在二叉树的遍历算法中,中序遍历的顺序是:A. 先序B. 后序C. 中序D. 层序答案:C3. 动态规划与分治法算法的主要区别在于:A. 问题分解的方式B. 问题解决的顺序C. 存储中间结果的方式D. 问题规模的大小答案:C4. 哈希表的冲突解决方法不包括:A. 开放寻址法B. 链地址法C. 线性探测法D. 排序答案:D5. 以下哪个是图的遍历算法?A. 归并排序B. 深度优先搜索C. 快速排序D. 堆排序答案:B6. 贪心算法的特点是:A. 每一步都选择最优解B. 每一步都选择局部最优解C. 每一步都选择最差解D. 每一步都随机选择解答案:B7. 在算法分析中,时间复杂度O(1)表示:A. 常数时间B. 线性时间C. 对数时间D. 多项式时间答案:A8. 以下哪个是排序算法的时间复杂度为O(n^2)?A. 快速排序B. 归并排序C. 冒泡排序D. 堆排序答案:C9. 递归算法的基本原理是:A. 重复执行B. 分而治之C. 循环调用D. 迭代求解答案:B10. 以下哪个是算法的时间复杂度为O(log n)的典型例子?A. 二分查找B. 线性查找C. 冒泡排序D. 快速排序答案:A二、简答题(每题10分,共20分)1. 简述快速排序算法的基本思想及其时间复杂度。

答案:快速排序是一种分治法的排序算法。

其基本思想是选择一个元素作为“基准”(pivot),然后将数组分为两部分,一部分包含所有小于基准的元素,另一部分包含所有大于基准的元素。

这个过程称为分区(partitioning)。

之后,递归地对这两部分进行快速排序。

快速排序的平均时间复杂度为O(n log n),但在最坏情况下(例如数组已经排序或所有元素相等)时间复杂度为O(n^2)。

2. 解释什么是动态规划,并给出一个动态规划问题的例子。

算法测试题及答案

算法测试题及答案

算法测试题及答案一、选择题1. 以下哪个选项不是排序算法?A. 冒泡排序B. 选择排序C. 快速排序D. 深度优先搜索答案:D2. 在二叉树中,深度为5的节点最多有多少个?A. 16B. 32C. 64D. 31答案:D二、填空题1. 递归算法的基本思想是 _ ,即把问题分解成相同但规模更小的问题。

答案:分而治之2. 动态规划与分治法的不同之处在于动态规划会 _ ,而分治法则不会。

答案:存储子问题的解三、简答题1. 请简述什么是贪心算法,并给出一个例子。

答案:贪心算法是一种在每一步选择中都采取在当前状态下最好或最优的选择,从而希望导致结果是全局最好或最优的算法策略。

例如,活动选择问题,给定一系列活动,每个活动都有一个开始时间和结束时间,贪心算法会按照结束时间的早晚来选择活动,从而最大化参与活动的数量。

2. 描述快速排序算法的基本思想。

答案:快速排序算法是一种分治策略,基本思想是选择一个元素作为“基准”(pivot),然后将数组分为两个子数组,一个包含所有小于基准的元素,另一个包含所有大于基准的元素。

这个过程称为分区(partitioning)。

之后,递归地将分区过程应用到两个子数组上,直到每个子数组只有一个元素或为空。

四、计算题1. 给定一个数组 [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5],请使用快速排序算法对其进行排序,并给出排序后的数组。

答案:使用快速排序算法对给定数组进行排序后,得到的数组为 [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]。

2. 假设有一个二叉搜索树,其根节点的值为10,现在要删除值为5的节点,请描述删除过程。

答案:删除二叉搜索树中的节点分为三种情况:- 情况1:要删除的节点没有子节点,直接删除该节点。

- 情况2:要删除的节点只有一个子节点,用其子节点替换该节点。

- 情况3:要删除的节点有两个子节点,找到该节点的直接前驱或直接后继,用其值替换要删除的节点,然后删除直接前驱或直接后继。

算法练习题

算法练习题

算法练习题一、基础算法1. 编写一个程序,实现一个冒泡排序算法。

2. 实现一个选择排序算法。

3. 实现一个插入排序算法。

4. 编写一个函数,计算一个整数数组中的最大值和最小值。

5. 编写一个函数,实现二分查找算法。

6. 编写一个函数,实现快速排序算法。

7. 编写一个函数,判断一个整数是否为素数。

8. 编写一个函数,实现反转一个整数数组。

9. 编写一个函数,计算两个整数数组的交集。

10. 编写一个函数,判断一个字符串是否为回文。

二、数据结构11. 实现一个单链表的基本操作,包括插入、删除、查找。

12. 实现一个双向链表的基本操作,包括插入、删除、查找。

13. 实现一个栈的基本操作,包括压栈、出栈、查看栈顶元素。

14. 实现一个队列的基本操作,包括入队、出队、查看队首元素。

15. 实现一个二叉树的基本操作,包括插入、删除、查找。

16. 实现一个二叉搜索树的基本操作,包括插入、删除、查找。

17. 实现一个哈希表的基本操作,包括插入、删除、查找。

三、搜索与图论18. 编写一个程序,实现深度优先搜索(DFS)算法。

19. 编写一个程序,实现广度优先搜索(BFS)算法。

20. 编写一个程序,求解迷宫问题。

21. 编写一个程序,计算一个有向图的拓扑排序。

22. 编写一个程序,计算一个无向图的欧拉回路。

23. 编写一个程序,计算一个加权无向图的最小树(Prim算法)。

24. 编写一个程序,计算一个加权有向图的最短路径(Dijkstra算法)。

25. 编写一个程序,计算一个加权有向图的所有顶点对的最短路径(Floyd算法)。

四、动态规划26. 编写一个程序,实现背包问题。

27. 编写一个程序,计算最长公共子序列(LCS)。

28. 编写一个程序,计算最长递增子序列(LIS)。

29. 编写一个程序,实现编辑距离(Levenshtein距离)。

30. 编写一个程序,实现硬币找零问题。

31. 编写一个程序,实现矩阵链乘问题。

算法测试题

算法测试题一、选择题1. 以下哪个不是排序算法?A. 冒泡排序B. 快速排序C. 深度优先搜索D. 归并排序2. 在二叉树中,深度为2的节点有多少个?A. 1B. 2C. 4D. 无法确定3. 动态规划通常用于解决以下哪种问题?A. 线性问题B. 组合问题C. 排序问题D. 搜索问题4. 哈希表的主要时间复杂度是:A. O(1)B. O(log n)C. O(n)D. O(n^2)5. 在图论中,Dijkstra算法用于解决以下哪种问题?A. 最短路径问题B. 最大流问题C. 最小生成树问题D. 拓扑排序问题二、简答题1. 解释什么是贪心算法,并给出一个实际应用的例子。

2. 描述快速排序算法的基本思想,并简述其时间复杂度。

3. 什么是递归?请给出一个递归函数的示例,并解释其工作原理。

三、编程题1. 编写一个函数,实现冒泡排序算法,并对一个整数数组进行排序。

输入:`[5, 3, 8, 4, 2]`输出:一个按升序排列的数组。

2. 实现一个函数,使用深度优先搜索(DFS)遍历一个无向图,并返回所有顶点的遍历顺序。

3. 给定一个字符串,请编写一个函数来检查它是否是回文,忽略空格、标点符号和大小写。

4. 编写一个函数,实现Dijkstra算法,找到图中单个源点到所有其他顶点的最短路径。

5. 给定一个整数数组,请实现一个函数来找到最长递增子序列的长度。

四、分析题1. 比较和分析快速排序和归并排序的时间复杂度,并讨论它们在实际应用中的优缺点。

2. 解释动态规划与分治算法的区别,并给出一个动态规划问题的例子,说明其解决方案。

五、开放性问题1. 如何使用算法来解决实际生活中的优化问题?请给出一个具体的例子,并描述你将如何设计算法来解决它。

2. 在处理大数据集时,算法的选择对性能有何影响?请讨论并给出一个大数据集处理的算法选择示例。

请注意,以上题目仅供测试使用,具体实现和解答需要根据实际编程语言和环境进行调整。

算法经典必刷题

算法经典必刷题
以下是一些经典的算法必刷题目,供您参考:
1. 两数之和(LeetCode 1):给定一个整数数组 nums 和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。

2. 三数之和(LeetCode 498):给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有
满足条件且不重复的三元组。

3. 最长回文子串(LeetCode 5):给定一个字符串 s,找到 s 中最长的回
文子串。

你可以假设 s 的最大长度为 1000。

4. 二分查找(LeetCode 7):给定一个排序数组和一个目标值,在数组中
查找目标值,并返回其索引。

如果目标值不存在于数组中,则返回 -1。

5. 盛最多水的容器(LeetCode 11):给定 n 个非负整数 a1,a2,...,an,每个数代表一个坐标点 (i, ai)。

在坐标内画 n 条垂直线,使得 i 垂直线的两
个端点分别为 (i, ai) 和 (i, 0)。

找出其中的一条线,使得该条线落在这 n 条
垂直线构成的区域内时,它到 x 轴的垂线段区域内的水最多。

6. 合并两个有序链表(LeetCode 20):将两个升序链表合并为一个新的升序链表并返回。

新链表是通过拼接给定的两个链表的所有节点组成的。

这些题目都是经典的算法问题,对于提高算法和数据结构方面的能力非常有帮助。

当然,还有很多其他的经典算法必刷题目,您可以根据自己的实际情况选择题目进行练习。

算法练习题-2

算法练习题-2一、选择题1、下列哪些问题不能用贪心法求解?A)霍夫曼编码问题B)单源最短路径问题C)0-1背包问题D)最小生成树问题()2、二分搜索算法是利用()实现的算法。

A、分治策略B、动态规划法C、贪心法D、回溯法2、下列不是动态规划算法基本步骤的是(A)。

A、找出最优解的性质B、构造最优解C、算出最优解D、定义最优解4.下列算法中通常以自底向上的方式求解最优解的是()。

A、备忘录法B、动态规划法C、贪心法5、衡量一个算法好坏的标准是()。

A运行速度快B占用空间少C时间复杂度低D代码短6.最长公共子序列算法利用的算法是()。

A、分支界限法B、动态规划法C、贪心法D、回溯法7.下面是贪心算法的基本要素的是()。

A、重叠子问题B、构造最优解C、贪心选择性质8、下面关于NP问题说法正确的是()ANP问题都是不可能解决的问题BP类问题包含在NP类问题中CNP完全问题是P类问题的子集DNP类问题包含在P类问题中D、定义最优解D、回溯法9下列哪些问题是典型的NP完全问题:A.排序问题B.n-后问题C.m-着色问题D.旅行商问题10.()是贪心算法与动态规划算法的共同点。

A、重叠子问题B、构造最优解C、贪心选择性质D、最优子结构性质11.矩阵连乘问题的算法可由(B)设计实现。

A、分支界限算法B、动态规划算法C、贪心算法D、回溯算法12、下面问题()不能使用贪心法解决。

A单源最短路径问题B活动选择问题C最小花费生成树问题D最优二叉搜索树问题13.实现合并排序利用的算法是()。

A、分治策略B、动态规划法B、构造最优解C、贪心法D、回溯法D、子问题14.下列是动态规划算法基本要素的是()。

A、定义最优解重叠性质A、最优子结构C、算出最优解15.贪心算法与动态规划算法的主要区别是()。

B、贪心选择性质C、构造最优解D、定义最优解16.一个问题可用动态规划算法或贪心算法求解的关键特征是问题的()。

A、重叠子问题B、最优子结构性质C、贪心选择性质D、定义最优解17.实现最长公共子序列利用的算法是(B)。

考研算法试题及答案详解

考研算法试题及答案详解一、单项选择题1. 以下哪个算法的时间复杂度是O(nlogn)?A. 冒泡排序B. 快速排序C. 插入排序D. 选择排序答案:B2. 在图的遍历算法中,深度优先搜索(DFS)使用的是哪种数据结构?A. 队列B. 栈C. 链表D. 堆答案:B二、填空题1. 在动态规划中,状态转移方程通常表示为:\[ dp[i] =\min(dp[i], dp[j] + cost[i][j]) \],其中\[ cost[i][j] \]表示从状态\[ j \]到状态\[ i \]的转移代价。

答案:\[ \min \]2. 哈希表的平均查找时间复杂度是O(1),最坏情况下的时间复杂度是O(n),其中n是哈希表中元素的数量。

三、解答题1. 请描述二叉树的前序遍历算法。

答案:二叉树的前序遍历算法首先访问根节点,然后递归遍历左子树,最后递归遍历右子树。

2. 给定一个无向图,如何使用Floyd-Warshall算法计算图中所有顶点对之间的最短路径?答案:Floyd-Warshall算法是一种动态规划算法,用于在加权图中找到所有顶点对之间的最短路径。

算法步骤如下:- 初始化距离矩阵dist,其中dist[i][j]表示顶点i到顶点j的最短路径长度。

- 对于每个顶点k,更新dist[i][j],如果通过k的路径更短,则更新dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j])。

- 遍历所有顶点k,更新dist[i][j]。

四、编程题1. 编写一个函数,实现字符串的反转。

答案:```pythondef reverse_string(s):return s[::-1]```2. 给定一个整数数组,请编写一个函数,找出数组中第二大的数。

答案:```pythondef find_second_max(nums):first_max = second_max = float('-inf')for num in nums:if num > first_max:second_max = first_maxfirst_max = numelif num > second_max and num != first_max:second_max = numreturn second_max ```。

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

算法题(共32个题目)200348. 在信号量机制中,若P(S)操作是可中断的,则会有什么问题?此题答案为:答:P(S)的操作如下:BeginS.Value:= S.Value-1; ①If S.Value<0 Then ②BeginInsert(*,S.L);Block(*) ③EndEnd.若P(S)可中断的,例如进程A在执行了语句①之后从CPU上退下了,假定此时S.Value=0;这时换另一进程B,B又将S.Value 的值减1使之为-1,在执行语句③时,B被阻塞;然后又换回A执行,由于A的"断点"是语句①之后,当它执行语句②时,由于这时S.Value已经是-1,故进程继续执行而被阻塞。

这就出现了错误:本来A操作P(S)操作后,S.Value=0,是不应该被阻塞的,现在却被阻塞了。

200350. 何谓临界区?下面给出的两个进程互斥的算法是安全的吗?为什么?#define true;# define false;Int flag[2];flag[1]=flag[2]=false; enter-crtsec(i)int i;{While(flag[1-i])flag[i]=true;}feave-crtsec(i)Int i;{flag[i]=false;}process I;…Enter-crtsec(i);In critical section; Leave-crtsec(i);此题答案为:答:一次仅允许一个进程使用的资源称为临界资源,在进程中对临界资源访问的程序段称为临界区。

从概念上讲,系统中各进程在逻辑上是独立的,它们可以按各自的速度向前推进。

但由于它们共享某些临界资源,因而产生了临界区问题。

对于具有临界区问题的并发进程,它们之间必须互斥,以保证不会同时进入临界区。

这种算法不是安全的。

因为,在进入临界区的enter-crtsec()不是一个原语操作,如果两个进程同时执行完其循环(此前两个flag均为false),则这两个进程可同时进入临界区。

53. 某车站售票厅,任何时刻最多可容纳20名购票者进入,当售票少于20名购票者时,则厅外的购票者可立即进入,否则需在外面等待。

若把一个购票者看作一个进程,请回答下列问题:(1)用P、V操作管理这些并发进程时,应怎样定义信号量?写出信号量的初值以及信号量各种取值的含义。

(2)根据所定义的信号量,把应执行的P、V操作填入下述程序中,以保证进程能够正确地并发执行。

Cobegin PROCESS Pi(i=1,2,…)Begin进入售票厅;购票;退出;End;Coend(3)若欲购票者最多为n个人,写出信号量可能的变化范围(最大值和最小值)。

此题答案为:售票厅问题解答如下:(1)定义一信号量S,初始值为20。

S>0 S的值表示可继续进入售票厅的人数;S=0 表示售票厅中已有20名购票者;S<0 |S|的值为等待进入售票厅中的人数。

(2)上框为P(S),下框为V(S)。

(3)S的最大值为20,S的最小值为20-N,N为某一时刻需要进入售票厅的最多人数。

200362. 在批处理系统、分时系统和实时系统中,各采用哪几个进程(作业)调度算法?此题答案为:答:(1)批处理系统中的作业调度算法有:先来先服务算法(FCFS)短作业优先算法(SJF)优先级调度算法(HPF)高响应比优先算法(RF)。

批处理系统的进程调度算法有:先进先出算法(FIFO)短进程优先算法(SPF)优先级调度算法(HPF)高响应比优先算法(RF)。

(2)分时系统中只设有进程调度(不设作业调度),其进程调度算法只有轮转法(RR)一种。

(3)实时系统中只设有进程(不设作业调度),其进程调度算法调度有:轮转法、优先级调度算法。

前者适用于时间要求不严格的实时系统;后者用于时间要求严格的实时系统。

后者又可细分为:非抢占式优先级调度、抢占式优先级调度、基于时钟中断的抢占式优先级调度。

注意,一个纯粹的实时系统是针对特定应用领域设计的专用系统。

作业提交的数量不会超过系统规定的多道程序的道数,因而可全部进入内存。

若将实时系统与批处理系统结合的话,就可以让作业量超过多道程序道数,使优先级低的作业呆在外存的后备队列上。

200372. 假设系统中有5个进程,它们的到达时间和服务时间见下表1,忽略I/O以及其他开销时间,若按先来先服务(FCFS)、非抢占的短作业优先和抢占的短作业优先三种调度算法进行CPU调度,请给出各个进程的完成时间、周转时间、带权周转时间、平均周转时间和平均带权周转时间,完成表2。

表1 进程到达和需要服务时间进程到达时间服务时间A 0 3B 2 6C 4 4D 6 5E 8 2此题答案为:表2 进程的完成时间和周转时间进程 A B C D E 平均FCFS完成时间 3 9 13 18 20周转时间 3 7 9 12 12 8.6 带权周转时间 1.00 1.17 2.25 2.40 6.00 2.56 SPF(非抢占)完成时间 3 9 15 20 11周转时间 3 7 11 14 3 7.6 带权周转时间 1.00 1.17 1.75 2.80 1.50 1.84 SPF(抢占)完成时间 3 15 8 20 10周转时间 3 13 4 14 2 7.2 带权周转时间 1.00 2.16 1.00 2.80 1.00 1.59200377. 一个逻辑空间最多可有64个页,每页1KB字节。

若把它映射到由32个物理块组成的存储器。

问:(1)有效的逻辑地址由多少位?(2)有效的物理地址由多少位?此题答案为:答:一个逻辑空间有64个页,每页1KB字节。

若把它映射到由32个物理块组成的存储嚣。

64=26,则:(1)逻辑地址有16位。

(2)物理地址有15位。

说明:解此题的关键是要知道在分页管理中,"页"和"块"是一样大小的,这样才知道物理存储器是32KB。

200380. 在某分页系统中,测得CPU和磁盘的利用率如下,试指出每种情况下的问题和措施。

(1)CPU的利用率为15%,磁盘利用率为95%。

(2)CPU的利用率为88%,磁盘利用率为3%。

(3)CPU的利用率为13%,磁盘利用率为5%。

此题答案为:答:在某分页虚存系统中,在题中的CPU和磁盘的利用率的情况下,出现的问题和应采取的措施如下:(1)可能已出现了抖动现象,应减少系统的进程数。

(2)系统比较正常,可考虑适当增加进程数以提高资源利用率。

(3)CPU和磁盘的利用率都较低,必须增加并发进程数。

200381. 对访问串:1,2,3,4,1,2,5,1,2,3,4,5,指出在驻留集大小分别为3,4时,使用FIFO和LRU替换算法的缺页次数。

结果说明了什么?此题答案为:答:首先采用FIFO,当m=3时,缺页次数=9,当m=4时,缺页次数=10。

采用LRU算法,当m=3时,缺页次数=10;当m=4时,缺页次数=8。

结果说明:FIFO有Belady奇异现象,即不满足驻留集增大,缺页次数一定减小的规律;另外在m=3时,LRU的缺页次数比FIFO要多,所以LRU算法并不总优于FIFO,还要看当前访问串的特点。

200389. 一个分页存储器的页表存放在内存。

(1)若内存的存取周期为0.6ms,则CPU从内存取一条指令(或一个操作数)需多少时间?(2)若使用快表且快表的命中率为75%,则内存的平均存取周期为多少?此题答案为:答:一个分页存储器的页表存放在内存(1)因为页表放在内存,故取一条指令(或一个操作数)须访问两次内存,所以需0.6ms×2=1.2ms的时间。

(2)这里家假设访问快表的时间忽略不计,命中快表时,取数只要一次访问,故此时的平均存取周期为0.6ms×0.75+1.2ms×(1-0.75)=0.75ms200392. 在一个请求分页系统中,采用LRU页面置换算法时,假如一个作业的页面走向为4、3、2、1、4、3、5、4、3、2、1、5,当分配给该作业的物理内存块数M分别为3和4时,分别计算在访问过程中所发生的缺页次数和缺页率,并画出页面置换图。

此题答案为:当M=3时,缺页次数为10次,缺页率为10/12=0.83=83%。

当M=4时,缺页次数为8次,缺页率为8/12=0.66=66%。

可见,增加分配给作业的内存块数可以减少缺页次数,从而降低缺页率。

200394. 对于一个使用快表的页式虚存,设快表的命中率为70%,内存的存取周期为1ns;缺页处理时,若内存有可用空间或被置换的页面在内存未被修改过,则处理一个缺页中断需8000ns,否则需20000ns。

假定被置换的页面60%是属于后一种情况,为了保证有效存取时间不超过2ns,问可接受的最大缺页率是多少?此题答案为:答:设可接受的最大缺页率位p,则有1ns×0.7+2ns×(1-0.7-p)+0.4p×8000ns+0.6p×20000ns=2ns即0.7+0.6-2p+3200p+12000p=215198p=0.7P=0.000046200396. 在分页存储管理系统中,存取一次内存的时间是8ns,查询一次快表的时间是1ns,缺页中断的时间是20ns。

假设页表的查询与快表的查询同时进行,当查询页表时,如果该页在内存但快表中没有页表项,系统将自动把该页页表项送入快表。

一个作业最多可保留3个页面在内存。

现在开始执行一作业,系统连续对作业的2,4,5,2,7,6,4,8页面的数据进行一次存取,如分别采用FIFO算法和最优页面置换算法,求每种上存取这些数据需要的总时间。

此题答案为:答:(1)FIFO第2页面:20+8×3第4页面:20+8×3第5页面:20+8×3第2页面:8+1第7页面:20+8×3第6页面:20+8×3第4页面:20+8×3第8页面:20+8×3因此总的时间是(20+8×3)×7+(8+1)ns(2) OPT第2页面:20+8×3第4页面:20+8×3第5页面:20+8×3第2页面:8+1第7页面:20+8×3第6页面:20+8×3第4页面:8+1第8页面:8+1因此总的时间是(20+8×3)×5+(8+1)×3ns200532. 在一个请求分页系统中,采用LRU页面置换算法时,假如一个作业的页面走向为1、3、2、1、1、3、5、1、3、2、1、5,当分配给该作业的物理内存块数M分别为3和4时,分别计算在访问过程中所发生的缺页次数和缺页率,并画出页面置换图。

相关文档
最新文档