上一页 1 2 3 4 5 6 7 ··· 23 下一页
摘要: 一、什么是排序算法的稳定性 假设在数列中存在a[ i ] = a[ j ]。若在排序之前,a[ i ]在a[ j ]前面;并且排序之后,a[ i ]仍然在a[ j ]前面。则这个排序算法是稳定的! 二、选择哪种排序算法 (1)当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排 阅读全文
posted @ 2018-09-04 08:29 GGBeng 阅读(417) 评论(0) 推荐(0) 编辑
摘要: 一、基本思想 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以使整个序列有序。 在分割的过程中,枢纽元的选择至关重要。原因如下: (1)两部分数据是以枢纽元为分界点,小于等于枢纽元 阅读全文
posted @ 2018-09-04 00:09 GGBeng 阅读(293) 评论(0) 推荐(0) 编辑
摘要: 一、基本思想 对于一个待排序的序列,递归地将前半部分数据和后半部分数据各自归并排序,得到排序后的两部分数据,然后合并这两个部分。 归并算法采用分而治之的策略: a. 将问题分成一些小的问题然后递归求解; b. 将分的阶段解得的各个答案“修补”到一起。 可以看到这种结构很像一棵完全二叉树,故我们可以采 阅读全文
posted @ 2018-09-03 22:22 GGBeng 阅读(192) 评论(0) 推荐(0) 编辑
摘要: 一、介绍 堆排序属于选择排序,它是利用堆这种数据结构而设计的一种排序算法。 升序排序采用最大堆,而降序排序采用最小堆。 二、基本思想 将待排序的数列构造成一个最大堆,每次都取堆顶的元素,将其放在数列的最后面,然后将剩余的元素重新调整为最大堆,依次类推,最终得到升序的序列。 主要过程:构建最大堆 + 阅读全文
posted @ 2018-09-03 20:54 GGBeng 阅读(210) 评论(0) 推荐(0) 编辑
摘要: 一、介绍 希尔排序属于插入排序,它是对直接插入排序改进后的一个更高效的版本,也称为缩小增量排序。 该算法是冲破O(n2)的第一批算法之一,它的平均复杂度为O(n1.3),最坏时间复杂度为O(n2)。 二、基本思想 对于一个具有n个元素的数组,取一个增量(gap)将其分组(距离为gap的倍数的元素放在 阅读全文
posted @ 2018-09-03 19:44 GGBeng 阅读(208) 评论(0) 推荐(0) 编辑
摘要: 一、选择排序 1. 基本思想 第一次从R[0]~R[n-1]中选取最小值,与R[0]交换; 第二次从R[1]~R[n-1]中选取最小值,与R[1]交换;….; 第 i 次从R[i-1]~R[n-1]中选取最小值,与R[i-1]交换;….; 第n-1次从R[n-2]~R[n-1]中选取最小值,与R[n 阅读全文
posted @ 2018-09-03 17:16 GGBeng 阅读(395) 评论(0) 推荐(0) 编辑
摘要: 一、定义 拓扑排序:对有向无环图的顶点的一种排序,它使得如果存在一条从vi到vj的路径,那么在排序中vj出现在vi的后面。 对一个有向无环图G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边<u,v>∈E(G),则u在线性序列中出现在v之前。 示例:在学习课程图中,存 阅读全文
posted @ 2018-09-02 23:16 GGBeng 阅读(431) 评论(0) 推荐(0) 编辑
摘要: 一、最大堆的定义 最大堆是一棵完全二叉树,而且每个结点的值都不小于其孩子结点的值。 二、选择数组作为最大堆的内存表现形式 由于最大堆是一棵完全二叉树,所以我们使用数组的形式来存储最大堆的值,并从1号单元开始存储。 假设树的节点个数为n,以1为下标开始编号,直到n结束。对于下标为 i 的结点,其父结点 阅读全文
posted @ 2018-09-02 21:31 GGBeng 阅读(580) 评论(0) 推荐(0) 编辑
摘要: 一、B+树是应文件系统所需而产生的一种B树的变形树 1. 定义(使用阶数m来定义) 所有的叶子节点包含了全部的关键字以及指向含有这些关键字记录的指针,并且: 同一叶子节点中的关键字按大小顺序排列 相邻的叶子节点顺序链接(相当于是构成了一个顺序链表) 所有叶子节点在同一层 2. 和B树的区别 对于非终 阅读全文
posted @ 2018-09-02 17:13 GGBeng 阅读(288) 评论(0) 推荐(0) 编辑
摘要: 一、B 树是一种多叉平衡查找树 相较于二叉结构的红黑树,B 树是多叉结构,所以在元素数量非常多的情况下,B 树的高度不会像二叉树那么大,从而保证查询效率。 一棵含 n 个结点的 B 树的高度 h = O(logtn),其中 t 是 B 树的最小度数。 提出多叉平衡查找树的思维历程:查询效率要更高 > 阅读全文
posted @ 2018-09-02 11:12 GGBeng 阅读(292) 评论(0) 推荐(0) 编辑
摘要: 二叉查找树因可能退化成链表,故其性能最差。平衡二叉树和红黑树是带有平衡条件的二叉查找树,故它们的效率也较高。 平衡二叉树的插入/删除操作带来的旋转操作可能会达到logn次,而红黑树的插入/删除操作带来的旋转操作最多为2/3次。 所以说,当红黑树出现的时候,平衡二叉树就只能出现在博物馆里了。即红黑树是 阅读全文
posted @ 2018-09-02 09:07 GGBeng 阅读(6579) 评论(0) 推荐(1) 编辑
摘要: 一、红黑树是一种弱平衡二叉树 定义:红黑树是一种特殊的二叉查找树,在其结点结构中增加一个存储位表示结点的颜色。 重要性质:通过遵循对结点着色的某种规则,对于所有从根结点到叶子结点的路径,红黑树确保没有一条路径会比其他路径长出两倍。 二、红黑树的平衡条件 相对于平衡二叉树的平衡条件,该平衡条件较为宽松 阅读全文
posted @ 2018-09-02 08:49 GGBeng 阅读(2698) 评论(0) 推荐(0) 编辑
摘要: 一、平衡二叉树是带有平衡条件的二叉查找树 平衡条件:平衡二叉树的每个结点的左子树和右子树的高度最多差1。 平衡因子 bf :左子树的高度减去右子树的高度,显然 bf 的取值范围是 [ -1, 1 ] 。每一个结点(在其结点结构中)保留平衡因子 bf 。 补:虽然平衡二叉树能确保树的高度为O(logn 阅读全文
posted @ 2018-09-01 20:38 GGBeng 阅读(658) 评论(0) 推荐(1) 编辑
摘要: 一、二叉查找树是二叉树在查找领域的扩展,它既具有二分查找的高效性,又具有链表插入的灵活性 二分查找的高效性:每迭代一次,查找的范围就缩小一半。对于二叉查找树来说,每次查找的范围减少一棵子树(理想的情况是少一半结点)。 链式插入的灵活性:二叉查找树是链式结构,故插入结点不需要移动大段的内存数据,具备链 阅读全文
posted @ 2018-09-01 12:34 GGBeng 阅读(263) 评论(0) 推荐(0) 编辑
摘要: 一、建立一个如下图所示的二叉树并打印出来。 图 1 它的前序遍历顺序为:621438 它的中序遍历顺序为:123468 它的后序遍历顺序为:134286 它的层次遍历顺序为:628143 二、二叉树的建立 由于二叉树的定义是递归的,所以用递归的思想建立二叉树是很自然的想法。 1. 以前序遍历的方式 阅读全文
posted @ 2018-09-01 00:01 GGBeng 阅读(363) 评论(0) 推荐(0) 编辑
摘要: 一、I/O复用的特点 能同时监听多个文件描述符 自身是阻塞的 当多个文件描述符同时就绪时,如果不采取额外的措施,程序就只能按顺序依次处理其中的每一个文件描述符 由于其第三个特点,所以服务器程序看起来仍像是串行工作的,如果要实现并发,只能使用多进程或多线程等编程手段。 二、select系统调用 1. 阅读全文
posted @ 2018-08-30 23:28 GGBeng 阅读(258) 评论(0) 推荐(0) 编辑
摘要: 一、用数值表示socket地址&用名字表示socket地址(socket地址==>IP地址和端口号) 1. 用数值表示socket地址不便于记忆,也不便于扩展(比如从IPv4转移到IPv6) 2. 用名字表示socket地址意味着用主机名代替IP地址,用服务名称代替端口号 我们可以用主机名来访问一台 阅读全文
posted @ 2018-08-30 21:40 GGBeng 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 一、根据accept返回的连接socket,想知道该连接socket的本端socket地址以及远端socket地址 补:常用于创建一个新进程来处理该连接时,新进程只知道连接socket,而不知它的本端socket地址和远端socket地址。 二、获取socket地址的函数 阅读全文
posted @ 2018-08-30 20:35 GGBeng 阅读(180) 评论(0) 推荐(0) 编辑
摘要: 一、创建socket 1. type参数指定的服务类型有SOCK_STREAM服务(流服务)和SOCK_DGRAM服务(数据报服务) 对TCP/IP协议族而言,其值取SOCK_STREAM表示传输层使用TCP协议,取SOCK_DGRAM表示传输层使用UDP协议。 补:type参数可以接受上述服务类型 阅读全文
posted @ 2018-08-30 20:05 GGBeng 阅读(1488) 评论(0) 推荐(0) 编辑
摘要: 一、字符串表示的IP地址需要被转化为整数(二进制数)方能使用 IPv4地址:点分十进制字符串 IPv6地址:十六进制字符串 有时(如记录日志),我们则要把整数(二进制数)表示的IP地址转化为可读的字符串。 二、三个只能用于IPv4地址的函数 1. inet_ntoa是不可重入的,其内部用一个静态变量 阅读全文
posted @ 2018-08-30 16:57 GGBeng 阅读(675) 评论(0) 推荐(0) 编辑
摘要: 一、两种通用socket结构体 1. sockaddr 补:由于不同的协议栈的地址值具有不同的含义和长度(如PF_INET6的地址值占用26字节,更不必说PF_UNIX的地址值最大可达到108字节),所以14字节的sa_data根本无法容纳多数协议族的地址值。 2. sockaddr_storage 阅读全文
posted @ 2018-08-30 16:28 GGBeng 阅读(1652) 评论(0) 推荐(0) 编辑
摘要: 一、大端字节序和小端字节序 大端字节序:一个整数的高位字节(23~31bit)存储在内存的低地址处,低位字节(0~7bit)存储在内存的高地址处。 小端字节序:一个整数的高位字节(23~31bit)存储在内存的高地址处,低位字节(0~7bit)存储在内存的低地址处。 现代PC大多采用小端字节序,因此 阅读全文
posted @ 2018-08-30 15:39 GGBeng 阅读(2265) 评论(0) 推荐(0) 编辑
摘要: 六十一、扑克牌中的顺子 题目:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王可以看成任意数字。 六十二、圆圈中最后剩下的数字 题目:0, 1, …, n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里 阅读全文
posted @ 2018-08-29 08:18 GGBeng 阅读(205) 评论(0) 推荐(0) 编辑
摘要: 五十一、数组中的逆序对 题目:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。例如,在数组{7, 5, 6, 4}中,一共存在5个逆序对,分别是(7, 6)、(7, 5)、(7, 4)、(6, 4)和(5, 4)。 提示:本 阅读全文
posted @ 2018-08-29 08:17 GGBeng 阅读(254) 评论(0) 推荐(0) 编辑
摘要: 四十一、数据流中的中位数 题目:如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。 提示:数据是从一个数据流中读出来的,因此数据的数目随着时间的变化而增加,即如果用 阅读全文
posted @ 2018-08-28 23:27 GGBeng 阅读(210) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 ··· 23 下一页