- 博客(30)
- 收藏
- 关注
原创 TCP--IP详解之二(基本框架函数)
1. Socket1.1. 失败返回-1.成功返回相应的描述符。在描述符用尽的时候会失败。因此大并发的时候可能失败。1.2. 协议AF_XXX,与PF_XXX是一样的。1.3. 协议类型:AF_INET,AF_INET6,AF_LOCAL(AF_UNIX),AR_ROUTE,AF_UNSPEC.1.4. 套接口类型:SO
2013-12-28 17:25:55
596
原创 TCP--IP详解之一(基本概念)
1. TCP面向连接、可靠保证1.1. 有连接的建立过程1.2. 发送的数据需要确认,超时则需要重传1.3. 有序列号,需要重组数据包1.4. 流量控制,(窗口大小)1.5. 全双工UDP如果要可靠,则需要在应用层实现1、2、3、4的功能。2. TCP相应的选项2.1.
2013-12-26 21:34:36
530
原创 网络协议之五(TCP)
1. TCP可靠性保障1.1. TCP会分割为TCP段(UDP不会,超长后直接截取)1.2. 发送TCP段后,启动定时器等待ACK。以便超时重发1.3. 客户端收到TCP段后,不会立即发送ACK,而是会等待一个时间(以便和将要发送的数据一起发送。Nagle算法)1.4. 检验和,如果不对,则直接丢失,且不发送ACK,以便
2013-12-18 23:21:38
634
原创 网络协议之五(UDP)
1. UDP特性1.1. 字节流1.2. 不可靠1.3. 限定到端口,TCP端口和UDP端口是不同的端口系列,因此可以有相同的端口号。因此如果提供相同的协议,UDP和TCP一般用相同的端口号。1.4. UDP校验和是可选的,TCP校验和则是必须的。2. IP分片2.1. 分片的原因是MT
2013-12-09 22:20:40
526
原创 网络协议之四(ICMP)
1. ICMPICMP控制报文协议:用于传递差错报文和其他需要注意的信息。除了差错报文,还有回显报文、回显响应报文(Ping使用),时间戳请求、时间戳应答;路由通告、路由请求;地址掩码请求、地址掩码应答(无盘工作站获取自己的地址掩码)。2. ICMP是主机之间的信息交换,不能到端口。3. ICMP应用3.1. Ping使
2013-12-08 23:11:32
632
原创 网络协议之三(ARP、RAPR)
1. ARP地址解析协议链路层上传输使用的是物理地址(MAC地址)。ARP协议是将IP地址转换为MAC地址。1.1. 网页输入地址,回车后产生的影响。1.1.1. 调用gethostbyname,通过域名获取ip。使用DNS协议。1.1.2. 使用获取到的ip进行连接,TCP发出一个连接请求。1.1.3. 使用IP封装请求
2013-12-08 21:42:41
3669
原创 网络协议之二(IP网际协议)
1. 网际协议—IPIP协议是TCP/IP协议族的核心。运输层的TCP/UDP,网络层的ICMP,IGMP都以IP数据报格式传输。2. 特性2.1. 不可靠---不保证数据能真正的到达目的地。2.2. 无连接---不维护后续数据的状态信息。数据报独立传输,后发的可能比先发的早到。3. 数据格式3.1.
2013-12-08 20:39:50
563
原创 网络协议之一(链路层)
1. 链路层作用1.1. 发送、接收IP数据报1.2. 发送、接收ARP请求、应答1.3. 发送、接收RARP请求、应答。2. 链路层封装方式2.1. 以太网2.1.1. 以太网尾部封装,把帧中头放到数据后面(紧接着CRC之前)。以便提高数据部分往应用层拷贝时减少页切换。2.2.
2013-12-07 00:41:55
644
原创 网络协议--概述
1. 网络分层网络地址,网络分层2. TCP/IP协议族,四层模型四层模型是一般的实现形式2.1.1. 链路层链路层也称数据链路层或网络接口层。主要处理物理接口细节。如ARP,RARP协议。2.1.2. 网络层网络层也称互联网层。主要处理分组在网络中的活动,如分组的选路。包括IP,ICMP,IGMP协议。IP为主要
2013-12-07 00:21:41
679
原创 图之四(最短路径)
1. 最短路径1.1. 最短路径:是带权有向图中,一个顶点u到另一顶点v之间权值最小的路径,最短路径可能不止一条。最短路径不能含有负权回路,否则在负权回路上循环则可以达到负无穷大;也不能有正权回路,否则从路径上去掉回路后,可以产生有向图源点和终点、权值更小的路径。因此最多有0权回路,而这时一定还有另外一条无回路的最短路径。因此可以将路径上的的0权回路都去掉
2013-11-26 23:38:02
851
原创 图之三(最小生成树)
1. 最小生成树最小生成树是无向联通带权图的最小联通分量(带权)。只用n-1条边连接n个顶点,且边的权值和最小。使用贪心算法,贪心和动态规划比,还有一个更强的性质,局部最优解即为全局最优解。2. 求解算法思想2.1. 通用的思想算法没一步都确定一条边,使得加入后仍然为最小生成树的子集。一般都是基于贪心算法思想来实现。2.2.
2013-11-24 00:30:52
715
原创 图之二(图的基本算法)
1. 图的存储表示1.1. 邻接表表示法对图中每个顶点,维护一个以该顶点为起点的终点的链表。整个图需要|V|条链表。邻接表即为这|V|条链表组成的表。场景:一般用于稀疏表。优点:Ø 有向图中,所有邻接表的链长度和为|E|;无向图中,所有邻接表的链长度和为2*|E|.Ø 每条链表的存储顺序没有要求。Ø 邻接表表示法中,存储空间为O(V+
2013-11-23 20:15:49
777
原创 图之一(图的基本概念)
1. 图的分类(按边是否有向)1.1. 有向图边是有向的。边从一个顶点进入另一个顶点。强连通图,有向图中任何两点都有路(注意正反。即从任何点,都可到任何的另一点)。1.2. 无向图边是无向的。边表示一个顶点和另一个顶点关联。连通图,无向图中任何两点关联。2. 图的分类(按活动表示方式)2.1. 顶点表示
2013-11-23 20:13:04
764
原创 算法设计分析之三(动态规划,最长公共子序列)
1. 动态规划动态规划是通过组合子问题的解从而得到整个问题的解。1.1. 与分治算法区别分治法是将问题分解为独立的子问题,递归求解子问题,最后再合并子问题从而得到问题的解。动态规划并不要求子问题独立,因此子问题可以包含公共的子子问题。这时候如果用分治法,则会重复计算很多不必要的工作,即重复计算公共的子子问题。1.2. 思想动态规划是将子
2013-11-17 01:11:23
2433
原创 算法设计分析之二(竞争分析,自组织表)
1. 自组织表:定义两种操作l n个元素的列表L,访问(可能是查找,也可以是其他操作)元素x的代价与元素在列表中的位置有关(从表头到x的距离)。l 元素在L中的位置可以通过交换相邻的元素来改变,而这个操作的代价为O(1)。如果考虑用户的访问可能是一系列的,而且一个元素被访问后,再次被访问的概率会增大,因此考虑对一个元素访问后将该元素和其前驱的元素交换(代价为O(1
2013-11-14 22:26:33
3453
原创 算法设计分析之一(平摊分析,表扩增,势能方法)
1. 平摊分析问题:hash表应该设置为多大?(使用链表解决冲突。)越大越好,这样查找越快;但是空间越大,浪费越大。因此,通常为存储元素的2倍。但是如果不知道要存储的元素的值呢?方法:使用动态表,思想为vector扩展容量的方式,空间满时重新分配两倍当前大小的空间,并移动元素,释放旧的空间。复杂度分析:每一次都有插入操作,在2的幂次方加1处还需要移动前面的所有元素。
2013-11-13 00:41:24
3051
原创 数据结构之六(跳跃表Skip List)
跳跃表的优点:期望操作时间为O(lgn),且以概率1达到O(lgn),即操作几乎总是O(lgn),而不仅是以期望复杂度为O(lgn)。另外跳跃表实现相对简单。1. 跳跃表含义n个元素的跳跃表。l 跳跃表以多条链表来表示元素。l 每条链表都是排好序的有序链表。l 最底层的链表为普通的单链表,包含所有的元素。l 每一层(除了最底层)节点的选择为其下层元素的
2013-11-11 23:33:01
696
2
原创 数据结构之五(数据结构的扩充、动态统计、区间树)
1. 动态有序统计静态统计:是指数据内容一旦确定,就不再有增加、删除操作,排序的内容是静态固定不变的。(见排序之五)动态统计:内容有可能有增减。动态统计主要有两种操作。一是获取数组中第i大的数。二是给一个数x,返回x在数组中的位置。动态统计实现方式:以红黑树为基础进行扩充,在每个节点x存储额外的一个记录信息---以x为根的子树的节点数(包含x自己,以及其内部孩子节点,
2013-11-11 00:11:39
1178
原创 数据结构之四(平衡查找树之一--红黑树)
数据结构之四(平衡查找树之一--红黑树)由二叉查找树随机情况下O(lgn)的操作(增、删、查)时间,因此希望得到一种下最坏情况O(lgn)的操作时间。由二叉树操作时间和树高相关,因此考虑将二叉树的高度保持为O(lgn),从而达到目的。平衡树包括:AVL,2-3树,2-3-4树,B树(B+,B*),R-B树(红黑树),Skip lists(跳跃表),Treap(树堆)1.
2013-11-09 23:34:18
506
原创 数据结构之三(二叉查找树)
查找树是一种动态数据结构,支持插入、删除、查找等操作。二叉查找树的复杂度和树的高度是成正比的。有n个节点的完全二叉树,树高为O(lgn)。但是如果树含义n个节点,如果为斜的,则成为链表,高度为O(n)。1. 二叉查找树每个节点最多有两个分支。对于每个节点。左孩子的任何节点小于根,根小于右孩子的任何节点。2. 二叉排序与快排的比较。二叉排序,使用将
2013-11-09 16:20:45
466
原创 数据结构之二(续,高级hash)
问题:普通hash会导致对于特定的输入,其时间复杂度可以达到O(n)。为了解决这个问题,同快速排序的随机化一样,使用随机化算法来实现,从而可以使得复杂度不会依赖于输入,且性能能达到平均。1. 全域hash(universal hashing)全域hash:在执行的开始,随机地从一族hash函数中选择一个函数来执行hash。从而避免对特定输入导致的最差性能。H为有限的一组散
2013-11-06 00:34:39
987
原创 数据结构之二(hash)
Hash表Hash表作为一种动态集合数据结构,一般只支持:插入、查询、删除操作;而且每个操作的时间复杂度一般控制在O(1)内。Hash表是普通数组的一种推广。因为数组可以在直接通过下标来定位要查找的元素,时间为O(1)。因此hash表目标也是使用一些技术,以达到可以在O(1)的时间内完成操作。(严格来说时间是和装载因子a相关的)Hash的方法。1. 直接寻址法前提
2013-11-03 17:42:46
903
原创 数据结构之一(基本数据结构)
从本章开始,讨论数据结构。动态集:数据结构讨论集合时,一般集合的元素是可以变化的,可以向集合中添加、删除、修改元素的值。动态集上的操作:查找、添加、删除、取最大值、取最小值、前驱、后继。基本数据结构:1 栈:后进先出(LIFO)。插入--入栈(PUSH),删除--出栈(POP),查看栈顶元素(TOP)。2 队列:先进先出(FIFO)。插入
2013-11-03 04:05:37
527
原创 排序之五(顺序统计、中位数法)
作为排序的一个扩展,给定一个含n个元素的无序数组,求第k小的数。 K取特殊值:如1或n,这时为求最小或最大值。只需要扫描一遍数组,记录下小的或大的数,只需要n-1次比较即可。如果要同时求最大和最小值,则一个方法可以先求最大,再求最小,可以在2*(n-1)比较解决;另一个方法是每次处理两个元素,先新的两个元素比较,再将大的和当前最大值比较,小的和当前最小值比较,这样每2个元素只需
2013-10-30 23:10:51
1416
原创 排序之四(线性时间排序)
排序模型排序时间下界引出的排序模型。基于比较的排序(决策树模型):n个元素的决策树叶节点需要n!个叶子。从而树高度由斯特劳林公式可以求得近似为O(nlgn)。因此最优的下限为O(nlgn)。普通排序都是基于比较的,如插入,归并,快排,堆排。其中归并和堆排是渐进最优的。基于比较的排序都可以转换为决策树模型。计数模型:基数模型:计数排序排序思想:堆排序既有归并排序的优点--
2013-10-26 00:31:46
559
原创 排序之三(堆排序)
堆排序堆排序既有归并排序的优点--O(nlgn)的时间复杂度,由有插入排序等排序的优点--原地排序。堆:含义n个元素的堆是指,当i[1,n/2]时,a[i]注意堆与二叉查找树的区别:二叉查找树一定是不大于一个,不小于另一个。堆是要么不大于两个,要么不小于两个;左右树之间没有比较关系;但是最小值(或最大值)一定在根处。堆排序思想:在原数组上进行堆操作,从而将数组进行排序。在大堆中取出
2013-10-23 23:22:57
469
原创 排序之二(快速排序及随机化)
快速排序 快排思想:快速排序是分治法的另一个重要应用。和归并的算法思想一样,也以分治思想为基础,不同之处在于划分的标准不同。归并以数组元素个数进行划分,将原数组划分为两个元素个数相当的子问题。快速排序则以关键字进行划分,将原数组划分为两部分,一部分比关键字小,另一部分比关键字大。设计思想:分治法。注意细节:实现细节上对于关键字的选择,一是以最小下标元素,二是
2013-10-20 17:24:54
479
原创 分治思想的应用
分治思想是把问题进行分解为不相交的子问题,直到子问题可解;最后再合并子问题的解得到问题的解。应用:二分查找x^n幂次求解斐波拉契数列求解。应用矩阵幂次关系。矩阵乘法,分块将次的技巧。H树,电路设计。
2013-10-20 10:54:24
592
原创 排序之一(插入排序、归并排序)
排序问题是各种算法问题中比较重要的问题。导论也已排序开篇。插入排序插入排序的思想:假设数组的前i-1个元素已经排好序,再将第i个元素插入前i个元素中的合适的位置;循环这个过程直到最后一个元素被插入到合适的位置。注意细节:由于1个元素的数组当然是有序的,因此在处理的时候,循环过程从2开始直到数组长度n即可。插入过程中,对于具体要插入的位置的确定。一是可以从i-1,
2013-10-19 23:29:16
856
原创 总述
最近看到一部MIT的《算法导论》课程视频,结合书籍进行了学习。感受颇多。以前自己学习的笔记主要都是以纸质笔记为主,好多笔记再重新阅读的时候总有许多不便。因此,这次已博客的方式记录。网络上有很多朋友有相关的分析说明,而且有很多讲解非常清晰的博文。敝人在此写作,主要是对自己学习的一个梳理、总结,进行一些系统整理。很多时候看过就过了,没有总结,有时候很难把看过的东西提升为自己的东西。因此开篇写作的目
2013-10-19 21:34:44
563
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人