408真题
。
vector<>
这个作者很懒,什么都没留下…
展开
-
【数据结构】-图-【2021真题】-判断G是否存在EL路径
翻开卷子第一眼看的就是算法图,这么多年来第一次考图,非常惊喜,第一遍没有看懂题目,怕时间不够就去做选择题了,后来看了几遍才恍然大悟,也因此耽误了很多时间,差点没写完 。现在还没有出答案,在这里记录一下我的理解和答案,如果有错误再回来更正。【算法思路】“当G中度为奇数的顶点个数为不大于2的偶数时,G存在EL路径”问“判断G是否存在EL路径”翻译一下题目:度奇数的顶点个数为不大于2的偶数:有0个或者2个度为奇数的顶点是否存在EL路径:是否有0个或者2个度为奇数的顶点给了邻接矩阵的存储..原创 2020-12-29 15:07:25 · 4092 阅读 · 13 评论 -
【操作系统】-同步互斥-【2020真题】-现有5个操作ABCDE......
是一个非常常规的前驱后继问题同步关系:ab完成c才能走,cd完成e才能走互斥关系:无同步关系:ab完成c才能走,cd完成e才能走semaphore ac=0;semaphore bc=0;semaphore ce=0;semaphore de=0;void A(){ while(true) { 执行操作 v(ac); }}void B(){ while(true) { 执行操作原创 2020-12-06 15:11:42 · 7461 阅读 · 0 评论 -
【数据结构】-线性表-【2020真题】-三元组最小距离
【算法思路】不妨设三元组中a<b<c ,a为最小值,b为最大值,要求的距离=2*(c-a),如图所示也就是说只有最大值c和最小值a会影响距离的大小,寻找最小距离的方法是每次都固定一个c,寻找这个c下使得距离最小的a1.开始遍历时最小值为a,最大值为c,当前的abc确定一个距离54,暂时保存下来2.试探是否存在更大一点的a使得a-c更小,也就是a的下标向前移动,得到新的三元组3.新的三元组中重新确定abc的身份,此时新的最小值更小,于是更新54为244.继续向前..原创 2020-12-04 22:15:30 · 2441 阅读 · 3 评论 -
【操作系统】-同步互斥-【2017真题】-某进程有三个并发执行的进程...
注意题眼:“最大程度并发”进程1:对x,y进行读操作进程2:对y,z进行读操作进程3:对y,z进行读写操作【同步关系】:题目并没有要求各个运算的顺序,所以没有同步关系【互斥关系】:进程1和2只有读操作,因此1,2之间不存在互斥关系;1与3,互斥使用y;2与3,互斥使用y,z;因此对需要设置两个信号量对y进行互斥访问,否则12之间对y的操作也会被锁定,这时候起始也只会扣一两分钟,不影响大局。semaphore mutex_y_1=1//1与3对y的互斥访问semaphore m..原创 2020-11-27 19:16:40 · 4553 阅读 · 5 评论 -
【操作系统】-同步互斥-【2015真题】-A、B两人通过信箱辩论...
同步关系:A信箱中有信时A才能取信,B信箱中有空位时A才能放信,同理B也是一样的互斥关系:两个进程对两个信箱的访问都是互斥的semaphore mutex_A=1;//互斥访问A信箱semaphore mutex_B=1;//互斥访问B信箱semaphore empty_A=M-x;//A信箱中的空位semaphore full_A=x;//A信箱中的信件数semaphore empty_B=N-y;semaphore full_B=x;//B信箱中的信件数void A(){..原创 2020-11-26 16:26:49 · 3436 阅读 · 8 评论 -
【操作系统】-同步互斥-【2014真题】-多生产者多消费者
同步关系 :缓冲区未满才能放入,缓冲区未空才能取,某个消费者连续取十件之后其他消费者才能取互斥关系:所有进程互斥访问缓冲区也是一个需要立刻写出来的题,不能耽搁semaphore mutex=1;//互斥访问缓冲区semaphore empty=1000;//1000个缓冲区位置semaphore full=0;semaphore consume;//保证某消费者连续取数void producer(){ while(true) { p(empty);..原创 2020-11-25 14:53:19 · 595 阅读 · 6 评论 -
【操作系统】-同步互斥-【2013真题】-某博物馆最多容纳500人...
45.(7 分)某博物馆最多可容纳 500 人同时参观,有一个出入口,该出入口一次仅允许一个人 通过。参观者的活动描述如下:cobegin参观者进程 i:{进门;参观;出门;}coend请添加必要的信号量和 P、V(或 wait()、signal( ))操作,以实现上述过程中的互斥 与同步。要求写出完整的过程,说明信号量的含义并赋初值。应该是真题中最简单的题目了,快准狠迅速解决掉,不可以丢分互斥关系:一个出入口同步关系:少于500人时才能进入参观semaph..原创 2020-11-24 19:45:18 · 7846 阅读 · 2 评论 -
【操作系统】-同步互斥-【2011真题】-某银行提供一个服务窗口...
同步关系:有座位才能取号;营业员空闲才能叫号;有顾客时才能叫号互斥关系:取号机互斥访问【解题步骤】1.草稿上进行进程行为轨迹,多留空位2.一步一步往下走,要等待的地方就p一下3.pv操作成对出现,根据p写完v4.x先确定pv操作的位置,再思考设置什么样的信号量,信号量的含义是什么?【坑点】serve=0;是因为,serve代表的是营业员叫号,所以对于初始情况下,如果serve=1,顾客进程不需要叫号也获得了服务,这里的逻辑就不对了。但是serve代表叫号这层含义让人很..原创 2020-11-23 22:03:20 · 3363 阅读 · 5 评论 -
【操作系统】-同步互斥-【2009真题】-三个进程互斥使用一个包含N个....
【问题分析】同步问题:n个缓冲区单元,缓冲区有空位置时才能写;有奇数才能读出奇数,有偶数才能读出偶数互斥问题:三个进程彼此互斥访问缓冲区【坑】不要误以为这是读者写者问题,读者写者问题是针对“共享文件”的访问,所以多个读者之间不存在互斥关系但是这里是“缓冲区”,这其实只是一个单生产者多消费者问题而已,对应教材中的“吸烟者问题”【代码】semaphore mutex=1;//互斥访问缓冲区;semaphore empty=n;//缓冲区中有n个单元semaphore odd..原创 2020-11-22 17:13:18 · 6210 阅读 · 8 评论 -
【操作系统】-同步互斥-【2019真题】-有n位哲学家围在一张圆桌边..
【问题分析】传统哲学家进餐问题:5位哲学家,5根筷子,5个碗------只需要考虑使用筷子的互斥问题本题描述的进餐问题:n位哲学家,n根筷子,m个碗-----还需要考虑使用碗的互斥问题解决传统的哲学家问题有三种办法:1.最多允许4位哲学家同时进餐2.只有当左右筷子同时都拿起时才允许进餐3.偶数号哲学家先拿左边筷子,奇数号哲学家拿右边筷子本题描述的哲学家进餐问题在上述方法1的基础上进行扩充。当n-1<m时,碗足够多,不对互斥问题带来影响,此时最多允许n-1个哲学家进餐原创 2020-11-22 16:07:18 · 4232 阅读 · 5 评论 -
【数据结构】-408真题-编程题总结
单链表【2009】【2012】【2015】【2019】数组【2010】https://blog.csdn.net/qq_39328436/article/details/108555686考点:循环左移数组方法:1.全部翻转 2.前面翻转 3.后面翻转【2011】https://blog.csdn.net/qq_39328436/article/details/106673506考点:找两个数组的中位数方法:归并比较【2013】https://blog原创 2020-11-19 21:14:38 · 5865 阅读 · 7 评论 -
【数据结构】-时间复杂度和空间复杂度
1.时间复杂度注意研究的是n趋向于无穷大的时候的数量级做题方法:寻找基本语句执行次数与问题规模之间的关系基本语句的选取方法:即有乘法又有加法时,选取乘法为基本语句;只有加法时,选取加法为基本语句主要有三种考察方式:普通类型:直接找基本语句执行次数与问题规模之间的关系【2017年真题】嵌套类型:涉及到无穷小量的乘法【2014年408真题】并列类型:涉及道无穷小量的加法递归类型:寻找递归次数即可...原创 2020-10-30 18:36:42 · 435 阅读 · 0 评论 -
【单链表】-剑指22-2009考研真题-查找链表中倒数第k个位置上的节点
2009统考真题思路很巧妙两个指针:p指针先向前走k步,然后pq一起移动,这样,q永远都在p前面k个位置,所以当p到达链表尾部的时候,q就是尾部之前的k位置,也就是倒数k位置。 bool findTail_K(LinkList List,int k) { LNode *p = List->next; LNode *q = List->next; int step = 0; while (step<k) { p = p->next; .原创 2020-07-21 20:47:52 · 1037 阅读 · 0 评论 -
【数据结构】-线性表-【2010真题】-数组循环左移
算法思路:完全没有想到这个点,先将全部元素翻转,后将前部分翻转,最后将后部分翻转,最后就满足了循环左移的效果翻转的算法思路:从前向后,移动到中点位置的时候停止交换typedef struct { int *data; int maxsize, length;}sqlist;sqlist Reverse2(sqlist L, int left, int right) { int temp = 0; for (int i = left; i < (right + ...原创 2020-09-12 22:08:21 · 1427 阅读 · 0 评论 -
【数据结构】-线性表-【2011真题】寻找两个等长升序序列的中位数
思路:比较两个序列的中位数若相等,直接返回该值不相等,截取中位数有可能存在的两段合成一个新的序列,一直到每个子序列的长度为1s:起点,d:终点,m:中点,截取的规则如下:为偶数时,为了保证截取掉的序列一样长,有两种截取方式,两种都能保证剩余的两个序列一样长可是,为什么第一种可以,第二种不行呢?,看下面这种情况:如果是第二种截取方式,循环就出不来了,序列保留在长度为为2 的情况,永远无法向下继续typedef struct { int *data; i...原创 2020-06-10 19:43:06 · 1072 阅读 · 4 评论 -
【数据结构】-单链表-【2012真题】-查找共同后缀的起始位置
https://blog.csdn.net/qq_39328436/article/details/106715561与之前做的一个练习题,去单链表的公共节点大同小异。练习题时还写得更加简洁一点。2012年真题思路:分别求得两个链表的长度,长链表长度为longer,短链表长度为shorter,设置两个遍历指针,long和short,长链表从第longer-shorter+1个位置开始,锻炼表从第一个位置开始,同时遍历,当两个指向同一个节点的时候就是目标节点。时间复杂度:主要消耗在求两个单链表原创 2020-07-26 20:33:57 · 1207 阅读 · 2 评论 -
【数据结构】-线性表-【2013真题】找出数组的主元
值得注意的是,这个题目就算写出来是n2的时间复杂度,最后给的分数也只扣了一分,所以花大量时间来思考时间复杂度最高的算法是得不偿失的,应该在短时间内精进自己第一时间想到的那个算法。 //思路: //由于ai的取值只可能是0-n-1中中间的整数,因此可以创建一个大小为n的整数数组showtime来记录ai出现的次数 //shotime[j]>n/2说明j就是主元,若找不到这样的j则返回-1. //时间复杂度n;空间复杂度:n答案: //出现的次数大于所有元素...原创 2020-07-27 21:45:51 · 790 阅读 · 0 评论 -
【数据结构】-树-【2014真题】-求二叉树叶节点的带权路径长度之和
带权路径长度有一个求法是:wpl=非叶子结点的权值之和,因此可以选择一个遍历算法,求出所有非叶子结点的权值之和即可。但是这个方法是针对huffman树的,如果不是huffman树,必须按照叶子结点的深度与权值之积总和来求解。https://blog.csdn.net/qq_39328436/article/details/107866297...原创 2020-08-17 22:04:02 · 1315 阅读 · 2 评论 -
【数据结构】-单链表-【2015真题】删除绝对值第二次出现的节点
1.算法思路:创建一个大小为n的数组showtime,标记绝对值出现的次数,并且初试化为0;遍历指针p,以及p的前驱指针pre。遍历单链表,求链表节点绝对值x,以x为下标查找showtime中的值,若showtime[x]=0,则修改showtime[x]为1,并继续遍历若showtime[x]=1时要删除p指针指向的节点。2.单链表节点的数据类型定义:typedef struct LNode{int data;struct LNode* next;}LNode,*LinkList;3原创 2020-07-25 14:41:45 · 415 阅读 · 0 评论 -
【数据结构】-排序-【2016真题】-划分满足要求的两个子集
1.思路: //划分规则:元素个数尽可能相同,元素值和尽可能相差大,整数集合中不会有相同元素,因此可以按照下面的思路划分 //第一步,将数组A中的所有元素从小到大排序; //第二步,如果是偶数个元素,则前n/2个划分在A1,后n/2个划分在A2;如果是奇数个元素,前n/2向下取整个在A1,后n/2向下取整+1个在A2 //第一种情况元素个数相差0,第二种情况元素个数相差1。2.要使排序效率尽可能高,肯定是快速排序,笔者之前详细写过快速排序的过程,但是答案用的是非递归的快速...原创 2020-07-28 21:53:52 · 695 阅读 · 0 评论 -
【数据结构】-树-【2017真题】表达式树转中缀表达式
1.思路:按照中序遍历输出整棵树,并在适当的位置加上括号即可,关键在于如何加括号,第一次做题的时候没有想出来怎么加括号。加括号的方法:观察表达式的结构可以知道,根节点将表达式分成左右两个部分,因此根节点不可能包含在任何一个括号内,并且只要不是叶子结点就说明有“子表达式”存在。除了叶子结点和根节点之外,在其他节点的左子树遍历之前加上左括号,在右子树遍历之后加上右括号。因此算法就是对普通的中序遍历进行改进,改进过程关键是如何识别根节点和叶子结点。参考答案给出识别根节点的办法是对每一个结点求深度...原创 2020-08-02 21:41:49 · 1110 阅读 · 0 评论 -
【数据结构】-线性表-【2018真题】找出未出现的最小正整数
原本我的思路:创建一个大数组show,表示整数数组是否出现的标记。遍历整数数组,把以该整数为下标的show中的值改为1(如果是负数统一修改0位置上的标记)遍历show,第一个不为1的位置就是答案,时间复杂度为o(n),空间复杂度由整数数组的最大值决定。虽然把握住了“空间换时间”的精髓,但是未免也要得太多了,发生错误的关键在于,没有把握结果只可能是1-n+1中的一个正整数。int find_min(vector<int> A) { vector<int> B(A..原创 2020-07-24 17:43:53 · 1002 阅读 · 0 评论 -
【数据结构】-单链表-【2019真题】按要求重新排列单链表
思路:p指针指向第一个结点,q为p的后继节点,r指针指向未处理的最后一个结点,每一轮都将p的后继指针指向r,r的后继指针指向q, 随后将p,q向后移动一个结点,并重新将r定位到未处理的最后一个结点。LinkList reSort(LinkList L) { LNode*p = L->next; LNode *q = p->next; LNode *r = L->next; LNode *new_r = NULL; while (r->next) r = ...原创 2020-08-04 22:43:01 · 753 阅读 · 0 评论