代码改变世界

Web搜索引擎工作原理和体系结构

2011-05-12 20:46 by Aga.J, 2997 阅读, 0 推荐, 收藏, 编辑
摘要:1 现代大规模高质量搜索引擎一般采用三段式工作流程: 搜集 --- 预处理 --- 服务 2 搜集:在具体搜集过程中,如果抓取一篇篇的网页,也可以有不同的考虑。最常见的一种是所谓的“爬取”:将Web上的网页集合看成是一个有向图,搜集过程从给定的起始URL集合S开始,沿着网页中的链接,按照先深,先宽,或者某种策略遍历,不停的从S中移除URL,下载相应的网页,解析出网页中的超链接URL,看是否已经被访问过,将未访问过的那些URL加入到集合S,继续抓取直到S为空。3 搜集:搜集到的网页应该是相对比较重要的,所以在不可能将web上的网页搜集完全的情况下,使用先宽搜索方式要比先深搜索得到的网页集合重要, 阅读全文

【好文要转】 C#中的析构函数

2011-05-09 16:06 by Aga.J, 377 阅读, 0 推荐, 收藏, 编辑
摘要:文章出处:ミ咯咯①笑。 的 C#中的析构函数析构函数 析构函数(destructor) 与构造函数相反,当对象脱离其作用域时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做“清理善后” 的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放)。以C++语言为例,析构函数名也应与类名相同,只是在函数名前面加一个波浪符~,例如~stud( ),以区别于构造函数。它不能带任何参数,也没有返回值(包括void类型)。只能有一个析构函数,不能重载。如果用户没有编写析构函数,编译系统会自动生成一个缺省的析构函数,它也不进行任何操作。所以许多简 阅读全文

C++的new为什么那么"新"?

2011-04-25 14:55 by Aga.J, 415 阅读, 0 推荐, 收藏, 编辑
摘要:转自http://www.builder.com.cn/2008/0104/696370.shtml(它也是转的。。)“new”是C++的一个关键字,同时也是操作符。关于new的话题非常多,因为它确实比较复杂,也非常神秘,下面我将把我了解到的与new有关的内容做一个总结。new的过程当我们使用关键字new在堆上动态创建一个对象时,它实际上做了三件事:获得一块内存空间、调用构造函数、返回正确的指针。当然,如果我们创建的是简单类型的变量,那么第二步会被省略。假如我们定义了如下一个类A:class A { int i; public: A(int _i) :i(_i*_i) {} void Say( 阅读全文

C++中include头文件到底会发生什么事?

2011-04-24 20:50 by Aga.J, 680 阅读, 0 推荐, 收藏, 编辑
摘要:当xx.c文件在被编译的时候,第一步要做的就是预处理,而我们知道预处理会处理宏定义,条件编译,和头文件。但是到底是如何处理头文件的呢?预处理的最终结果可以看做是把头文件中的所有内容都放到xx.c文件中(当然这个是个递归过程)。这样一来,编译会花费更加长的时间,因为在编译器最终分析final.c的文件中的词法和语法时,它需要从头到尾一行一行的处理,所以xx.c文件中的真正需要执行的代码,可能需要经过很多行无效的处理后才到达。这样也提示我们不要随便将c文件需要的头文件include放在其对应的h文件中,这样会使得其他c文件include该h文件时带来不必要的开销。 更加详细的内容,请看这个博客h. 阅读全文

字符串匹配算法之Sunday算法的学习笔记

2011-04-24 19:56 by Aga.J, 1880 阅读, 2 推荐, 收藏, 编辑
摘要:Sunday算法是一种比KMP和BM更加高效的匹配算法,它的思想跟BM算法相似,在匹配进行时,Sunday算法失败时关注的是源字符串中当前参加匹配的长度为M(模式串的长度)的最后一位字符的下一个字符。如果该字符不在模式串中出现,那么就将直接跳过,即移动步长=模式串的长度+1,否则,则移动步长=模式串中最右端的该字符到末尾的距离加1。 假设我们要匹配”HERE IS A SIMPLE EXAMPLE”和”EXAMPLE” Text: HERE IS A SIMPLE EXAMPLE Pattern:EXAMPLE 我们从源串的初始位置开始和模式串比较,发现第一个就不匹配了,这时候如果使用. 阅读全文

