2013年8月2日

线段树学习

摘要: 1、概述 线段树,也叫区间树,是一个完全二叉树,它在各个节点保存一条线段(即"子数组"),因而常用于解决数列维护问题,它基本能保证每个操作的复杂度为O(lgN)。 线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。 对于线段树中的每一个非叶子节点[a,b],它的左儿子表示的区间为[a,(a+b)/2],右儿子表示... 阅读全文

posted @ 2013-08-02 18:49 零风腾飞 阅读(664) 评论(0) 推荐(0) 编辑

二叉树的非递归遍历

摘要: 二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有前序、中序以及后序三种遍历方法。因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁。而对于树的遍历若采用非递归的方法,就要采用栈去模拟实现。在三种遍历中,前序和中序遍历的非递归算法都很容易实现,非递归后序遍历实现起来相对来说要难一点。一.前序遍历 前序遍历按... 阅读全文

posted @ 2013-08-02 18:48 零风腾飞 阅读(243) 评论(0) 推荐(0) 编辑

[转+整理]十道海量数据处理面试题与十个方法大总结

摘要: 海量数据处理:十道面试题与十个海量数据处理方法总结 作者:July、youwang、yanxionglu。时间:二零一一年三月二十六日本文之总结:教你如何迅速秒杀掉:99%的海量数据处理面试题。有任何问题,欢迎随时交流、指正。 出处:http://blog.csdn.net/v_JULY_v。 第一部分、十道海量数据处理面试题 1、海量日志数据,提取出某日访问百度次... 阅读全文

posted @ 2013-08-02 18:37 零风腾飞 阅读(293) 评论(0) 推荐(0) 编辑

memcopy 和 memmove 的实现

