算法

什么是TCP拥塞控制算法?

一世执手 提交于 2020-03-22 23:44:08
最近花了些时间在学习TCP/IP协议上,首要原因是由于本人长期以来对TCP/IP的认识就只限于三次握手四次分手上,所以希望深入了解一下。再者,TCP/IP和Linux系统层级的很多设计都可以用于中间件系统架构上,比如说TCP 拥塞控制算法也可以用在以响应时间来限流的中间件上。更深一层,像TCP/IP协议这种基础知识和原理性的技术,都是经过长时间的考验的,都是前人智慧的结晶,可以给大家很多启示和帮助。 本文中会出现一些缩写,因为篇幅问题,无法每个都进行解释,如果你不明白它的含义,请自己去搜索了解,做一个主动寻求知识的人。 TCP协议有两个比较重要的控制算法,一个是流量控制,另一个就是阻塞控制。 TCP协议通过滑动窗口来进行流量控制,它是控制发送方的发送速度从而使接受者来得及接收并处理。而拥塞控制作用于整体网络,它是防止过多的包被发送到网络中,避免出现网络负载过大,网络拥塞的情况。 拥塞算法需要 掌握其状态机和四种算法 。拥塞控制状态机的状态有五种,分别是: "Open,Disorder、CWR、Recovery和Loss状态" 。四个算法为 "慢启动,拥塞避免,拥塞发生时算法和快速恢复" 。 Congestion Control State Machine 和TCP一样,拥塞控制算法也有其状态机。当发送方收到一个ACK时,Linux TCP通过状态机的状态来决定其接下来的行为

第一章学习心得

元气小坏坏 提交于 2020-03-22 18:06:27
心得体会:初步了解了数据结构与算法原理以及一些思想,算法的空间复杂度和时间复杂度,知道了要想弄清楚一个算法的实现,首先要知道这个算法的大致原理。 本学期的目标:认真完成作业,坚持上机操作,用实践检验代码。通过学习数据结构提高自己解决问题的效率。 目前存在的苦难:数据结构比较抽象,书本上各种概念比较复杂。 下一阶段的目标:多钻研书上的代码,深入了解算法思想原理以及抽象结构 来源: https://www.cnblogs.com/lionbot/p/12547357.html

字典序算法

