NOIP2018提高组初赛知识点

 (传说,在神秘的初赛中,选手们经常互相爆零以示友好……)

历年真题:ti.luogu.com.cn

以下标题中打*的是我认为的重点内容

一、关于计算机

(一)计算机组成

NOIP2018提高组初赛知识点

硬件组成:

1. 控制器(Control):是整个计算机的中枢神经,其功能是对程序规定的控制信息进行解释,根据其要求进行控制,调度程序、数据、地址,协调计算机各部分工作及内存与外设的访问等。

2. 运算器(Datapath):运算器的功能是对数据进行各种算术运算和逻辑运算,即对数据进行加工处理。

3. 存储器(Memory):存储器的功能是存储程序、数据和各种信号、命令等信息,并在需要时提供这些信息。

4. 输入(Input system):输入设备是计算机的重要组成部分,输入设备与输出设备合称为外部设备,简称外设,输入设备的作用是将程序、原始数据、文字、字符、控制命令或现场采集的数据等信息输入到计算机。常见的输入设备有键盘、鼠标器、光电输入机、磁带机、磁盘机、光盘机等。

5. 输出(Output system):输出设备与输入设备同样是计算机的重要组成部分,它把外算机的中间结果或最后结果、机内的各种数据符号及文字或各种控制信号等信息输出出来。微机常用的输出设备有显示终端CRT、打印机、激光印字机、绘图仪及磁带、光盘机等。

【CPU(*处理器)=运算器+控制器+寄存器

存储器=内存储器+外存储器】

​BIOS是英文"Basic Input Output System"的缩略语,直译过来后中文名称就是"基本输入输出系统"。其实,它是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启动程序。 其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。

随机存储器RAM的“随机”指“随时访问”

断电后可以保存数据:硬盘,ROM

断电后不可以保存数据:显存(显卡内存),RAM,CPU

面向过程语言 :C

面对对象的高级语言:C++,Java

NOIP2018提高组初赛知识点

(二)计算机发展史

(这部分中部分内容参考洛谷日报第45期。感谢)

NOIP2018提高组初赛知识点

(三)计算机中各存储单位的进位关系:
1TB=1024GB,1GB=1024MB,1MB=1024KB
1KB=1024B,1B(字节)=8bit(位)

二、二进制原码、反码与补码

