- 博客(44)
- 问答 (6)
- 收藏
- 关注
原创 (贪心法)
*贪心法的概念:(记忆)贪心法是一种多步求解的方法每步按照局部优化的策略选择解(元组)的一个分量算法以第n步结束时构造出的解(元组)作为问题的解这种局部优化的策略又称为“贪心标准”注意:优化策略一般要选简单的不回溯,一旦一个分量选定,不可尝试其他可能贪心法常用于求解优化问题:应用:(1)货箱装船问题(2)背包问题(3)拓扑排序问题(4)哈弗曼编码问题(5)最短路径问题(6)最小代价生成树(7)偶图覆盖问题优化问题可描述如下:问题的解:元组形式约束条件目标函数优化解
2023-03-17 16:07:05 566
原创 渐进分析(Ο,Ω,Θ)
渐进分析(Ο,Ω,Θ):f(n)=O(g(n)) iff存在常数c和n0,使得对所有n>n0,有f(n)<cg(n)成立lim^n->∞^|f(n)/g(n)|=c,0<=c<∞,则f(n)=O(g(n))f(n)=Ω(g(n)) iff存在常数c和n0,使得对所有n>n0,有f(n)>cg(n)成立lim^n->∞^|f(n)/g(n)|=c,0<c<=∞,则f(n)=Ω(g(n))例:f(n)=0.001n2-10n-100
2023-03-17 16:03:21 1154
原创 空间复杂度
递归栈空间:首先,函数本身也是在内存中占空间的,主要用于存储传递的参数,以及调用代码的返回地址。函数的调用,会在内存的栈空间中开辟新空间,来存放子函数。递归函数更是会不断占用栈空间,例如该阶乘函数,展开到最后n=1时,内存中会存在factorial(100), factorial(99), factorial(98) … factorial(1)这些函数,它们从栈底向栈顶方向不断扩展。当递归过深时,栈空间会被耗尽,这时就无法开辟新的函数,会报出stack overflow这样的错误。所以,在考虑空间
2023-03-17 16:03:04 194
原创 回溯法求解0/1背包问题的算法
这个代码含有检查的代码片段#include <stdio.h>#include <stdlib.h>int n,c,p[20],w[20],x[20],bestp=-1,cw[21],cp[21],isdown=1;//分别是背包容量,物品重量,价值,装入背包与否。当前最优效益值,目前装入背包的物品总重量,目前装入背包的物品总效益值。double bound[21];//当前节点的上界double p1[20],w1[20];void sort (int n,int p
2023-03-17 16:00:03 479
原创 回溯法展开状态空间树
解空间:假设问题的解能用n元组(X1,……,Xn)表示,其中Xi取自某个有穷集Si,这些n元组构成的集合称为问题的解空间。假设集合Si的大小|Si|=mi,则解空间的大小m=m1* m2……* mn。注意这里解空间的大小取决于元组中每个元素的可能取值的数量,从而取决于元组是如何定义的。例如:8皇后问题(在8×8的棋盘上放置8个皇后, 使得这8个皇后不在同一行、同一列及同一斜角线上. )定义元组时,若只将8个皇后不在同一行纳入定义中,则约束条件就是8个皇后不在同一列且不在同一斜角线上。这时每个皇后占一行
2023-03-17 15:57:14 3268
原创 安装python包时超时失败ReadTimeoutError:HTTPSConnectionPool(host=‘files.pythonhosted.org’,port=443)
问题描述提示:这里描述项目中遇到的问题:安装python包时超时失败ReadTimeoutError:HTTPSConnectionPool(host=‘files.pythonhosted.org’,port=443)原因分析:之前的安装方式为pip install flake8==3.8.2解决方案:使用国内的镜像源安装。在原来的安装命令中加一个参数-i,然后在i后面加国内镜像地址。比如:清华源:https://pypi.tuna.tsinghua.edu.cn/simpl
2023-03-17 15:56:06 265
原创 如何解决pycharm中import requests时显示“No module named requests”
1.Windows+R键输入cmd打开终端,pip install requests即可安装好requests包2.但是我并没有这么顺利,安装好之后还是在pycharm中报这个错,于是网上搜资料说是电脑上有多个版本的python,于是打开控制面板——程序——程序和功能,将所有的python删掉,在官网上重新下载了3.8.6版本;Windows+R键输入cmd到开中端,输入python,显示如下,说明python安装成功并且环境变量配置成功。接下来输入pip list查看是否有requests这个包,显示
2023-03-17 15:52:31 7617
原创 实模式与保护模式的地址变换
实模式下的地址变换(逻辑地址、物理地址)一、实模式下的地址变换16位系统中,数据总线为16位,地址总线为20位,可寻址1M地址空间。由于寄存器只有16位,而地址总线是20位,如果只使用一个寄存器存放地址,则寻址范围小于1M。为了充分利用地址空间,采用:段基址+段偏移 的方式,对20位的地址空间进行寻址。(下一指令)物理地址=16×CS+IP,其中CS存放段基址,IP存放段偏移,便恰好可以对20位地址空间进行寻址(对堆栈的访问则是SS:SP对数据段的访问是DS:DI或DS:BX)。以上就是分段机制,(段基址
2021-01-01 18:18:01 438
原创 如何避免“定义为int型变量,却输入了字符,倒致陷入无限死循环”问题?
例子如下:本来是让用户输入整数,怎样防止用户不小心输入字符导致的程序错误?例如下面的代码,输入字符’a’就会出现死循环,怎样解决?#include <stdio.h>int main() {int a = 0; // 素数的个数int num = -1; // 输入的整数while (num > 32767 || num <= 0){printf("请输入大于0且小于等于32767的整数n:");scanf("%d", &num);if (num >
2020-12-02 21:02:31 3337 1
原创 交互式系统中的调度
1.轮转调度每个进程被分配一个时间段,称为时间片(quantum),即允许该进程在该时间段中运行。如果在时间片结束时该进程还在运行,则将剥夺CPU并分配给另一个进程。如果该进程在时间片结束前阻塞或结束,则CPU立即进行切换。时间片轮转调度很容易实现,调度程序所要做的就是维护一张可运行进程列表,如图2-4la所示。当一个进程用完它的时间片后,就被移到队列的末尾,如图2-41b所示。2.优先级调度轮转调度做了一个隐含的假设,即所有的进程同等重要,而优先级调度中要求每个进程被赋予一个优先级,允许优先级最
2020-11-26 16:05:38 504
原创 死锁预防
死锁预防1、破坏互斥条件(spool everything)2、破坏不可抢占条件(take resources away)3、破坏请求和保持条件(request all resources initially)4、破坏循环等待条件(order resources numerically)破坏互斥条件互斥条件:只有对必须互斥使用的资源的争抢才会导致死锁。如果把只能互斥使用的资源改造为允许共享使用,则系统不会进入死锁状态。比如:SPOOLing技术。操作系统可以采用SPOOLing技术把独占设备
2020-11-26 11:19:53 289
原创 死锁避免中的安全状态和不安全状态
在图6-9a中有一个A拥有3个资源实例但最终可能会需要9个资源实例的状态。B当前拥有2个资源实例,将来共需要4个资源实例。同样,C拥有2个资源实例,还需要另外5个资源实例。总共有10个资源实例,其中有7个资源已经分配,还有3个资源是空闲的。图 6-9a图6-9a的状态是安全的,这是由于存在一个分配序列使得所有的进程都能完成。也就是说,这个方案可以单独地运行B,直到它请求并获得另外两个资源实例,从而到达图6-9b的状态。当B完成后,就到达了图6-9c的状态。然后调度程序可以运行C,再到达图6-9d的状
2020-11-26 10:42:15 4333 1
原创 操作系统存储管理习题
1.主存与辅存间频繁的页面置换现象被称为:系统抖动2.把进程地址空间中使用的逻辑地址变成内存中物理地址的过程称为:重定位3.在可变分区存储管理中,最佳适应分配算法要求对空闲区表项按尺寸从小到大进行排列(最优适应分配算法可把空闲区按长度以递增顺序登记在空闲区表中。分配时顺序查找空闲区表,由于查找时每次总是从分区中的最小的一个区开始,所以,当找到第一个能满足作业要求的分区则一定是所有能满足作业要求的分区中的最小的一个分区。)4.设有8页的逻辑空间,每页有1024B,它们被映射到32块的物理存储区中。那么,
2020-11-25 21:17:16 2640
原创 OJ:Til the Cows Come Home(最短路径—Dijkstra算法)
题目描述Bessie is out in the field and wants to get back to the barn to get as much sleep as possible before Farmer John wakes her for the morning milking. Bessie needs her beauty sleep, so she wants to get back as quickly as possible.Farmer John’s field has
2020-11-07 20:32:51 278
原创 OJ:Bad Cowtractors(最大生成树)
题目描述Bessie has been hired to build a cheap internet network among Farmer John’s N (2 <= N <= 1,000) barns that are conveniently numbered 1…N. FJ has already done some surveying, and found M (1 <= M <= 20,000) possible connection routes between
2020-11-07 20:27:00 246
原创 OJ: Agri-Net(最小生成树)
题目描述Farmer John has been elected mayor of his town! One of his campaign promises was to bring internet connectivity to all farms in the area. He needs your help, of course.Farmer John ordered a high speed connection for his farm and is going to share his
2020-11-07 20:24:16 308
原创 OJ:确定比赛名次(拓扑排序)
题目描述有N个比赛队(1<=N<=500),编号依次为1,2,3,。。。。,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委员会不能直接获得每个队的比赛成绩,只知道每场比赛的结果,即P1赢P2,用P1,P2表示,排名时P1在P2之前。现在请你编程序确定排名。输入输入有若干组,每组中的第一行为二个数N(1<=N<=500),M;其中N表示队伍的个数,M表示接着有M行的输入数据。接下来的M行数据中,每行也有两个整数P1,P2表示即P1队赢了P2队。
2020-11-07 20:21:24 841
原创 OJ:六度分离(邻接矩阵)
题目描述1967年,美国著名的社会学家斯坦利·米尔格兰姆提出了一个名为“小世界现象(small world phenomenon)”的著名假说,大意是说,任何2个素不相识的人中间最多只隔着6个人,即只用6个人就可以将他们联系在一起,因此他的理论也被称为“六度分离”理论(six degrees of separation)。虽然米尔格兰姆的理论屡屡应验,一直也有很多社会学家对其兴趣浓厚,但是在30多年的时间里,它从来就没有得到过严谨的证明,只是一种带有传奇色彩的假说而已。Lele对这个理论相当有兴趣,于是
2020-11-07 20:14:37 400 1
转载 OJ:路障c++
题目描述B君站在一个n×n的棋盘上。最开始,B君站在(1,1)这个点,他要走到(n,n)这个点。 B君每秒可以向上下左右的某个方向移动一格,但是很不妙,C君打算阻止B君的计划。每秒结束的时刻,C君会在(x,y)上摆一个路障。B君不能走在路障上。B君拿到了C君准备在哪些点放置路障。所以现在你需要判断,B君能否成功走到(n,n)。保证数据足够弱:也就是说,无需考虑“走到某处然后被一个路障砸死”的情况,因为答案不会出现此类情况。输入首先是一个正整数T,表示数据组数。对于每一组数据:第一行,一个正整
2020-10-31 15:49:51 770
转载 OJ:海战在一个方形的盘上放置了固定数量和形状的船只,每只船却不能碰到其它的船。在这个题中,我们仅考虑船是方形的,所有的船只都是由图形组成的方形。编写程序求出该棋盘上放置的船只的总数。
题目描述在峰会期间,武装部队得处于高度戒备。警察将监视每一条大街,军队将保卫建筑物,领空将布满了F-2003飞机。此外,巡洋船只和舰队将被派去保护海岸线。不幸的是因为种种原因,国防海军部仅有很少的几位军官能指挥大型海战。因此,他们考虑培养一些新的海军指挥官,他们选择了“海战”游戏来帮助学习。在这个著名的游戏中,在一个方形的盘上放置了固定数量和形状的船只,每只船却不能碰到其它的船。在这个题中,我们仅考虑船是方形的,所有的船只都是由图形组成的方形。编写程序求出该棋盘上放置的船只的总数。输入输入文件头一行
2020-10-31 15:29:27 875
转载 OJ:奇怪的电梯
题目描述有一天我做了一个梦,梦见了一种很奇怪的电梯。大楼的每一层楼都可以停电梯,而且第i层楼(1≤i≤N)上有一个数字Ki(0≤Ki≤N)。电梯只有四个按钮:开,关,上,下。上下的层数等于当前楼层上的那个数字。当然,如果不能满足要求,相应的按钮就会失灵。例如:3,3,1,2,5代表了Ki(K1=3,K2=3,…),从1楼开始。在1楼,按“上”可以到4楼,按“下”是不起作用的,因为没有−2楼。那么,从A楼到B楼至少要按几次按钮呢?输入共二行。第一行为3个用空格隔开的正整数,表示N,A,B(1≤N≤20
2020-10-31 15:10:40 518
转载 01迷宫:有一个仅由数字0与1组成的n×n格迷宫。若你位于一格0上,那么你可以移动到相邻4格中的某一格1上,同样若你位于一格1上,那么你可以移动到相邻4格中的某一格0上。
题目描述有一个仅由数字0与1组成的n×n格迷宫。若你位于一格0上,那么你可以移动到相邻4格中的某一格1上,同样若你位于一格1上,那么你可以移动到相邻4格中的某一格0上。 你的任务是:对于给定的迷宫,询问从某一格开始能移动到多少个格子(包含自身)。输入第1行为两个正整数n,m。 下面n行,每行n个字符,字符只可能是0或者1,字符之间没有空格。接下来m行,每行2个用空格分隔的正整数i,j,对应了迷宫中第i行第j列的一个格子,询问从这一格开始能移动到多少格。输出m行,对于每个询问输出相应答案。样例输
2020-10-31 14:28:33 3527 5
转载 求细胞数量:一矩形阵列由数字 0 到 9 组成,数字 1 到 9 代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。
题目描述一矩形阵列由数字 0 到 9 组成,数字 1 到 9 代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。输入第一行两个整数代表矩阵大小 n 和 m。 接下来 n 行,每行一个长度为 m 的只含字符 0 到 9 的字符串,代表这个n×m 的矩阵。输出一行一个整数代表细胞个数。样例输入 Copy4 100234500067103456050020456006710000000089样例输出 Copy4提示0 < m, n &
2020-10-31 14:20:39 7636
转载 马的遍历:有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步
题目描述有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步输入一行四个数据,棋盘的大小和马的坐标输出一个n*m的矩阵,同一行元素之间用空格分离。代表马到达某个点最少要走几步。不能到达则输出-1。样例输入3 3 1 1样例输出0 3 23 -1 12 1 4思路:利用广度优先搜索(BFS)#include<iostream>#include<queue>#include<cstr
2020-10-31 14:09:59 5916 5
原创 士兵队列训练问题:某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进行一至三报数,凡报到三的
题目描述:某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进行一至三报数,凡报到三的出列,剩下的向小序号方向靠拢,继续从头开始进行一至二报数。。。,以后从头开始轮流进行一至二报数、一至三报数直到剩下的人数不超过三人为止。输入:本题有多个测试数据组,第一行为组数N,接着为N行新兵人数,新兵人数不超过5000。输出:共有N行,分别对应输入的新兵人数,每行输出剩下的新兵最初的编号,编号之间有一个空
2020-10-25 10:46:50 5126 1
原创 OJ用C++解决问题Rails
题目描述There is a famous railway station in PopPush City. Country there is incredibly hilly. The station was built in last century. Unfortunately, funds were extremely limited that time. It was possible to establish only a surface track. Moreover, it turned
2020-10-24 08:04:21 576
原创 OJ C++利用栈实现四则运算
题目描述输入一行字符串,是包含±*/合法运算的一行字符串,要求解析字符串的值。输入第一行包括一行整数T,表示样例个数。对于每一个样例,输入一行字符串代表合法运算。输出对于每一个样例,输出一个数字表示结果。结果误差要求小于1e-4。样例输入23/4+22+3*4样例输出2.7514思路:用两个栈分别存放浮点型数字和字符型“+、-、*、/”运算符,由于两者数据类型不同,我定义了两种类型的栈,代码量较大,实际上应该可以用模板template实现两个栈共用一个栈模板,从而简化代码。
2020-10-23 16:56:30 1477 1
原创 TJU OJ c++愚人节的礼物
题目描述四月一日快到了,Vayko想了个愚人的好办法——送礼物。嘿嘿,不要想的太好,这礼物可没那么简单,Vayko为了愚人,准备了一堆盒子,其中有一个盒子里面装了礼物。盒子里面可以再放零个或者多个盒子。假设放礼物的盒子里不再放其他盒子。用()表示一个盒子,B表示礼物,Vayko想让你帮她算出愚人指数,即最少需要拆多少个盒子才能拿到礼物。输入本题目包含多组测试,请处理到文件结束。每组测试包含一个长度不大于1000,只包含’(’,’)'和’B’三种字符的字符串,代表Vayko设计的礼物透视图。你可以
2020-10-23 08:47:34 610
原创 合并链表
题目描述:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。输入第一行输入一个数字T表示样例个数。对于每个样例,第一行输入两个数字m, n,分别表示两个链表的长度第二行输入m个数字,表示第一个链表第三行输入n个数字,表示第二个链表输出对于每一组样例,输出 m + n个数表示合并结果。样例输入22 21 23 43 23 4 51 4样例输出1 2 3 41 3 4 4 5提示m + n <= 1000#include <io
2020-10-17 12:59:39 2326
原创 珠心算测验
珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术。珠心算训练,既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得到普及。某学校的珠心算老师采用一种快速考察珠心算加法能力的测验方法。他随机生成一个正整数集合,集合中的数各不相同,然后要求学生回答:其中有多少个数,恰好等于集合中另外两个(不同的)数之和?最近老师出了一些测验题,请你帮忙求出答案。输入共两行,第一行包含一个整数nn,表示测试题中给出的正整数个数。 第二行有nn个正整数,每两个正整数之间用一个空格隔开,表示测试题中给
2020-10-16 17:25:50 699 1
原创 三角形个数:小b有一个仅包含非负整数的数组a,她想知道有多少个三元组(i,j,k),满足i<j<k且a[i],a[j],a[k]可能作为某个三角形的三条边的边长。
小b有一个仅包含非负整数的数组a,她想知道有多少个三元组(i,j,k),满足i<j<k且a[i],a[j],a[k]可能作为某个三角形的三条边的边长。输入:第一行输入一个正整数n,表示数组a中元素个数;第二行n个非负整数,表示a中元素,以空格隔开;其中0<n≤1000,a中任意元素a[i]满足0≤a[i]≤1000。输出:输出一个数,表示满足题意的三元组个数样例输入 Copy42 2 3 4样例输出 Copy3法一:会超时,采用三重for循环,最容易想到,但运行时间过长,
2020-10-15 23:49:11 2202 2
原创 双向链表的建立、插入、查找和删除
双向链表的建立、插入、查找和删除#include <stdio.h>#include <stdlib.h>typedef int ListData;typedef struct dnode{ ListData data; struct dnode *llink,*rlink;}DblNode;typedef DblNode* DblList;DblList CreatList(DblList &first)//创建双向链表{ fi
2020-07-02 17:32:15 1548
原创 将一个链表倒置,例如:链表中的内容为abcdefghijk,倒置后为kjihgfedcba
注:这里仅给出将不带头结点的单链表的倒置#include <stdio.h>#include <stdlib.h>typedef char ListData;typedef struct node{ ListData data; struct node *link;}ListNode;typedef ListNode* LinkList;LinkList CreatListF()//头插法创建无头结点的单链表{ ListData ch;
2020-06-30 18:21:30 331
原创 创建链表(头插法、尾插法),向链表中插入元素,删除链表中的某个元素,查找链表中的元素(按值找、按序号找),输出链表中的元素
注:这里仅给出带头结点的单链表相关操作算法#include <stdio.h>#include <stdlib.h>typedef char ListData;typedef struct node//链表节点{ ListData data; struct node *link;}ListNode;typedef ListNode* LinkList;LinkList first;//链表头指针LinkList CreatListF()//头插
2020-06-30 08:19:23 963
原创 创建一个顺序表, 向顺序表中插入元素,查找顺序表中的元素(按值查找和按序号查找),删除顺序表中的某个元素,输出顺序表中的元素
创建一个顺序表, 向顺序表中插入元素,查找顺序表中的元素(按值查找和按序号查找),删除顺序表中的某个元素,输出顺序表中的元素算法:#include <stdio.h>#include <stdlib.h>#define ListSize 100typedef int ListData;typedef struct{ ListData *data; int length;}SeqList;void InitList(SeqList &L)//
2020-06-26 11:42:33 7025 6
原创 快速排序算法,并输出每一轮后数据位置的交换
快速排序算法#include <stdio.h>#include <stdlib.h>#define MAXSIZE 20//顺序表长度typedef int KeyType;typedef struct{ KeyType Key;}RcdType;typedef struct{ RcdType r[MAXSIZE+1]; int length;}SqList;void swap(RcdType &r1,RcdType &
2020-06-06 19:22:32 5637 2
原创 c++折半插入排序算法
折半插入排序算法#include <stdio.h>#include <stdlib.h>#define MAXSIZE 20//顺序表长度typedef int KeyType;typedef struct{ KeyType Key;}RcdType;typedef struct{ RcdType r[MAXSIZE+1]; int length;}SqList;void InitList(SqList &L){ in
2020-06-06 19:18:07 614
原创 c++直接插入排序算法
直接插入排序算法#include <stdio.h>#include <stdlib.h>#define MAXSIZE 20//顺序表长度typedef int KeyType;typedef struct{ KeyType Key;}RcdType;typedef struct{ RcdType r[MAXSIZE+1]; int length;}SqList;void InitList(SqList &L){ in
2020-06-06 19:11:19 534 1
空空如也
求linux反汇编代码的解释
2020-06-01
用Ubuntu打开vscode卡顿怎么办?
2020-05-28
TA创建的收藏夹 TA关注的收藏夹
TA关注的人