- 博客(46)
- 收藏
- 关注
原创 IPIP.Net地址库格式分析
IPIP.NET地址库文件格式分析ipip库是什么?ipip是一个ip地址库, 官网号称全球唯一一个基于各电信运营商,以及网络服务的BGP/ASN数据而分析处理而得来的IP库ipip库有哪些特性地理数据标注准确: 国内的地址标注准确度高更新实时: 数据24小时实时更新提供CDN/DNS/VPN专版, 专为CDN、DNS、VPN用户设计(提供ACL格式)ipip库提供文件格式DAT[X]格式数据TX...
2018-04-19 17:25:43
9190
原创 为什么是虚析构函数?
CPP玩多了你自然就会接触很多关于继承的实例,在继承体系中我们经常会为了多态特性去使用很多的virtual关键字。其中会有对普通成员函数的virtual修饰,对继承关系的virtual修饰,见得更多的还有对父类析构函数的virtual修饰,那么为什么父类的析构函数是虚的那?如果不用virtual修饰父类的析构函数会怎么样?先看如下两个实例:class B{public: B(){ s
2015-10-26 18:44:02
553
原创 TCP断开连接中与TIME_WAIT
上一篇文章中我们讲到了TCP连接的建立过程中的三次握手的起因,这里我们来看看常常出现的TIME_WAIT问题,通过TCP状态转移图我们很容易的可以看出TCP的断开连接是从一个FIN包开始,这个过程经历了FIN-ACK-FIN-ACK的四次交互,这个过程也叫做TCP连接的四次挥手断开连接。如: ① 主动关闭的一方首先发送 序
2015-10-23 18:09:08
1022
原创 TCP建立连接为什么是三次握手?
我们都知道TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP也是日常通讯中用的最广泛的一种协议,TCP的连接需要三次握手,断开连接需要四次挥手,那么TCP的连接过程为什么是三次握手而不是两次或者四次呢? 根据《UNIX网络编程》所述的TCP状态转换变迁图所示: 从状态转换图我们可以看出TCP的连接建立经历了 SYN----SYN+ACK-----ACK的过
2015-10-20 11:16:17
2651
原创 无聊写排序之 ----第K最值(nth_element)
之前partial_sort有讲述了如果从一个无序序列中快速获得top m的所有有序数列m个。我们也常常会遇到这样的问题:如何在一个乱序的序列集合中,找到第K大的或者排名第K的那个元素?或者找到前K个排名的元素,但是这K个数之间的顺序对我们来说并不重要。比如篮球比赛中总胜利场数最多的20支球队进入总决赛,而这20支球队之前各自胜利多少的排名并不重要,因为决赛要重新比。 这个问题我们同样可以用排
2015-07-28 17:51:12
972
1
原创 无聊写排序之 ----部分排序(Partial Sort)
当有一个无序的序列集合的时候,我们想知道这个序列里面按照某种排序关系最大的m个或者前top个有序的元素。比如我又100个学生,我只想知道排名前20的学生的名次列表,剩余的我并不关心,如何去得到呢? 当然你脑海中第一个闪过的便是sort,做一次排序,取排序后前面的20不就好了吗? 没错,排序作为做常规的方法,肯定是最先想到的,这里要介绍的是比排序来的更快更直接的一个算法:部分排序(partial_s
2015-07-28 16:43:06
6823
原创 后缀数组(SuffixArray) 学习笔记
后缀数组 前面有介绍过后缀树,后缀树对于我们针对某些字符串的处理使得如鱼得水,美中不足的是后缀树的代码实现复杂,只能让很多人望而却步。这次我们来介绍后缀树组:一个处理字符串的有力工具,也是一个后缀树的精美替代品,同样可以方便解决很多字符串问题。它比后缀树更加容易实现编码,也可以在不损失效率的情况下实现很多后缀树的功能,占用内存也比后缀树小很多,尤其是在模式匹配数据规模庞大的操作中实用性很
2015-02-11 16:46:22
3203
原创 无聊写排序之 ----基数排序(RadixSort)
基数排序(RadixSort) 基数排序也是一种不需要元素间的比较进行排序的排序算法,而是通过对数据的分配和合并来实现的排序,也叫做桶子法排序,通过对元素按照键值进行分配到指定标准的桶中,在进行合并收集从而达到排序的结果,是一种稳定排序,基数排序的时间复杂度是O(k·n)其中n是排序元素个数,k是数字位数。注意这不是说这个时间复杂度一定优于O(n·log(n)),k的大小取决于数字位的
2015-02-02 17:33:55
622
原创 无聊写排序之 ---- 计数排序(CountingSort)
前面讲过了几种常见的排序方法,比如冒泡,归并,插入,快排等等,这些排序算法的时间复杂度都限制在O(nlogn)的上界。他们所有的排序结果都依赖于各个元素之间的比较来确定,所以我们把这类算法称之为比较排序。今天我们介绍时间复杂度为O(n)上界的排序算法:计数排序。 计数排序假设N个输入元素的每一个都是确定在一个range里面,比如一个整数序列,其中所有的元素都不大于K,当k=O(n)时,
2015-01-30 11:34:31
557
原创 后缀树(SuffixTree)的Ukkonen线性时间构造方法
前面blog讲了后缀树SuffixTree相关的介绍,还有粗暴的平方时间构造法,今天我们来看下后缀树在Ukkonen优化下的线性时间构造方式。本篇博客原文出自地址:http://www.cnblogs.com/gaochundong/p/suffix_tree.html 在此基础上做了小幅度的改动,特此说明。Suffix Tree 与 Trie 的不同在于,边(Edge)不再只代表
2015-01-27 16:02:12
1779
原创 后缀树介绍-Suffix Tree
前面的文章中有讲解了模式匹配相关的KMP和TrieTree,他们有各自的方式去提高性能,从而也应用在不同的场景中,这一次我们讲解后缀树(SuffixTree),相信如果没有专门去看过这些知识的同学应该很少知道后缀树,那么后缀树到底是什么,他能解决什么样的问题呢? 后缀树(SuffixTree)一种数据结构,通过对一个字符串所有后缀操作构建一棵树,可以支持字符串的快速匹配查询,他对于以下几
2015-01-23 18:48:25
5509
原创 Trie-tree (字典树)
假设给你一个敏感词汇表, 然后让你把一篇文章里的敏感词汇都找出来,以便于验证当前文章是否都满足没有敏感词汇要求,你会怎么办? 最容易想到的便是将文章里的每一个单词都拿去在敏感词汇表中查找是否存在,这样当文章词汇很大的时候,查找算法便成为了一个瓶颈。你可以使用最简单的做个单词匹配,也可以先将词汇表按字典排个序来加速查找匹配的过程,当然你也会想到利用红黑树,hash表,splay树来做优化。我们这里介
2014-11-26 16:13:47
858
原创 无聊写排序之 ---- 归并排序(MergeSort) 非递归实现
前面讲了归并排序的递归实现,虽然递归实现代码简洁容易理解,但是在实际执行中由于
2014-10-29 11:09:40
2705
原创 无聊写排序之 ---- 堆排序(HeadSort)
还记得之前说的选择排序么?忘记了看这里选择排序>。 选择排序i时,我们需要从n-i+1个序列中选择一个最小的数字, 那么势必就要比较多次来寻找到最小的那一个元素从而来进行排序,这种排序虽然相对于冒泡排序有效的减少了交换所带来的开销,但是多次比较对于比较的结果却没有进行记录,当排序第1个数字的时候需要从第1.....n中找到最小的数字进行和第1个进行比较交换,当我们需要排序第2个数字时,同样需要将上
2014-10-24 14:03:32
913
原创 无聊写排序之 ---- 希尔排序(ShellSort)
之前我们讲了插入排序,它的效率在某些时候是很高的,比如,我们的记录本身就是基本有序的,我们只需要少量的插入操作,就可以完成整个记录集的排序工作,此时直接插入很高效。还有就是记录数比较少时,直接插入的优势也比较明显。可问题在于,两个条件本身就过于苛刻,现实中记录少或者基本有序都属于特殊情况。 不过别急,有条件当然是好,条件不存在,我们创造条件,也是可以去做的。于是科学家希尔研究出了
2014-10-23 11:12:34
487
原创 静态链表的实现 部分完善
上一篇静态链表的博客转载部分, 原稿则是出自一书, 有兴趣的可以去参考这本书,很适合初学者进行学习。以下部分是自己的代码实现,原因是觉得原文中有部分处理的不合理的部分做了相关 修改
2014-08-13 16:27:13
483
转载 静态链表
静态链表 静态链表相当于是用一个数组来实现线性表的链式存储结构,大概结构图如下 在静态链表中,每一个结点包含两部分内容,一部分是data(即有意义的数据),另一部分是cur(存储该元素下一个元素所在数组对应的下标)。有几个特殊的结点:首先是下标为0的结点中不包含有意义的数据,它的cur存储的是备用链表
2014-08-13 16:23:31
503
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人