摘要: 一 memcopy 的实现 memcopy 不考虑源内存和目标内存之间的重叠, 逐字节地拷贝, 代码比较简单C代码 voidmy_memcopy(void*src,void*dst,intsize) {char*psrc,*pdst; psrc=(char*)src;pdst=(char*)dst;while... 阅读全文

posted @ 2013-08-02 18:35 零风腾飞 阅读(428) 评论(0) 推荐(0) 编辑

[转]BM 算法中“好后缀”预处理

摘要: 其实上次在写 BM 算法的原理时,应该把如何实现"好后缀"的预处理一起写上,只是因为急着出去,没有写清楚,只是一带而过,现在把预处理们仔细写一下,希望和对字符串处理技术感兴趣的朋友们探讨。当然,对于 BM 算法还有许多需要思考的,比如证明它的时间复杂度最坏是 O(m)等等问题,并不是一句话就能说明白的。 在上一篇文章中(精确字符串匹配(BM算法))提到了 L(i),它是用来存储 t' ... 阅读全文

posted @ 2013-08-02 18:34 零风腾飞 阅读(834) 评论(0) 推荐(0) 编辑

[转]精确字符串匹配(BM算法)

摘要: 上一篇文章介绍了精确字符串匹配的 Zbox 算法,这是一种线性时间复杂度的算法。在这篇文章里,将简要介绍精确字符串匹配的 Boyer-Moore(BM) 算法,这种算法的时间复杂度低于线性,所以是现在用的最多的一种方法。所谓精确字符串匹配问题,是在文本 T 中找到所有与查询P 精确匹配的子串。而 BM 算法可以非常有效地解决这个问题,让时间复杂度降到低于线形的水平。 BM 算法主要用了... 阅读全文

posted @ 2013-08-02 18:33 零风腾飞 阅读(433) 评论(0) 推荐(0) 编辑

[转]字符串匹配那些事

摘要: 本系列文章主要介绍几种常用的字符串比较算法,包括但不限于蛮力匹配算法,KMP算法,BM算法,Horspool算法,Sunday算法,fastsearch算法,KR算法等等。本文主要介绍KMP算法和BM算法,它们分别是前缀匹配和后缀匹配的经典算法。所谓前缀匹配是指:模式串和母串的比较从左到右,模式串的移动也是从左到右;所谓后缀匹配是指:模式串和母串的的比较从右到左,模式串的移动从左到右。看得出来前缀... 阅读全文

posted @ 2013-08-02 18:32 零风腾飞 阅读(344) 评论(0) 推荐(0) 编辑

BM模式匹配算法原理(图解)

摘要: BM模式匹配算法原理(图解) 首先,先简单说明一下有关BM算法的一些基本概念。BM算法是一种精确字符串匹配算法(区别于模糊匹配)。BM算法采用从右向左比较 的方法,同时应用到了两种启发式规则,即坏字符规则 和好后缀规则 ,来决定向右跳跃的距离。BM算法的基本流程: 设文本串T,模式串为P。首先将T与P进行左对齐,然后进行从右向左比较 ,如下图所示: 若是某趟比较不匹配时,BM算法就... 阅读全文

posted @ 2013-08-02 18:31 零风腾飞 阅读(10068) 评论(0) 推荐(0) 编辑

分享一下字符串匹配BM算法学习心得

摘要: [转]分享一下字符串匹配BM算法学习心得。 字符串匹配BM(Boyer-Moore)算法学习心得 BM算法是Boyer-Moore算法的缩写,是一种基于后缀比较的模式串匹配算法。BM算法在最坏情况下可以做到线性的,平均情况下是亚线性的(即低于线性)。这也是他在实际应用中优于KMP算法的一个原因吧。最近突然在看[柔性字符串匹配].[Flexible.Pattern.Matching.in.... 阅读全文

posted @ 2013-08-02 18:30 零风腾飞 阅读(849) 评论(0) 推荐(0) 编辑

KMP算法

摘要: KMP算法 在介绍KMP算法之前,先介绍一下BF算法。一.BF算法 BF算法是普通的模式匹配,BF算法的思想就是将目标串S的第一个字符与模式串P的第一个字符进行匹配,若相等,则继续比较S的第二个字符和P的第二个字符;若不相等,则比较S的第二个字符... 阅读全文

posted @ 2013-08-02 18:29 零风腾飞 阅读(395) 评论(0) 推荐(0) 编辑

算法导论学习笔记(五):快速排序

摘要: 2013年8月2日 15:41 快速排序是一种最坏情况运行时间为O(n*n),虽然这个最坏情况运行时间比较差,但快速排序通常都是用于排序的最 佳的实用选择,这是因为其平均性能相当好:期望的运行时间为O(nlgn),且O(nlgn)记号中隐含的常数因子很小。另 外,它还能够进行就地排序。 快速排序和合并排序一样,采用的都是分治思想。快排中利用该思想解决步骤为: 1、先从数组中取出一个数作为基数,基数的选择对排序效率的影响很大 2、分区,将比这个基数小的数全部放到它的左边,比基数大的数全部放到其右边 3、对左右两个区间重复第二步,直到每个区间只有一个数 下面结合代码来进一步理解快速排序。算法... 阅读全文

posted @ 2013-08-02 18:28 零风腾飞 阅读(262) 评论(0) 推荐(0) 编辑

算法导论学习笔记(四):求X的N次方的二分实现

摘要: 今天在看到网易里的算法导论的公开课,听到老外讲分治法时提到了下算一个数的N次方的可以通过二分思想来实 现,于是便想自己写个代码来实现它。虽然很简单,还是想写在博客中。一是可以加深自己的印象,以后遇到这类问 题时可以马上想到用二分来解决;二是可以方便以后的复习,再次用到的时候可以直接来这找模板。 [cpp]view plaincopyprint? #include usin... 阅读全文

posted @ 2013-08-02 18:26 零风腾飞 阅读(470) 评论(0) 推荐(0) 编辑

算法导论学习笔记(三):堆排序

摘要: 堆排序是一种利用堆的性质进行的排序算法。所以学习堆排序之前先来简单介绍下堆。堆堆数据结构是一种数组对象,如图一所示,它可以被视为一颗完全二叉树。 图一树中的每个结点与数组中存放该结点值的那个元素对应。树的每一层都是填满的,最后一层可能除外。如果树的结点和数组的下标都从0开始,那么给定了某个结点的下标i,其父节点PARENT(i)、左儿子LEFT(i)和右儿子RIGHT(i)的下标可以简... 阅读全文

posted @ 2013-08-02 18:25 零风腾飞 阅读(299) 评论(0) 推荐(0) 编辑

算法导论学习笔记(一):插入排序

摘要: 插入排序: 插入排序的大概步骤是从第二个元素开始遍历,当遍历到第N个元素时,前面N - 1个元素都已经排好序了,然后查找 前面排好序的N - 1个元素,将第N个元素插入到适当的位置。也就是说插入排序实现有两个关键点:如何保证遍历到 当前元素时,前面的元素是已经排好序的、怎么将元素插入到适当的位置。下面就以将元素升序排序来说明。 首先,先来解决第一个问题,即保证遍历到当前元素时,前面的... 阅读全文

posted @ 2013-08-02 18:24 零风腾飞 阅读(254) 评论(0) 推荐(0) 编辑

冒泡排序

摘要: #include #include void bubble_sort(int a[], int size);void print_array(int a[], int size);int main(){int size;int i;int *a;printf("input the size of array: size = \n");scanf("%d",&size);a = (int *)mal... 阅读全文

posted @ 2013-08-02 18:23 零风腾飞 阅读(147) 评论(0) 推荐(0) 编辑

书单

摘要: C语言升级必读 2013-06-06 13:39:01添加1.C程序设计语言 作者: (美)Brian W. Kernighan/(美)Dennis M. Ritchie 出版社: 机械工业出版社> 修改或移动> 删除 加入购书单2013-06-06 13:39:24添加2.C和指针 作者: Kenneth A.Reek 出版... 阅读全文

posted @ 2013-08-02 18:18 零风腾飞 阅读(175) 评论(0) 推荐(0) 编辑

23设计模式彩图

摘要: 阅读全文

posted @ 2013-08-02 17:59 零风腾飞 阅读(205) 评论(0) 推荐(0) 编辑

常用设计模式

摘要: Factory模式//Product.h#ifndef _PRODUCT_H_#define _PRODUCT_H_class Product{public: virtual ~Product() = 0;protected: Product();};class ConcreteProduct:public Product{public:... 阅读全文

posted @ 2013-08-02 17:58 零风腾飞 阅读(162) 评论(0) 推荐(0) 编辑

设计模式(一)工厂模式Factory(创建型)

摘要: 设计模式一 工厂模式Factory 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的。但是在一些情况下, new操作符直接生成对象会带来一些问题。举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之前必须先生成一些辅助功能的对象。 ... 阅读全文

posted @ 2013-08-02 17:57 零风腾飞 阅读(204) 评论(0) 推荐(0) 编辑

C语言文件读写操作总结

摘要: C语言文件操作 一、标准文件的读写 1.文件的打开 fopen() 文件的打开操作表示将给用户指定的文件在内存分配一个FILE结构区,并将该结构的指针返回给用户程序,以后用户程序就可用此FILE指针来实现对指定文件的存取操作了。当使用打开函数时,必须给出文件名、文件操作方式(读、写或读写),如果该文件名不存在,就意味着建立(只对写文件而言,对读文件则出错),并将文件指针指向文件开头。若已有... 阅读全文

posted @ 2013-08-02 17:55 零风腾飞 阅读(4920) 评论(0) 推荐(0) 编辑

导航