知识趣记-数据结构,计网,机器学习-2020年9月
排序算法是否稳定,就是看其值相等的元素的前后顺序排序后会不会变。
稳定的排序算法:冒泡,基数,插入,归并,桶,二叉树
不稳定的:选择,希尔,堆,快速
归并排序:
归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。
冒泡排序:
冒泡排序,是需要两层循环的,第一层,控制了一共需要多少轮比较,第二层控制了该轮比较需要比较多少个元素。
其中,外层需要n次,内层需要n-i-1次(i从0~n-1之间递增,则时间复杂度是O(n*n)
1.快速排序是一个就地排序,分而治之,大规模递归的算法。
2.冒泡排序是最慢的排序算法。在实际运用中它是效率最低的算法。它通过一趟又一趟地比较数组中的每一个元素,使较大的数据下沉,较小的数据上升。它是O(n^2)的算法。
3.归并排序先分解要排序的序列,从1分成2,2分成4,依次分解,当分解到只有1个一组的时候,就可以排序这些分组,然后依次合并回原来的序列中,这样就可以排序所有数据。合并排序比堆排序稍微快一点,但是需要比堆排序多一倍的内存空间,因为它需要一个额外的数组。
4.堆排序适合于数据量非常大的场合(百万数据)。
堆排序会将所有的数据建成一个堆,最大的数据在堆顶,然后将堆顶数据和序列的最后一个数据交换。接下来再次重建堆,交换数据,依次下去,就可以排序所有的数据。空间复杂度是:O(1),仅用一个用来交换的暂存单元。
5.插入排序首先需要从无序序列中取出一个值,然后在有序序列中查找该值插入的位置,在将后面的元素后移一位,所以复杂度是O(n^2);
各种渐近时间复杂度由小到大的顺序如下
O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)
TCP和UDP的区别:
TCP UDP
面向连接 无连接
可靠传输 不可靠传输
面向字节流 面向数据报
一对一 一对多
TCP的第三次握手,是为了已失效的请求报文突然又传到服务端造成错误。
若没有第三次握手,服务端会等待客户端发送数据,而客户端却不会发送数据,造成服务端久久等待,从而遭受攻击。
大白话解释TCP的三次握手
TCP三次握手的基本思想就是“让我知道你已经知道”了。
服务器监听请求,客户端发起连接请求(第一次连接),请求在路上可能存在丢失的风险,所以当请求到了服务器后如果服务器同意建立连接会给客户端一个回信(第二次连接),告诉它:我已经收到请求,可以连接。
但是回信也存在一个问题,那就是回信能不能到客户端?它需要客户端给他一个回信说我已经收到批准通知了,如果客户端一直不回复的话意味着客户端没有收到批准通知。
因此客户端一收到批准通知就立马回复(第三次握手):OK老铁我收到你的批准通知了。至此,三次握手结束。
一个很类似的例子就是投简历:先投简历,然后对方公司会通知你通过简历筛选,你收到这个通知后一般会回复一下我知道了。
这种“让我知道你已经知道了”的想法是一种约定俗成的可靠信息交互的基本方式,基于此想法构建的信息交互框架叫做协议。
大白话讲四次挥手:
精确的说就是:
第一次。A跟B说,我发完我的信息(但是还可以接受信息),我要断开连接了。
第二次。B跟A说,好的,我知道了,那我不再接收你的信息了(但是我的信息还没发完,等待关闭)。
第三次。B跟A说,我传给你的信息传完了,你可以关闭连接了。
第四次。A跟B说,好的,我关闭连接了。
进程是资源分配和调度的基本单位,而线程是CPU调度的基本单元。
进程包含多个线程,并且线程共享进程的资源。
常见损失函数:
平方损失函数:常用于回归学习
Smooth L1 loss:防止梯度爆炸
softmax_loss
sigmoid_loss
Contrastive_Loss
Batch normalization(批规范化)使每一层的输入范围都大致固定。
因为神经网路每层的权重参数在变化,每层的输入数据的分布在变化,让每一层去拟合输入的分布就容易过拟合且学习率不能太高;BN就是就是让每一层去自适应拟合自己的输入分布,使得每一层比较独立;做法就是把数据标准化为0均值1方差,然后设置2个参数控制均值和方差,让每一层自己去学习这两个参数
RCNN Faster RCNN
区域建议 selective search RPN
分类和定位 svm分类,bounding box回归,softmax分类,多任务损失函数边框回归
性能 繁琐 端到端
Dropout是指在模型训练时随机让网络某些隐含层节点的权重不工作,不工作的那些节点可以暂时认为不是网络结构的一部分,但是它的权重得保留下来(只是暂时不更新而已),因为下次样本输入时它可能又得工作了。 训练神经网络模型时,如果训练样本较少,为了防止模型过拟合,Dropout可以作为一种trikc供选择。
欧拉图:
存在一个顶点,经过所有边一次且只有一次能回到原顶点的。
k-means聚类算法:
首先随机选取k个点作为聚类中心,对其他点进行聚类,聚类到离这个点最近的聚类中心,形成k个簇,计算k个簇的质心。
重复以上步骤,直到k个簇的簇心不发生变化或达到固定的迭代次数。
目标函数,最小化对象到其质心的距离和:
源代码到可执行文件的过程:
预处理,编译,汇编,链接
目标文件和可执行文件都是由机器语言指令组成的。但目标文件只包含您所编写的代码转换成的机器语言,而可执行文件还包含您所使用的库例程以及启动代码。
重写:子类重写父类
重载:一个类中定义了多个同名的方法,但他们有不同的参数个数或参数类型。
多态:提高代码的复用性和拓展性。