(这部分中部分内容参考https://blog.csdn.net/jq_ak47/article/details/45338061。感谢)

(一)原码

在计算机中(以八位机为例),我们知道都用二进制来存储数

如5,二进制为00000101

那么负数怎么存储?将最高位设为符号位,正数为0,负数为1

如-5,二进制为10000101

-6,为10000110

以上叫做原码

(二)反码

反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。

如7,原码为00000111,反码为00000111

如-10,原码为10001010,反码为11110101

(三)补码

正数的补码是其本身,负数的补码是反码加一

补码有什么用呢?解决负整数加减法

比如我们计算16-8 或是 16+(-8)

如果用原码计算

0 0 0 0 1 0 0 0

+1 0 0 0 0 1 0 0

————————

1 0 0 0 1 1 1 1

将10001111转换为二进制,结果为-24,显然不对

如果用补码呢?

0 0 0 0 1 0 0 0

+ 1 1 1 1 1 1 0 0

————————

1 0 0 0 0 0 1 0 0

*注意,此处用八位二进制,而计算结果是九位二进制,所以最高位自动省略

这样结果是-8,正确

若要将补码转化为原码,正数不变,负数先-1再取反码就可以了

三、P问题、NP问题与NPC问题

(这部分中部分内容参考http://www.matrix67.com/blog/archives/105。感谢)

我就说的简略一点了(主要是怕自己忘了),详见上面网址

(一)P问题

每个问题的算法都有时间复杂度

O(1),O(N),O(NlogN),O(n2)等n不在指数为的复杂度为多项式级复杂度

O(N!),O(2n)等复杂度是非多项式级的

可以找到一个多项式级复杂度算法的问题是P问题

NOI系列考的绝大多数问题都是P问题

注:如果一个问题不存在多项式空间的算法,那它一定不是 P 类问题(详见NOIP2012提高组初赛第20题)

(二)NP问题

一个解可以用多项式级复杂度检验的问题是NP问题

注:找不到多项式复杂度解的(非P问题)不一定是NP问题

易得NP=P。即所有P问题都是NP问题

至于P=NP,大家感兴趣的话可以自己研究研究(滑稽护体)

(三)NPC问题(NP-完全问题)

先讲一下“约化”

有两个问题,问题A和问题B

若可以用问题B的算法来解决问题A,那么问题A可以约化为问题B

比如,一元一次方程可以约化为一元二次方程

约化具有传递性,即A可以约化成B,B可以约化成C,那么A一定可以约化成C

可以看出,在不断约化的过程中,算法的时间复杂度逐渐增高,解决的问题也越来越广

大胆猜测,是否可以将所有的NP问题都约化成一个问题?解决了这个问题就能解决所有NP问题?

答案是肯定的!

而且这不仅是一个问题,还是一类问题

这类问题叫做NPC问题。

一个问题满足以下两条,它就是NPC问题:

1、它是NP问题

2、所有的NP问题都可以约化到它

NPC问题的鼻祖是逻辑电路问题,有兴趣的读者可以自行了解。

另外说一下NP-hard问题,它满足NPC问题的第二条但不满足第一条。它的范围比NPC问题广。

*四、进制转换

(一)、四、十六互转通用方法:

以八进制转二进制为例

先把关系表列出来:

八进制数

二进制数

0

000

1

001

2

010

3

011

4

100

5

101

6

110

7

111

二转八:

例如:10010011.1011

2^3=8

所以使用三位一合的方法。若整数部分位数不是三的倍数,在最高位前补0;若小数部分位数不是三的倍数,在末尾补0。接着以小数点为分界,从左到右分别转化小数部分和整数部分。

对照上面的表 10 010 011. 101 100

2   2      3 .   5     4

所以(10010011.1011)2=(223.54)8

八转二:

同理,一位三分

例如:7643

对照上面的表 7    6      4     3

111  110  100  011

注:十六进制等进制中,A代表10,B代表11,以此类推

(二) 二转十和十转二

二转十:个位*2^0,十位*2^1,百位*2^2…… 若是小数,十分位*2^-1,百分位*2^-2……然后加起来就行了

十转二:整数部分:不断除以2,直到商为0,倒取各阶段余数

小数部分:不断乘以2,直到积为1,正取各阶段整数

如10.25转化为二进制

10÷2=5……0

5÷2=2……1

2÷2=1……0

1÷2=0……1

倒着取余数,1010即为整数部分

0.25*2=0.5……0

0.5*2=1……1

正着取整数,0.01即为小数部分

将两部分合起来,得到10.25=(1010.01)2

(三)其它

其它2^n的进制如要转化为十进制,先转化为二进制,再转化为十进制。

十进制转化成它们同理。

**五、排序算法

基本是每年必考!

(这部分中部分内容参考http://blog.csdn.net/whuslei/article/details/6442755/ 和 https://blog.csdn.net/xiazdong/article/details/8462393。感谢)

九大排序算法:(加上桶排序就是十个)

NOIP2018提高组初赛知识点

计数排序            O(N+K)             O(N+K)               O(N+K)           O(n+K)          稳定             简单

排序算法稳定,指排序前后数值相同的两个数相对位置不会改变

稳定:插、归、冒、基、计

不稳定:快、堆、希、选

需要额外空间:归、基、计

不需要额外空间:插、希、冒、快、堆、选

运用分治思想的:归、快

时间复杂度是O(NlogN)的:堆、快、归(希尔排序的时间复杂度依赖于增量的选择,这里不做讨论)

最慢是O(N2)的:插、冒、快、选

最快是O(N)的:插、冒(改进后)

最快最慢相同的:冒(不改进)、选、堆、归、基,计

注意:近些年题目考的越来越“活”了,千万不要死记硬背!

example:(NOIP2017提高组)

11.设 A 和 B 是两个长为 n 的有序数组,现在需要将 A 和 B 合并成一个排好序的 数组,请问任何以元素比较作为基本运算的归并算法最坏情况下至少要做 ( )次比较。

[黑人问号.jpg]

答案:2n-1

六、时空复杂度

(一)时间复杂度

(这部分中部分内容参考https://www.luogu.org/blog/Chanis/master。感谢 )

表的第二行是一些奇怪的东西,不用管它

NOIP2018提高组初赛知识点

初赛还经常要计算代码的时间复杂度。对于递归函数的一定要细心思考

(二)空间复杂度

(这部分中部分内容参考https://blog.csdn.net/shiwei408/article/details/7280296?utm_source=copy 。感谢)

32位系统下,int、long、long long、__int64所占字节数(B)
char: 1字节(8位)
int: 4字节 (32位,取值范围 -2^31 ~ 2^31-1)
unsigned int : 4字节 (32位,取值范围 0 ~ 2^32-1)
long: 4字节 (32位,取值范围 -2^31 ~ 2^31-1)
unsigned long : 4字节 (32位,取值范围 0 ~ 2^32-1)
long long : 8字节(64位,取值范围 -2^63 ~ 2^63-1)

七、位运算与逻辑运算 

(一)位运算

按位与:&

按位或:|

按位异或:^

按位取反:~(对于十进制来说,取相反数再减一)

左移:<<

右移:>>

*优先级:~大于>>、<<大于&大于^大于|大于&=、^=、|=、<<=、>>=

(二)逻辑运算

"∨" 表示"或" (逻辑加法)

"∧" 表示"与". (逻辑乘法)

"┐"表示"非". (逻辑否定)

"⊕"表示"异或"

按位运算优先级大于逻辑运算

与:11为1,其它为0

或:00为0,其它为1

异或:不同为1,相同为0

八、指针

一个小东西……不过易混淆!

int a;//定义一个变量

int *p;//定义一个指针

*p=&a;//指针p取到a的地址(p是一个地址)

cout<<*p;//输出地址中的值(*p是一个值)

example:NOIP2015提高组第24题

#include <iostream>
using namespace std;
void fun(char *a, char *b) {
a = b; //a变为c2的地址。注意,指针=指针时地址中的值不变,变的只是指针
(*a)++; //将a地址(c2)中的值+1
}
int main() {
char c1, c2, *p1, *p2;
c1 = 'A';
c2 = 'a';
p1 = &c1; //p1是c1的地址
p2 = &c2; //p2是c2的地址
fun(p1, p2); //(NOIP的函数好像都叫fun……)
cout << c1 << c2 << endl;//输出为Ab
return ;
}

*九、图论(只讲一点点)

图论挺重要的,板子需要背一背

下面只是一些概念

(一)无向图

完全图:n 个点,n(n-1)/2 条边(每对顶点之间都恰连有一条边)

树:n 个点,n-1 条边(每对顶点之间都有且仅有一条路径,无环)

割点:删除该点后图不连通

割边(桥):删除该边后图不连通

点双连通:某个没有割点的无向图

边双连通:某个没有割边(桥)的无向图

双连通分量:图的极大双连通子图(分为点双连通分量和边双联通分量)

(二)有向图

强连通:在有向图G中,若u能到v,v也能到u,则称u和v是强连通的

强连通图:若有向图G的任意两个节点都强连通,则称G是一个强连通图

强连通分量:有向非强连通图的极大强连通子图,称为强连通分量

DAG:有向无环图

将一个有向图中的强连通分量都缩成一个点,则原图会形成一个DAG

拓扑排序仅适用于DAG

十、计算机奖项

(这部分中部分内容参考https://blog.csdn.net/qq_39992190/article/details/78160251?utm_source=copy。感谢)

图灵奖 (A.M. Turing Award) 由ACM于1966年设立
“计算机界的诺贝尔奖”
奖励那些对计算机事业做出重要贡献的个人

约翰•冯•诺依曼奖 由IEEE(电气和电子工程师协会)于1990年成立
表扬在计算机科学和技术上具有杰出成就的科学家

高德纳奖 (Donald E. Knuth Prize) 始于1996 1.5年颁发一次
授予为计算机科学基础做出杰出贡献的人

……

二一四七四八三*七、一些杂乱的

(一)根据国际信息学奥林匹克竞赛(IOI)的相关决议并考虑到我国目前程序设计语言的具体情况,CCF决定:1.2020年开始,除NOIP以外的NOI系列其他赛事(包括冬令营、CTSC、APIO、NOI)将不再支持Pascal语言和C语言;2.从2022年开始,NOIP竞赛也将不再支持Pascal语言。即从NOIP2022开始,NOI系列的所有赛事将全部取消Pascal语言。在无新增程序设计语言的情况下,NOI系列赛事自NOIP2022开始将仅支持C++语言。(NOIP2017提高组第一题)

(二)IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节)。IP地址通常用“点分十进制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之间的十进制整数。例:点分十进IP地址(100.4.5.6),实际上是32位二进制数(01100100.00000100.00000101.00000110)。

(三)哈夫曼编码采用贪心思想。该方法完全依据字符出现概率来构造异字头的平均长度最短的码字。哈夫曼树的叶子节点个数比非叶子节点个数多一

(四)编译器的主要功能是将源程序翻译成指令

(五)字串是连续的,但子序列不一定是连续的

NOIP2018提高组初赛知识点

祝所有参赛选手rp++,score++,luck++!!!

本文部分图片来源于网络

若需转载,请注明https://www.cnblogs.com/llllllpppppp/p/9749930.html

上一篇:[How to] 动态布局可变高度的cell的应用


下一篇:Android开发-动态布局小记