和自甴很熟 提交于 2020-03-22 18:01:53
全排列的生成算法 对于给定的字符集,用有效的方法将所有可能的全排列无重复无遗漏地枚举出来。 字典序法 按照字典序求下一个排列的算法 /* 例 字符集 {1,2,3}, 较小的数字较先 , 这样按字典序生成的全排列是 :123,132,213,231,312,321 。 注意 一个全排列可看做一个字符串,字符串可有前缀、后缀。 */ 生成给定全排列的下一个排列 所谓一个 全排列 的下一个排列就是这一个排列与下一个排列之间没有其他的排列。这就要求这一个排列与下一个排列有尽可能长的共同前缀,也即变化限制在尽可能短的后缀上。 /* 例 839647521 是 1 — 9 的排列。 1 — 9 的排列最前面的是 123456789 ,最后面的是 987654321 ,从右向左扫描若都是增的,就到了 987654321 ,也就没有下一个了。否则找出第一次出现下降的位置。 算法: 由 P 1 P 2 …P n 生成的下一个排列的算法如下: 1. 求 i=max{j| P j-1 <P j } 2. 求 l =max{k| P i-1 <P k } 3. 交换P i-1 与P l 得到 P 1 P 2 … P i-1 ( P i.... P n ) , 将红色部分顺序逆转,得到结果. 例 求 8396 4 7521 的下一个排列 1. 确定i,从左到右两两比较找出后一个数比前一个大的组合

TCP 拥塞控制算法简介

ⅰ亾dé卋堺 提交于 2020-03-22 15:26:46
最近花了些时间在学习TCP/IP协议上,首要原因是由于本人长期以来对TCP/IP的认识就只限于三次握手四次分手上,所以希望深入了解一下。再者,TCP/IP和Linux系统层级的很多设计都可以用于中间件系统架构上,比如说TCP 拥塞控制算法也可以用于以响应时间来限流的中间件。更深一层,像TCP/IP协议这种基础知识和原理性的技术,都是经过长时间的考验的,都是前人智慧的结晶,可以给大家很多启示和帮助。  本文中会出现一些缩写,因为篇幅问题,无法每个都进行解释,如果你不明白它的含义,请自己去搜索了解,做一个主动寻求知识的人。  TCP协议有两个比较重要的控制算法,一个是流量控制,另一个就是阻塞控制。  TCP协议通过滑动窗口来进行流量控制,它是控制发送方的发送速度从而使接受者来得及接收并处理。而拥塞控制是作用于网络,它是防止过多的包被发送到网络中,避免出现网络负载过大,网络拥塞的情况。  拥塞算法需要掌握其状态机和四种算法。拥塞控制状态机的状态有五种,分别是Open,Disorder,CWR,Recovery和Loss状态。四个算法为慢启动,拥塞避免,拥塞发生时算法和快速恢复。 Congestion Control State Machine  和TCP一样,拥塞控制算法也有其状态机。当发送方收到一个Ack时,Linux TCP通过状态机(state)来决定其接下来的行为

Kmeans原理与实现

早过忘川 提交于 2020-03-22 04:45:44
原理 http://www.cnblogs.com/jerrylead/archive/2011/04/06/2006910.html 实现 http://www.cnblogs.com/zjutzz/p/5924762.html 无监督学习之K-均值算法分析与MATLAB代码实现 转载 https://blog.csdn.net/liweibin1994/article/details/77898341 前言 K-均值是一种无监督的聚类算法。首先我们要知道什么是无监督,无监督就是说在数据集中,数据是没有标签的。在有监督的数据集中,数据的形式可能是这样: { ( x ( 1 ) , y ( 1 ) ) , ( x ( 2 ) , y ( 2 ) ) , . . . , ( x ( m ) , y ( m ) ) } {(x(1),y(1)),(x(2),y(2)),...,(x(m),y(m))}。而在无监督的数据集中,数据的形式是: { x ( 1 ) , x ( 2 ) , . . . , x ( m ) } {x(1),x(2),...,x(m)}。所谓的标签,就是有没有y。 无监督学习一般用来做什么呢?比如市场分割,也许在你的数据库中有很多用户的数据,你希望将用户分成不同的客户群,这样对不同类型的客户你可以分别提供更合适的服务。再比如 图片压缩 ,假如图片有256种颜色

十三、核密度估计

£可爱£侵袭症+ 提交于 2020-03-21 22:28:15
参考url: https://jakevdp.github.io/PythonDataScienceHandbook/05.13-kernel-density-estimation.html 密度评估器是一种利用D维数据集生成D维概率分布估计的算法,GMM算法用不同高斯分布的加权汇总来表示概率分布估计。核密度估计(kernel density estimation,KDE)算法将高斯混合理念扩展到了逻辑极限(logical extreme),它通过对每个点生成高斯分布的混合成分,获得本质上是无参数的密度评估器。 1、KDE的由来:直方图   密度估计评估器是一种寻找数据集生成概率分布模型的算法。   一维数据的密度估计——直方图,是一个简单的密度评估器,直方图将数据分成若干区间,统计落入每个区间内的点的数量,然后用直观的方式将结果可视化。                   2、核密度估计的实际应用   核密度估计的自由参数是核类型(kernel)参数,他可以指定每个点核密度分布的形状。   核带宽(kernel bandwidth)参数控制每个点的核的大小   核密度估计算法在sklearn.neighbors.KernelDensity评估器中实现,借助六个核中的任意一个核、二三十个距离量度就可以处理具有多个维度的KDE。   由于KDE计算量非常大,因此Scikit

经典排序算法 – 插入排序Insertion sort

大城市里の小女人 提交于 2020-03-21 07:41:01
经典排序算法 – 插入排序Insertion sort 插入排序就是每一步都将一个 待排数据 按其大小插入到 已经排序的数据中 的适当位置,直到全部插入完毕。 插入排序方法分 直接插入排序 和折半插入排序两种,这里只介绍直接插入排序,折半插入排序留到“查找”内容中进行。 入。 源码如下: (1) (2) 设数组为a[0…n-1]。 1. 初始时,a[0]自成1个有序区,无序区为a[1..n-1]。令i=1 2. 将a[i]并入当前的有序区a[0…i-1]中形成a[0…i]的有序区间。 3. i++并重复第二步直到i==n-1。排序完成。 源码如下: (3) 这样的代码太长了,不够清晰。现在进行一下改写,将搜索和数据后移这二个步骤合并。 即每次a[i]先和前面一个数据a[i-1]比较,如果a[i] > a[i-1]说明a[0…i]也是有序的,无须调整。 否则就令j=i-1,temp=a[i]。然后一边将数据a[j]向后移动一边向前搜索,当有数据a[j]<a[i]时停止并将temp放到a[j + 1]处。 源码如下: (4) 源码如下: 来源: https://www.cnblogs.com/chengbao/p/4859358.html

推荐系统学习笔记(1)

谁说我不能喝 提交于 2020-03-21 07:04:56
1 什么是推荐系统?      推荐系统的任务是联系用户和信息,一方面帮助用户发现对自己有价值的信息,另一方面让信息能够展现对它感兴趣的用户面前,从而实现信息消费者和信息生产者的双赢。   推荐系统和搜索引擎不同的是,推荐系统不需要用户提供明确的需求,而是通过分析用户的历史行为给用户的兴趣建模,从而主动给用户推荐能够满足他们兴趣和需求的信息。   推荐系统通过发掘用户的行为,找到用户的个性化需求,从而将长尾商品准确地推荐给需要它的用户,帮助用户发现那些他们感兴趣但很难发现的商品。 2 推荐系统的方法      推荐系统的方法:     社会化推荐( social recommendation )     基于内容的推荐( content-based filtering )     基于协同过滤( collaborative filtering )   推荐算法的本质是通过一定的方式将用户和物品联系起来,而不同的推荐系统利用了不同的方式。 3 推荐系统的应用    个性化推荐系统在网站中的主要作用是通过分析大量用户行为日志,给不同用户提供不同的个性化页面展示,来提高网络的点击率和转化率。 1. 电子商务:例如亚马逊 2. 电影和视频网站:例如 Netflix 3. 个性化音乐网络电台:例如 Last.fm 4. 社交网络:例如 Facebook 5. 个性化阅读:例如 Digg 6.

红黑树(一)之 原理和算法详细介绍

大城市里の小女人 提交于 2020-03-21 05:47:29
概要 前面几章对红黑树进行了比较全面的介绍,包括红黑树的理论以及C/C++/Java的实现。这部分将我学习红黑树期间的一些参考资料和代码分享出来,供大家参考。 转载请注明出处: http://www.cnblogs.com/skywang12345/p/3644742.html 更多内容: 数据结构与算法系列 目录 (01) 红黑树(一)之 原理和算法详细介绍 (02) 红黑树(二)之 C语言的实现 (03) 红黑树(三)之 Linux内核中红黑树的经典实现 (04) 红黑树(四)之 C++的实现 (05) 红黑树(五)之 Java的实现 (06) 红黑树(六)之 参考资料 参考说明 在写红黑树这几篇文章的过程中,参考了许多资料:主要有 《算法导论》 、 《数据结构与算法分析-C语言描述》 以及 网上的一些文章 ;此外,还参考了" Linux内核中的红黑树源码 "、" JDK中的红黑树源码 "、" STL中的红黑树源码 "。 1. Linux内核中的红黑树源码 在" 红黑树(三)之 Linux内核中红黑树的经典实现 "这篇文章中,我已经将Linux内核中的红黑树源码移植出来了,供大家参考。若你想自己亲自研究,可以获取Linux内核源码后再进行查阅。 (01) Linux内核源码下载地址: https://www.kernel.org/ (02) 头文件路径:include

算法——选择排序、插入排序和希尔排序(改进的插入排序)

爷,独闯天下 提交于 2020-03-21 00:44:54
3 月,跳不动了?>>> 选择排序 首先,找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小元素那么它就和自己交换)。再次,在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置。如此以往,直到 将整个数组排序。 性能 :算法的时间效率取决于比较的次数。对于长度为N的数组,选择排序需要大约N²/2次比较和N次交换。 特点 :1. 运行时间和输入无关 :比如即使输入一个有序的数列,还是会和随机数列一样,进行比较、交换处理。 2. 数据移动是最少的 :共N次交换,即交换次数和数组大小是线性关系。其他任何算法都不具备这个特征,大部分都是线性对数或是平方级别的。 函数实现如下: public class Selection { public static void sort(Comparable[] a) { //将a[]按升序排列 int N=a.length; for(int i=0;i<N;i++) { int min=i; for(int j=i+1;j<N;j++) { if(less(a[j],a[min]))min=j; } exch(a,i,min); } } } 插入排序 就像通常人们整理桥牌的方法一样,一张一张来,将每一张牌插入到其他已经有序的牌中的适当的位置。 在计算机中的实现中,为了给要插入的元素腾出空间