CSP选择题与一些杂项——数据结构、算法
CSP选择题
Vegdie
oier
展开
-
排序算法,最全的10大排序算法详解(Sort Algorithm)
文章目录排序算法,最全的10大排序算法详解(Sort Algorithm)排序算法分类排序算法稳定性时间复杂度(time complexity)1#时间复杂度的意义2#基本操作执行次数如何推导出时间复杂度呢?有如下几个原则:3#让我们回头看看刚才的四个场景。对数(log、logarithm)对数数轴与天文数字1# 基数排序(radix sort)2# 冒泡排序(Bubble Sort)3# 希尔排序(shellSort)4# 快速排序(quickSort)5# 堆排序(heapSort)6# 归并排序(me原创 2021-08-16 15:03:14 · 793 阅读 · 0 评论 -
欧几里得算法——线性同余
#include<cstdio>typedef long long ll;void exgcd(ll a, ll b, ll &x, ll &y){ if(b == 0) x = 1, y = 0; else { exgcd(b, a%b, y, x); y -= (a/b)*x; }}int main(){ ll a, b, ans, tmp; scanf("%lld%lld", &a, &b); exgcd(a, b, ans原创 2021-07-20 16:05:33 · 219 阅读 · 0 评论 -
快速幂算法笔记
快速幂是一个logn时间复杂度的算法,其目的是计算an。在此基础上可以加入快速幂模,以便于存储数字。让我们先来思考一个问题:7的10次方,怎样算比较快?方法1:最朴素的想法,7*7=49,49*7=343,… 一步一步算,共进行了9次乘法,也就是O(n)的复杂度。这样算无疑太慢了。这时我们想到,也许可以拆分问题。方法2:先算75,即7*7*7*7*7,再算它的平方,共进行了5次乘法。但这并不是最优解,因为对于“7的5次方”,我们仍然可以拆分问题。方法3:先算7*7得49,则7的5次方为49*49原创 2021-07-20 14:47:30 · 308 阅读 · 0 评论 -
动态规划:0-1背包 与 完全背包问题摘编
动态规划我推荐在这里学习,https://oi-wiki.org/dp/0-1背包首先我们看一道题在上述例题中,由于每个物体只有两种可能的状态(取与不取),对应二进制中的 和 ,这类问题便被称为「0-1 背包问题」。一直条件有第iii个物品的重量wiw_iwi,价值ViV_iVi,以及背包的总容量W我们用二维数组存储每一种情况。设dp状态fi,jf_{i,j}fi,j为只能放前i 个物品的情况下,容量为j 的背包所能达到的最大总价值。考虑状态转移方程。假设当前已经陈富华里后了前i-1原创 2021-07-18 22:27:16 · 237 阅读 · 0 评论 -
动态规划的最优原理与无后效性解析
什么样的“多阶段决策问题”才可以采用动态规划的方法求解一般来说,能够采用动态规划方法求解的问题,必须满足最优化原理和无后效性原则:1、动态规划的最优化原理。作为整个过程的最优策略具有:无论过去的状态和决策如何,对前面的决策所形成的状态而言,余下的诸决策必须构成最优策略的性质。也可以通俗地理解为子问题的局部最优将导致整个问题的全局最优,即问题具有最优子结构的性质,也就是说一个问题的最优解只取决于其子问题的最优解,而非最优解对问题的求解没有影响。在最短路径问题中,A到E的最优路径上的任一点到终点E的路径,原创 2021-07-18 08:46:26 · 5610 阅读 · 1 评论 -
三分查找--
我们都知道 二分查找 适用于单调函数中逼近求解某点的值。如果遇到凸性或凹形函数时(非单调),可以用三分查找求那个凸点或凹点。下面的方法应该是三分查找的一个变形。如图所示,已知左右端点L、R,要求找到白点的位置。思路:通过不断缩小 [L,R] 的范围,无限逼近白点。做法:先取 [L,R] 的中点 mid,再取 [mid,R] 的中点 mmid,通过比较 f(mid) 与 f(mmid) 的大小来缩小范围。 当最后 L=R-1 时,再比较下这两个点的值,我们就找到了答案。1、当 f原创 2021-06-19 16:34:46 · 262 阅读 · 0 评论 -
获取一个数字的所有约数并存储进数组的算法,Getdivisor,O(sqrt(n))
Getdivisor();O(n)O(\sqrt{n})O(n)It’s very similar to, or even the same code as, the algorithm for determining prime numbersvoid getDivisor(){ len = 0; for (int i = 1; i * i <= n; i++) // or sqrt(n), but should add "cmath" or "maht.h" { if (n %原创 2021-05-24 22:50:24 · 4067 阅读 · 0 评论 -
同时找最大最小值⌈3N/2⌉−2算法
同时找最大最小值题目定义:给定一个大小为n的数组,无序,找到其中的最大值和最小值,要求元素间的比较次数尽可能少。以下摘自《算法导论》:事实上,我们只需要最多3⌊n/2⌋次比较就可以同时找到最小值和最大值。具体的方法是记录已知的最大值和最小值,然后对输入元素成对地进行处理。首先,我们将一对输入元素相互进行比较,然后把较小的与当前最小值进行比较,把较大的与当前最大值进行比较。这样,对每两个元素共需3次比较。如何设定已知的最小值和最大值的初始值依赖于n是奇数还是偶数。如果n是奇数,我们就将最小值和最原创 2021-05-24 22:36:47 · 6876 阅读 · 1 评论 -
最小生成树略——Prim
Prim算法采用与Dijkstra、Bellman-Ford算法一样的“蓝白点”思想:白点代表已经进入最小生成树的点,蓝点代表未进入最小生成树的点。算法描述:以1为起点生成最小生成树,min[v]表示蓝点v与白点相连的最小边权。MST表示最小生成树的权值之和。a)初始化:min[v]= ∞(v≠1); min[1]=0;MST=0;b)for (i = 1; i<= n; i++)1.寻找min[u]最小的蓝点u。2.将u标记为白点3.MST+=min[u]4.for 与白点u相连的原创 2021-05-16 17:30:01 · 2967 阅读 · 0 评论 -
数据结构之图笔记:图论基础术语以及基础知识略
基本概念:一、顶点(vertex)上图中黑色的带数字的点就是顶点,表示某个事物或对象。由于图的术语没有标准化,因此,称顶点为点、节点、结点、端点等都是可以的。叫什么无所谓,理解是什么才是关键。二、边(edge)上图中顶点之间蓝色的线条就是边,表示事物与事物之间的关系。需要注意的是边表示的是顶点之间的逻辑关系,粗细长短都无所谓的。包括上面的顶点也一样,表示逻辑事物或对象,画的时候大小形状都无所谓。三、路径/最短路径(path/shortest path)在图上任取两顶点,分别作为起点(start原创 2021-05-07 22:35:57 · 6959 阅读 · 3 评论 -
关闭cin、cout同步——ios::sync_with_stdio(false)
关闭cin、cout同步之后,cin、cout的速度几乎和scanf、printf一样。否则scanf、printf明显快一点**ios::sync_with_stdio(false)**;原创 2021-05-07 17:14:49 · 1105 阅读 · 0 评论 -
二叉树笔记:二叉树建立、输出(使用括号)、三种遍历、层序遍历等小功能代码记录
数据结构与算法学习网站:http://data.biancheng.net/其实二叉树并不适合用数组存储,因为并不是每个二叉树都是完全二叉树,普通二叉树使用顺序表存储或多或多会存在空间浪费的现象。最让我感觉难的地方并不是这些函数的递归,而是建立链式存储结构时的指针,老是让人摸不着头脑,还是地址没学好????。结构体——链式存储:typedef struct BiTNode{ TElemType data;//数据域 struct BiTNode *lchild,*rchild;//左右原创 2021-05-07 17:00:49 · 1514 阅读 · 0 评论 -
NOIP-J-2016完善程序第一题
我的填空和标准答案不一样,但是我觉得考官肯定会通过的,因为答案是对的:#include <iostream>using namespace std;int readint(){ int num = 0; // 存储读取到的整数 int negative = 0; // 负数标识 char c; // 存储当前读取到的字符 c = cin.get(); while ((c < '0' || c > '9') &&a原创 2021-05-04 20:55:49 · 233 阅读 · 0 评论 -
满二叉树国内与国外的差异
(2)满二叉树国际标准定义是除了叶结点外每一个结点都有左右子结点的二叉树。如下图所示:注意:这里的定义与国内某些教材的定义不同,国内的定义是:除了叶结点外每一个结点都有左右子叶且叶子结点都处在最底层的二叉树。很显然,按照这个定义,上面的图示二叉树就不是满二叉树。参考:https://cloud.tencent.com/developer/article/1176915...原创 2021-05-04 16:46:56 · 641 阅读 · 0 评论 -
关于 NOIP-J2015阅读程序写结果第四题 指针以及地址的略微研究
题目:NOIP-J2015阅读程序写结果第四题,https://ti.luogu.com.cn/problemset/1017#include <iostream>#include <string>#include <cstdio>using namespace std;void fun(char *a, char *b){ a = b; (*a)++;}int main(){ char c1, c2, *p1, *p2;原创 2021-05-03 22:36:48 · 333 阅读 · 0 评论 -
斐波那契数列类似题目递归以及记忆化优化
当然,斐波那契数列可以使用递推,这谁都会。a[1]=1;a[2]=1;for (int i = 3; i <= m; i++) a[i] = a[i - 1] + a[i - 2];框架是这样的,这个算法不考虑数字的存储范围。时间复杂度是O(n)的。但是,如果让你用递归……当然只是为了训练递归算法。用递归的时间复杂度并不快。int fb(int n){ if (n == 1) return 1; if (n == 2) return 1; return fb(n - 1原创 2021-05-03 11:32:45 · 330 阅读 · 0 评论 -
以下关于二分查找算法的描述中,不正确的是(A)
17.【 STEMA】以下关于二分查找算法的描述中,不正确的是(A)A二分查找算法的最大查找时间与查找对象的大小成正比B二分查找一般从数组的中间元素开始C二分查找只对有序数组有效D二分查找可以使用递归实现...原创 2021-03-27 20:29:13 · 2058 阅读 · 0 评论 -
关于存储格式的一道选择题,Mb与MB与GB
电脑显示下载速度为 8Mb/s时,下载一段1GB大小的视频大约需要( D )。A. 128sB. 256sC. 512sD.1024s这道题怎么这么简单?直接1024/8!当然,你这样会发现除不尽!为什么?这就在于Mb和MBMb的b是bit!而MB的B是Byte!1Byte=8bit1KB = 8Kb = 1024Byte = 8000 bit !!!!(背背背)1MB = 8Mb = 1024^2Byte = 1024KB1GB = 8Gb ...原创 2021-03-20 21:47:43 · 384 阅读 · 0 评论 -
【 NOIP 2007 pj】第 22 题 题目二 :(最短路线)某城市的街道是一个很规整的矩形网络(见下图),有7条南北向的纵街,5条东西向的横街。现要从西南角的A走到东北角的B……
第 22 题(最短路线)某城市的街道是一个很规整的矩形网络(见下图),有7条南北向的纵街,5条东西向的横街。现要从西南角的A走到东北角的B,最短的走法共有多少种?___________正确答案:210本题共 5 分解析:可以发现从西南到东北角最短要走10条短线,而且其中必有4条为竖线,从10条短线中选出4条作为路线中的竖线,也就确定了整条线路,所以一共有C(410)=210C{4 \choose 10} = 210C(104)=210种路线(从10条线中选出6条横线一样)...原创 2021-02-17 21:41:26 · 2660 阅读 · 0 评论 -
【NOIP 2007 pj】选择题第 11 题:在下列关于计算机语言的说法中,正确的有( )。
第 11 题在下列关于计算机语言的说法中,正确的有( )。A. 高级语言比汇编语言更高级,是因为它的程序的运行效率更高(汇编其实更快)B. 随着Pascal、C等高级语言的出现,机器语言和汇编语言已经退出了历史舞台。(退出了?非也!)C. 高级语言比汇编语言程序更容易从一种计算机上移植到另一种计算机上D. C是一种面向对象的高级计算机语言(面向过程)正确答案: C本题共 1.5 分...原创 2021-02-17 20:39:50 · 1926 阅读 · 0 评论 -
【NOIP 2007 pj】选择题第八题:冗余数据是指可以由其它数据导出的数据……
第 8 题冗余数据是指可以由其它数据导出的数据。例如,数据库中已存放了学生的数学、语文和英语的三科成绩,如果还存放三科成绩的总分,则总分就可以看作冗余数据。冗余数据往往会造成数据的不一致。例如,上面4个数据如果都是输入的,由于操作错误使总分不等于三科成绩之和,就会产生矛盾。下面关于冗余数据的说法中,正确的是( )。A. 应该在数据库中消除一切冗余数据B. 用高级语言编写的数据处理系统,通常比用关系数据库编写的系统更容易消除冗余数据C. 为了提高查询效率,在数据库中可以保留一些冗余数据,但更新时要做原创 2021-02-16 22:57:47 · 1206 阅读 · 0 评论 -
存储例题:2048*1024的32位全彩图像……
【noip真题】现在有一张分辨率为2048*1024像素的32位真彩色图像。请问要存储这张图像,需要多大的存储空间?( )A. 4MBB. 8MBC. 32MBD. 16MB答案:B过程:2048 = 211。1024 = 2102048 * 1024 = 2(11+10) = 22132位 = 2525*221 = 226位∴这个图像是226位转换字节:226÷8=226÷23=223字节(1Byte = 8bit)转换kb:223÷1024=213KB(1KB = 1024B原创 2020-12-28 20:36:55 · 16218 阅读 · 0 评论 -
小错题:OSI的七层协议中,最底层是()
OSI的七层协议中,最底层是( C )。A. 会话层B. 数据链路层C. 物理层D. 网络层OSI七层协议从上到下依次是:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层便捷记法:物理是一切的基础,所以选择物理层...原创 2020-12-27 22:06:39 · 4669 阅读 · 0 评论 -
CSP计算机基础选择题第二次
CSP计算机基础选择题第二次参考题目:《新学奥赛一本通》第一章第三节,中央处理器CPU【NOIP1999】在微机中,通用寄存器的位数是(C.计算机字长)。【NOIP1999】不同的计算机,其指令系统也不相同,这主要取决于(C.所用的CPU)。【NOIP2001普及组】CPU处理数据的基本单位是字,一个字的字长(D.与芯片的型号有关)。【NOIP2001提高组】中央处理器CPU能访问的最大存储器容量取决于(A.地址总线)。【NOIP2001】若我们说一个微机的CPU是用的PII300,此处的30原创 2020-11-22 22:43:48 · 476 阅读 · 0 评论 -
CSP计算机基础选择题第一次
CSP计算机基础选择题第一次【NOIP2001】计算机软件保护法是用来保护软件(D.著作权)的【NOIP2002】微型计算机的问世是由于(C.超大规模集成电路)的出现。【NOIP2003】图灵(Alan Turing)是(B.英国人)。(艾伦·麦席森·图灵(Alan Mathison Turing,1912年6月23日-1954年6月7日),英国数学家。)【NOIP2003】第一个给计算机写程序的人是(B.Ada Lovelace)。【NOIP2004普及组】美籍匈牙利数原创 2020-11-22 21:22:37 · 329 阅读 · 0 评论 -
2016noip-问题求解超级详细解
noip2016普及组问题求解从一个4×4的棋盘(不可旋转)中选取不在同一行也不在同一列上的两个方格,共有( )种方法。解题:首先是如下棋盘于是我们发现这是组合问题,也就是从16个格子中选择两个格子组合,不能重复。于是出现式子:16*15/2=120,对吗?不对。还有一个问题:不在同一行也不在同一列上的两个方格。所以第一个格子占了,有16种可能,第二个格子就只有9种可能了。所以:16*9/2=72就对了,故填写72。约定二叉树的根节点高度为1。一棵结点数为2016的二叉树最少有 (原创 2020-10-04 20:41:23 · 5247 阅读 · 0 评论 -
NOIP2017年易错选择题整理,我的错题本
2017noip-错题本在8位二进制补码中,10101011表示的数是十进制下的( )。A. 43 B. -85 C. -43 D.84最初选择:A,因为只是去掉了符号位,并没有理解补码、反码、原码的概念。正确答案:B解题:由于是补码,转换为10进制的方法如下:补码-1得到反码,反码取反得到原码,经过进制转换成为10进制,加符号。10101011(补码)->10101010(反码)->01010101(原码)->-(64+16+4+1)=-85????关于补码原创 2020-10-03 20:59:27 · 4214 阅读 · 5 评论 -
2015niop选择题17题
如果根的层次为1,具有61个结点的完全二叉树的高度为( )。A.5B.6C.7D.8正确答案:B解析:一棵深度为K且有2K-1个结点的二叉树称为满二叉树。若对满二叉树的结点进行连续编号,约定编号从根结点开始,从上而下,从左至右。那么深度为K的有n个结点的二叉树,当且仅当其每一个结点都与深度为众的满二叉树中编号从1至n的结点一一对应,称为完全二叉树。完全二叉树的一个性质是具有n...原创 2020-02-16 11:37:26 · 834 阅读 · 0 评论 -
noip2015选择题
前序遍历序列与中序遍历序列相同的二叉树为______。A.根结点无左子树的二叉树B.根结点无右子树的二叉树C.只有根结点的二叉树或非叶子结点只有左子树的二叉树D.只有根结点的二叉树或非叶子结点只有右子树的二叉树正确答案:D解析:所谓前序遍历是指在访问根结点、遍历左子树和遍历右子树这三者中,首先访问根结点,然后是遍历左子树,最后是遍历右子树;并且,在遍历左、右子树时,仍需先访问根结点,然...原创 2020-02-16 10:45:47 · 372 阅读 · 0 评论 -
题解:链表所不具备的特点&&链表的内存单元地址——选择题
不多就两道题但都是经典题目1.链表所不具备的特点是( )A.可以随机访问任何一个元素B.插入、删除操作不需要移动元素C.无需事先估计存储空间大小D.所需存储空间与存储元素个数成正比答案:A解析: 链表的插入、删除操作是不需要引动元素的,只需要修改结点的指针,就可以完成这一调整;而由于在链表中新增结点时,可以再动态地申请空间,因此无须事先估计存储空间的大小;链表的每个结点所需的存储...原创 2020-02-15 20:44:45 · 5269 阅读 · 0 评论