平衡二叉树之AVL树的学习比较

2011-04-19 12:01 by Aga.J, 1146 阅读, 0 推荐, 收藏, 编辑
摘要:平衡二叉树(这里就不解释了):给予不同的平衡条件,造就出不同的效率表现,以及不同的实现复杂度,AVL ,RB, AA都是一种平衡二叉树,因为维护平衡,所以插入和删除节点的平均时间长了,但是可以避免不平衡的情况,所以元素的搜寻访问时间短了!而最直观的平衡条件是整棵树的深度为logN,也就是说要求每个节点的左右子树有相同的高度(递归定义的结果就是该树的叶子节点都在同一层上!) 接下来是AVL树 : AVL树,原名是Adelson-Velskii-Landis tree,它没有像上述那个条件要求那么苛刻,它允许任何节点的左右子树的高度相差1,(递归定义的结构就是该树的叶子节点只可以在最后一层和倒数. 阅读全文

字符串匹配算法Rabin-Karp 算法的学习笔记

2011-04-16 22:11 by Aga.J, 989 阅读, 2 推荐, 收藏, 编辑
摘要:该算法的思想是,通过对模式字符串进行hash运算,同时对源字符串取长度跟模式字符串相等的子字符串也进行hash运算,最后比较hash值来确定模式字符串是否和源字符串的子串匹配,并获得其匹配起始位置。 什么叫做hash运算呢?把串看作是字符集(这个串中的字符是属于某个字符集的)长度进制的数(比如数字串'’123”的字符集就是0到9,属于10进制,将数字串转换为相应的10进制数进行比较),由“数”的比较得出字符串的比较结果。例如,给定字符集为∑ ={0,1,2,3,4,5,6,7,8,9} ,∑长度为 d=10 ,那么任何以∑为字符集的串都可看作 d (此处为 10 )进制的数。 设模式串 阅读全文

最长公共子串算法的学习笔记

2011-04-16 20:01 by Aga.J, 446 阅读, 0 推荐, 收藏, 编辑
摘要:Longest Common Subsequence最长公共子串算法原理:1 将两个字符串分别以行和列组成矩阵2 计算每个节点的行和列的字符是否相同,如果相同则为13 通过找出值为1的最长对角线就可以得到最长公共子串(在第3步中可以这样优化算法,就是把相同字符所在的位置的值加上左上角d[i-1][j-1]的值,这样就可以获得最长公共子串的长度,更可以得到公共子串是什么)这个算法的原理很浅显易懂,很快理解为什么可以这样做,所以这里就不赘述了。直接贴出来自网络的参考代码。public static string LCS(string s1,string s2){if(s1==s2)return s 阅读全文

字符串相似度算法《Levenshtein Distance》的学习笔记

2011-04-16 00:51 by Aga.J, 3223 阅读, 1 推荐, 收藏, 编辑
摘要:今天在这个博客中http://www.cppblog.com/whncpp/archive/2008/09/21/62378.html看到了这样的一个问题: 一个字符串可以通过“增加一个字符”,“删除一个字符”,“替换一个字符”,从而得到另一个字符串,假设我们从字符串A转换为字符串B,前面3种操作所执行的最少次数就是A和B的相似度。求该最小次数。 如 abc adc 度为 1 ababababa babababab 度为 2 abcd acdb 度为2 那是相当有趣啊,哈哈,博客中介绍了这个问题最常用的解决算法--Levenshtein Distance,下面就来介绍下这个算法如何来解决这个. 阅读全文

分治算法的学习笔记

2011-04-14 00:22 by Aga.J, 691 阅读, 0 推荐, 收藏, 编辑
摘要:分治算法一个简单的可以利用分治思想来解决的问题是在一个一维数组中找到最大值和最小值,最暴力的做法就是分两次完成,第一次从数组中找到最大值,第二次从数组中找到最小值。这种方法并不高效,比较次数多,而原因是 在选择最大值,最小值的时候是“孤立”的进行的,并不利用上次比较的信息【重点,利用上次比较的信息!】。使用分治法可以避免这个缺点。算法实现如下:Void getMaxAndMin(int list[],int &max, int &min, int low, int high) //low,high是分治的必须{If(low == high ) { max= list[low]; 阅读全文
上一页 1 ··· 5 6 7 8 9 10 11 12 13 ··· 17 下一页