摘要:
近期在写一个正文抽取的程序,基于linux平台C++,大体流程从网页获取-->网页解析-->构建变种dom树-->正文抽取算法-->结构化输出。 目前已经完成了第一个功能,调试第二、三个功能,由于互联网上的页面很多由“无证”程序员完成,所以很不规范,需要进行一些容错处理,所以比较耗时间,而且,由于之前对编码格式不了解,在解析时,对我来说编码格式的转换也是一个难题,不过应该会在不断的学习过程中慢慢解决,也算是弥补一下技术缺陷。 网页获取可以用curl库完成,很简单,主要有四个函数: 1.CURL *curl_easy_init( ) This function must 阅读全文
摘要:
Squid研究记录Squid cache(简称为Squid)是一个流行的自由软件(GNU通用公共许可证)的代理服务器和Web缓存服务器。Squid有广泛的用途,从作为网页服务器的前置cache服务器缓存相关请求来提高Web服务器的速度,到为一组人共享网络资源而缓存万维网,域名系统和其他网络搜索,到通过过滤流量帮助网络安全,到局域网通过代理上网。Squid主要设计用于在Unix一类系统运行。 Squid的发展历史相当悠久,功能也相当完善。除了HTTP外,对于FTP与HTTPS的支援也相当好,在3.0 测试版中也支援了IPv6。 ----摘自“开源中国社区”下面是从安装,到配置的整个过程,并对.. 阅读全文
摘要:
Nginx(发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,最初供俄国大型的入口网站及搜寻引擎Rambler(俄文:Рамблер)使用。 其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页伺服器中表现较好.目前中国大陆使用nginx网站用户有:新浪、网易、腾讯,另外知名的微网志Plurk也使用nginx。 ----摘自“开源中国社区”下面是从安装,到配置的整个过程,并对其中的一些参数进行粗浅的解释1、下载安装 先. 阅读全文
摘要:
二项堆(图摘自:http://blog.csdn.net/acceptedxukai/article/details/6951922)一、介绍一颗二项堆是由一组二项树组成。二项树是一种递归的定义:二项树B[0]仅仅包含一个节点B[k]是由两棵B[k-1]二项树组成的,其中一颗树是另一颗树的子树,下面是B0-B4二项树:图:二项树二项树的性质:对于二项树B[k]有2^k个节点在深度为i的层中,有才C(k,i)个节点,其中i为0,1,2...k根节点的度数为k,大于树中任何其它节点的度数一颗包含n个节点的二项树,任意节点的最大度数为lgn二项堆H是由一组满足下面条件的二项树组成的:H中的每个二项树 阅读全文
摘要:
R树在数据库等领域做出的功绩是非常显著的。它很好的解决了在高维空间搜索等问题。举个R树在现实领域中能够解决的例子吧:查找20英里以内所有的餐厅。如果没有R树你会怎么解决?一般情况下我们会把餐厅的坐标(x,y)分为两个字段存放在数据库中,一个字段记录经度,另一个字段记录纬度。这样的话我们就需要遍历所有的餐厅获取其位置信息,然后计算是否满足要求。如果一个地区有100家餐厅的话,我们就要进行100次位置计算操作了,如果应用到谷歌地图这种超大数据库中,我想这种方法肯定不可行吧。R树就很好的解决了这种高维空间搜索问题。它把B树的思想很好的扩展到了多维空间,采用了B树分割空间的思想,并在添加、删除操作时采 阅读全文
摘要:
B树及其衍生树一、B树1. 介绍B树与其它几种查找树(二叉查找树、AVL树和红黑树)不同,它每个节点最多有N个子节点而不是两个子节点,所以,它的高度是,而不是其它几种树的。B树是用来为磁盘而设计的数据结构,它区别于针对随机存取的贮存而设计的数据结构。因为磁盘的IO操作比较耗时,大概比主存存取大5个数量级,也就是说,一次磁盘存取大概的时间可以使主存完成大概100000次的存取。图:B树-每个内节点有1000关键字上图可以看出,一个B树,每个结点有1000个关键字,高度为2,就能包含10亿个关键字,只有根节点存在主存中,查找一个关键字只需要最多读取两次磁盘就能完成查找。图:B树的结构图B树是由有序 阅读全文
摘要:
#include <iostream.h>#include <stdlib.h>#include <stdio.h>using namespace std;//冒泡排序 O(n^2)---稳定冒泡排序将被排序的记录数组R[1..n]垂直排列,每个记录R[i]看作是重量为ki的气泡。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R;凡扫描到违反本原则的轻气泡,就使其向上"漂浮"。如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止。void BubbleSort(int *arr, int len){ bool changed 阅读全文
摘要:
一、 最长公共子序列1. 问题通过比较公共子序列的长度来判断两个序列是否相似,如ABCBCDA和ACBCCAD的最长公共子序列为ABCCD。现在有两个序列和,找出X和Y的最长公共子序列(LCS)。2. 子问题拆分这个问题就是求所有公共序列,然后找出最长的那个,而如何计算序列的长度,就是一个递归的过程了,公式如下: 这个问题是几个动态规划问题中最好理解的一个,是一个二维遍历标记的过程,最后再遍历一遍标记就能获得结果,不再赘述,直接看伪代码。3. 伪代码LCS-LENGTH(X, Y) m <- length[X] n <- length[Y] for i <- 1 to m . 阅读全文
摘要:
信号(signal) 信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。 信号是进程间通信机制中唯一的异步通信机制,可以看作是异步通知,通知接收信号的进程有哪些事情发生了。信号机制经过POSIX实时扩展后,功能更加强大,除了基本通知功能外,还可以传递附加信息。 信号事件的发生有两个来源:硬件来源(比如我们按下了键盘或者其它硬件故障);软件来源,最常用发送信号的系统函数是kill, raise, alarm和setitimer以及si... 阅读全文
摘要:
一、 XSI IPC1. 介绍XSI IPC包括消息队列、信号量和共享内存,它们都用一个非负的标示符(identifier)加以引用。标识符是IPC对象的内部名,为了使进程间能够在同一个IPC上相连,就要有一个外部名。键(key)就是这个外部名,每个IPC对象都与一个键相关联。 几种使客户进程与服务进程关联的方法(1) 服务进程可以指定键IPC_PRIVATE创建一个新IPC结构,将返回的标识符存在某处(如:一个文件)以便客户进程读取。注意:使用IPC_PRIVATE只能是创建一个新IPC,且只有服务进程将标识符写到文件中后,客户进程才能获取到。(2) 在公用都文件中定义一个客户进程和服务进. 阅读全文