- 博客(8)
- 资源 (8)
- 收藏
- 关注
原创 算法学习笔记----快速排序
一、算法描述 快速排序是一种最坏情况时间复杂度为Θ(n^2)的排序算法。虽然最坏情况时间复杂度很差,但是快速排序通常是实际排序应用中最好的选择,因为它的平均性能非常好:它的期望时间复杂度为Θ(nlgn),而且Θ(nlgn)中隐含的常数因子非常小。另外,它还能原址排序,甚至在虚存环境中也能很好地工作。算法步骤如下所示:1、将源数组A[p..r]划分为两两个子数组A[p..q-1]和A[
2013-02-24 16:28:27 1475
原创 Linux中listen()系统调用的backlog参数分析
这篇文章是对上一篇博客网络编程常用接口的内核实现----sys_listen()的补充,上篇文章中我说listen()系统调用的backlog参数既是连接队列的长度,也指定了半连接队列的长度(不能说等于),而不是《Unix网络编程》中讲到的是半连接队列和连接队列之和的上限,也就是说这个说法对Linux不适用。这篇文章中通过具体的代码来说明这个结论,并且会分析如果连接队列和半连接队列都满的话,内核会
2013-02-23 10:13:18 6470 5
原创 网络编程常用接口的内核实现----sys_listen()
listen()函数仅在TCP服务器端调用,它做两个事情:将套接字转换到LISTEN状态和设置套接上的最大连接队列。listen()对应的内核实现为sys_listen(),下面开始对其实现作具体的分析。一、sys_listen()函数 sys_listen()的源码实现及分析如下所示:/* * Perform a listen. Basically, we allow the
2013-02-21 22:07:52 3652 2
原创 网络编程常用接口的内核实现----sys_bind()
bind()系统调用是给套接字分配一个本地协议地址,对于网际协议,协议地址是32位IPv4地址或128位IPv6地址与16位的TCP或UDP端口号的组合。如果没有通过bind()来指定本地的协议地址,在和远端通信时,内核会随机给套接字分配一个IP地址和端口号。bind()系统调用通常是在网络程序的服务器端调用,而且是必须的。如果TCP服务器不这么做,让内核来选择临时端口号而不是捆绑众所周知的端口,
2013-02-20 16:02:55 3417
原创 算法学习笔记----堆排序
堆是一个数组,可以看成一个近似的完全二叉树,除了最底层外,其余各层都是充满的,而且是从左到右填充。假设数组A[1..A.hep_size]是一个对,给定一个结点的下标i,很容计算出其父节点、左孩子和右孩子的下标,如下所示(这里的数组下标是从1开始): 在C语言中数组下标是从0开始的,因此在计算父节点、左右子节点时的公式和上图中有所不同,如下图所示: 二叉堆可以分为两种形
2013-02-03 20:26:15 3258 1
原创 算法学习笔记----用主方法求解递归式
以下内容来自《算法导论》,做个记录,便于查阅。 主方法为如下形式的递归式提供了一种“菜谱”式的求解方法,如下所示其中a≥1和b>1是常数,f(n)是渐近正函数。为了使用主方法,需要牢记三种情况,但随后你就可以很容易地求解很多递归式,通常不需要纸和笔的版主。 主方法依赖于下面的定理。 定理4.1(主定理) 令a≥1和b>1是常数,f(n)是一个函数,T(n)是定义
2013-02-03 10:58:29 8911
原创 算法学习笔记----最大子数组问题
题目:给定义数组A,长度为n,找出数组A中的最大子数组,例如数组A={-23,18,20,-7,12},则最大子数组为{18,20,-7,12}。解题思路: ①很容易想到的方案是简单地尝试每对可能的组合,然后从这些组合中找出最大的子数组。从数组中选择一个数A(i),然后计算以A(i)开始的所有子数组的和,计算的次数为(n-i),选择的次数为n,因此该算法的时间复杂度为Θ(n^2),该算法
2013-02-02 17:33:24 1444
原创 网络编程常用接口的内核实现----sys_socket()
最近在开发一个内核模块,主要的功能是在集群的节点之间迁移TCP连接,从而实现基于内容的调用。因此,花了很多时间和精力研究linux的网络协议栈,但是还是有很多地方没有串起来。网络协议栈是为用户层的应用开发服务的,因此决定从用户层常用的编程接口入手,通过学习这些接口的实现,来理清整个过程,加深对网络协议栈的理解。 网络编程通常是基于客户端-服务端模型。首先启动服务器,稍后的某个时刻启动客户,它
2013-02-01 21:53:04 4339
Linux_C高级程序员指南.pdfLinux_C高级程序员指南.pdf
2011-04-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人