哪些图算法中用到了动态规划的思想?
Floyd算法、背包算法、TSP
进程之间的通信方式
管道Pipe、命名管道FIFO、消息队列MQ、共享存储、信号量、套接字、信号
TCP协议和UDP协议不同的应用场景
两者都是通信协议,TCP和UDP是传输层协议。
TCP是面向连接的可靠的传输层协议,它支持在并不可靠的网络上实现面向连接的可靠的数据传输。
①对网络通信质量有要求时,如:整个数据无误地传递给对方,应用:QQ文件,浏览器HTTP
②对当前通信质量要求不高,尽量快,QQ语音、视频
原码、反码、补码
原码:正负一样
反码:除了符号位取反
补码:取反末位加一
如何编程判断一棵二叉树是完全二叉树
完全二叉树:子节点从左往右生长,一层生长完才可以生长一层。
将二叉树的节点放入队列中,弹出一个节点将它的子节点先左后右压入队列中,判断子节点:
①左右均无子节点,该子节点是叶子结点;
②左右均有子节点,该子节点继续操作;
③有右子节点没有左子节点,False(不是二叉树)
④有左子节点没有右子节点,判断该节点是不是最后一个节点,若是 True,若不是 False
直到队列为空。
最小生成树:prim和kruscal
prim适用于稠密图、kruscal适用于稀疏图
prim:
①随意选择起点,初始点的选取不影响最小生成树的结果
②不断循环选择最小权值
kruscal:
每次用选择权值最小的边可以用优先队列
基本思想:为使生成树权值之和最小,则应使得其中每一条边的权值尽可能小。
具体做法:先构造一个只含n个节点的子图SG,从权值最小边开始,若它的添加不使SG产生回路,则在SG上加上这条边,重复直到加到n-1条。
最短路dijkstra
使用贪心算法实现
①把起点到所有点的距离存下来,找个最短的
②松弛一次再找出最短的
拓扑排序
在有向图中,对所有节点进行排序,要求没有节点指向它前面的节点。
先统计所有节点的入度,对于入度为0的节点分离出来,将指向这个节点的入度减一。
一直做改操作,直至所有节点都被分离出来。
如果最后不存在入度为0的节点,说明有环,不存在拓扑排序,即很多题目无解的情况。
欧拉回路
若图G的依据路径包括每个边恰好一次,则该路径称为欧拉回路。
无向图存在欧拉回路的充要条件:图所有顶点度数均为偶数,且该图是连通图
有向图存在欧拉回路的充要条件:所有顶点的入度=初度,且该图是连通图
具体步骤:
①如果此时与该点无相连的点,则加入路径中
②如果该点有相连的点,则加入队列中,遍历至没有相连的点
③处理当前点,删除走过的这条边,并在其相邻点上进行同样操作,并把删除加入路径
KMP算法
结论:
KMP算法可以解决模式串在目标串出现的位置、次数等,以及next[]思想可以解决字符串前缀和后缀最长的公共部分。【前缀不包括尾部,后缀不包括头部】
思想:
通过计算之前的匹配过的位置,节省重复分配的时间。
数据库的各种范式
1NF 最基本的范式,符合原子性
2NF 去除非主属性对于主属性的部分以来
3NF 去除非主属性对主属性的传递函数
BCNF 消除主属性对主键的部分与传递依赖
4NF 消除表中的多值依赖
数据库,有什么类型的数据库
关系数据库
非关系数据库
键值数据库
关系型数据库的特点
①数据集中控制
②数据独立:独立于应用程序,逻辑独立性&物理独立性
③数据共享:供多个用户使用,同时存取数据而互不影响
④减少数据冗余
⑤数据结构化
⑥统一的数据保护:对数据库规定密码或存取权限
冯诺依曼机的体系结构
①计算机处理的数据和指令一律用二进制表示
②顺序执行程序
③硬件五大部分组成
操作系统的特点?功能?
特点:
并发性、共享性、虚拟性、异步性
功能:
①系统资源管理者:处理机管理、存储器管理、文件管理、设备管理
②向上层提供方便易用的服务
③对硬件机器的扩展
中断和系统调用的区别
系统调用是应用程序主动向操作系统发出服务请求。
(外)中断:与当前执行的指令无关,中断信号来自于CPU外部,来自硬件设备的处理请求。
内中断即异常:与当前执行的指令有关,中断信号来源于CPU内部。
凡是与共享资源有关的操作,会直接影响到其他进程的操作,就一定需要OS介入,通过系统调用实现。
进程、线程的概念以及区别?进程间的通信方式?
进程:是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位
编程:是OS能进行运算调度的最小单位,被包含在进程中,是进程中实际运作单位。
区别:
①进程是资源分配的基本单元,线程是CPU调度的基本单位
②进程之间可以并发执行,线程也可以,提升了并发度
③传统的进程间并发要切换进程的运行环境,系统开销大。
若同一进程内线程切换,不需切进程环境,系统开销大。
引入线程后,并发所带来的系统开销减小。
通信方式:共享存储、管道通信、消息传递
进程有哪几种状态,状态之间的转换、进程调度策略?
就绪、运行、阻塞
就绪—>运行;运行—>就绪;运行—>阻塞;阻塞—>就绪
策略:FCFS先来先服务、短作业优先调用、高优先权优先调度、高响应优先调度、时间片轮转法、多级反馈队列调度算法。
什么是死锁?死锁产生的四个必要条件?如何预防死锁?
死锁:各进程互相等待对方手里的资源,导致各进程都阻塞无法向前推进。
必要条件:互斥条件、不剥夺条件、请求和保持条件、环路等待条件
避免死锁:避免系统进入不安全状态(银行家算法)
预防死锁:破坏死锁产生的四个必要条件
简述下银行家算法
是一种最有代表性的避免死锁的算法,在避免死锁方法中允许进程动态地申请资源,但系统在进行资源分配前,应计算此次分配的安全性,若分配不会导致系统进入不安全状态,则分配,否则分配。
可导、可微、连续、可积之间的关系(一元函数+二元函数)
三个中值定理的区别、联系和物理意义(罗尔、拉格朗日、柯西)。
拉格朗日是罗尔的推广,柯西是拉格朗日的推广。
拉格朗日 f ( s ) = [ f ( b ) − f ( a ) ] / ( b − a ) f(s)=[f(b)-f(a)]/(b-a) f(s)=[f(b)−f(a)]/(b−a)
①几何意义:至少存在一点切线与断点的连线平行
②物理意义:至少存在一点速度与平均速度相等
柯西 [ f ( b ) − f ( a ) ] / [ g ( b ) − g ( a ) ] = f ′ ( k ) / g ′ ( k ) [f(b)-f(a)]/[g(b)-g(a)]=f'(k)/g'(k) [f(b)−f(a)]/[g(b)−g(a)]=f′(k)/g′(k)
①二维空间中的运动
②有类似于拉格朗日中值定理一样的几何意义
梯度、方向导数与梯度下降
泰勒公式
泰勒级数将复杂函数转化成多项式函数,可以近似计算函数的值。
线性空间(向量空间)
是给元素装配了加法和数乘的非空集合
矩阵的秩
行向量中极大无关向量组的个数
特征值和特征向量
A x = λ x Ax=\lambda x Ax=λx
λ \lambda λ为A的特征值0,非零向量x为A对应于特征值 λ \lambda λ的特征向量。
几何意义:线性变换后,特征向量方向的向量发生拉伸,而方向不发生变化,且特征值是拉伸的程度。
相似矩阵
A、B的特征值和特征多项式相同(特征值和特征多项式与基无关)
A(n×n)有n个线性无关的特征向量,说明A可以对角化,与对角矩阵相似。
矩阵的正交
A A T = A T A = E AA^T=A^TA=E AAT=ATA=E
A T = A ( − 1 ) A^T=A^(-1) AT=A(−1)
对称矩阵的性质
·特征值为实数
·属于不同特征值的特征向量正交
·特征的重数和之对应的线性无关的特征向量的个数相等
·必存在正交矩阵,将其化为对角矩阵,且对角矩阵元素即为特征值
大数定理
在试验不变的条件下,重复试验多次,随机事件的频率近似于它的概率。
中心极限定理
给定一个任意分布的总体,随机抽取n个抽样,一共抽m次。然后把这m组抽样分别求出平均值,这些平均值的分布接近正态分布。
全概率公式和贝叶斯公式
① p ( c ) = ∑ p L i p ( C ∣ L i ) p(c)=\sum_p{L_i}p(C|L_i) p(c)=∑pLip(C∣Li)
② p ( A ∣ B ) = P ( B ∣ A ) ⋅ P ( A ) / P ( B ) p(A|B)=P(B|A)·P(A)/P(B) p(A∣B)=P(B∣A)⋅P(A)/P(B)
正态分布(高斯分布)
相互独立的两个正态分布相加即正态分布。
最大似然估计是什么
从样本中随机抽取n个样本,而模型的参数估计量使得抽取的这n个样本的观测值概率最大。
最大似然估计是一个统计方法,它用来求一个样本集的概率密度函数的参数。
O(n)O(logn)O(n^2) 复杂度分别对应什么算法
O(1):哈希算法
O(n):遍历
O(logn):二分查找
O(n^2):冒泡排序
O(nlogn):归并排序
动态规划的理解
动态规划算法与 分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从 这些子问题的解得到原问题的解。我们可以用一个表来记录所有已解的子问题的答案。不管该子问题以后是否被用到,只要它被计算过,就将其结果填入表中。这就是动态规划法的基本思路。
指针和引用的区别
编译器处理二者时没区别,但在语法层面
①
int a=1,int *p=&a 指针是一个变量,这个变量存储的是一个地址,指向内存的一个存储单元。
int a=1,int &b=a 引用和原来的变量本质是一个东西(内存占有同一个存储单元),只不过是原变量的一个别名而已
②
引用不可以为空,被创建时必初始化,初始化后不会再改变。
指针可以为空,可以在任何时候被初始化,初始化后可以改变。
③
指针可以有多级,引用只能一级
④
sizeof指针:得到指针本身的大小
sizeof引用:得到的是所指向对象的大小
⑤
自增(++)的运算意义不同
对深度学习的理解
深度学习是用于建立、模拟人脑进行分析的神经网络,并模仿人脑的机制来解释数据的一种机器学习技术。
基本特点是试图模仿大脑的神经元之间传递,处理信息的模式。
深度学习与机器学习中的神经网络强相关,神经网络也是其主要的算法和手段,或者我们可以将深度学习称为改良版的神经网络算法。