自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 收藏
  • 关注

原创 PYTHON抓取网页中的邮箱

主要用到urllib和re模块,代码很简单:#!usr/bin/python#Filename:GetEmail.py#Written by 蒋文豪#2013/03/26import urllib.requestimport reimport timeprint('该脚本可用于获取百度贴吧的帖子中的Email地址,获取后保存在D:\Email.txt中,可能需要权限创建这个文件,

2013-03-26 16:21:19 1901

原创 生产者消费者问题的信号量解法

生产者消费者问题,也称为有限缓冲问题,是一个多进程(线程)间同步问题的经典案例,即生产者生成数据放到缓冲区,消费者从缓冲区消费数据的过程中如何同步的问题。由于缓冲区有限,问题的关键在于,缓冲区满时生产者不能放,而缓冲区空时消费者不能取,更多描述请猛击生产者消费者问题。关于该问题,有很多种解法,比较好的解法有信号量(互斥量)、先进先出的消息队列、管程(编程语言级别的概念)等,这里简单介绍下信号量

2013-03-17 10:47:58 1421

原创 KMP算法理解

在编程中经常有用到字符串匹配的地方,最平凡的解法,自然是利用双重循环,解法时间复杂度O(nm),而KMP算法则只需要O(n)的运行和O(m)的预处理时间。        平凡的算法当主串和子串匹配到一半失败时,两个指针都必须回溯,而KMP算法则巧妙地消除了主串指针的回溯。        假设要在主串“ACACACBAD"中”匹配子串“ACAA”:当比较到第四个字符时失败:ACACA

2013-03-15 17:56:38 510

原创 基本数据结构——二叉查找树

二叉查找树又称为二叉排序树,他要么是一颗空树,要么满足以下性质:(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3)左、右子树也分别为二叉查找树;        值得注意两点:对于同一个序列,二叉查找树并不唯一,这使得二叉查找树基本操作的最坏情况运行时间在O(logN)到O(N)(当选择最小或最

2012-12-10 21:43:35 301

转载 裘宗燕:C/C++ 语言中的表达式求值

【博主注】ISO C++03中关于求值顺序的规定:                    Except where noted, the order of evaluation of operands of individual operators and subexpressions of individual expressions, and the order in which si

2012-12-06 12:50:34 447

原创 基本数据结构——散列表(hash表)

说到散列表,在《IA》第11章有着无与伦比的讲解。《IA》这本书除了第五和第七部分之外我看了第三遍了,每次都只能感慨,THOMAS H.CORMEN、CHARLES E.LEISERSON、RONALD L.RIVEST、CLIFFORD STEIN这四位大师讲解的太完美了,无法想象仅仅700页的一本书居然包含了这么多东西,短短数言就能将一个问题讲解的非常透彻,而且其中过于深入的数学论证并非一定要

2012-12-03 19:40:55 507

原创 基本数据结构——关于单链表相交的几个问题

《编程之美》3.6的问题即“变成判断两个单链表是否相交”      1、第一种情况,假设两个都不带环。       法1、双重循环                 即对于链表1中的每一个节点,判断其是否在链表2中,时间复杂度O(length1*length2),空间复杂度O(1)。       法2、hash法                 对第一个链表的每一个节点的地址进行

2012-12-03 15:33:13 435

原创 基本数据结构——栈、队列和单链表

按照《IA》的说法,基本数据结构还包括有根树,但我这里想把这三个单独拿出来总结,有根树放在二叉查找树、红黑树和字典树这样的实例中总结。    栈、队列和单链表,都属于线性表的内容,都具有线性结构的特点,其形式化的表述为:    1、存在唯一的一个被称为“第一个”的数据元素;    2、存在唯一的一个被称为“最后一个”的数据元素;    3、除第一个之外,集合中的每个数据元素均只有一

2012-12-03 14:32:50 586

原创 基本排序算法(4)——堆排序

不知不觉,基本排序算法写到4了,应该是比较法排序的最后一篇,选择排序和冒泡排序就不单独总结了。       堆排序,似乎放在数据结构里面总结更好一些,因为涉及到堆这种数据结构来管理算法执行中的信息,堆排序达到了比较排序的时间下限O(NlogN),空间复杂度只有O(1).       堆是一个必须掌握的数据结构,一般用数组来表示,表示堆的数组A是一个具有两个属性的对象,length[A]表示

2012-11-29 21:27:00 265

原创 基本排序算法(3)——关于分治法及归并排序

在上一篇文章中,我们提到QuickSort是基于分治法的,那么这一篇来介绍下分治法和归并排序。   分治法,就是把一个复杂的问题分割成两个或多个子问题,直到各个子问题的规模可以简单地求解,从而各个击破,然后再把结果整合。一般来讲,复杂度随问题规模上升的速度经常是N2、N3 甚至是 2N这种指数级别,而把结果整合起来大多数可以达到N甚至是常数(如选择TOP1)。        确切的说,分治

2012-11-29 19:44:59 325

原创 基本排序算法(2)——快速排序

前面介绍了直接插入排序和shell排序基本排序算法(1)—插入排序及其变形shell排序,直接插入排序的时间复杂度为平方级,shell排序的时间复杂度较好,为O(nlog2 n),但这并非排序算法中效率最高的,理论上基于比较的排序算法,时间复杂度最低可以达到O(nlog n),本文所分析的快速排序,在平均情况下可以达到O(nlog n)。    快速排序基于分治法,对给定的一个数组(a1,

2012-11-29 15:48:00 318

原创 基本排序算法(1)—插入排序及其变形shell排序

简略地讲,排序问题是指对输入的一个序列(a1,a2,a3......an),按照升序或者降序输出其中的元素或返回排序好后的序列。     第一次当然是经典的插入排序,这个几乎是每一个接触排序的程序猿看到的第一个排序算法了吧。     插入排序的原理非常简单,并且当问题规模较小或者基本有序时效率很高。按照《Introduction to Algorithms》的说法,插入排序的工作机理与打牌

2012-11-29 10:19:37 414

原创 动态规划学习笔记2(最长公共子序列)

最长公共子序列(LCS)是衡量两个序列的相似度的一种方式,其形式化定义可见《Introduction to Algorithms》Page 209。    注意到子序列和子串的区别,子序列中的元素在原序列中可以使不连续的,亦即,对于任意序列(x1,x2,x3......xm),可选择每一个元素是否在其子序列中,从而共有2的m次方个子序列,因为对于任一元素xi(0    对给出的两个序列,(

2012-11-28 16:13:52 355

原创 动态规划(学习笔记)

本人学生一枚,2014年3月份毕业,近期由于兴趣使然,借着几大电商图书促销,淘了十来本程序员的书籍,在看《Introductin to Algorithms》、《编程珠玑》、《编程之美》后,深深地认识到之前对算法和数据结构认识之浅薄,也学习到很多,于是做此笔记。比较随意,现在刚刚看完动态规划和贪心,就随手记下吧。     动态规划(dynamic programming)诞生于上世纪50年

2012-11-22 18:00:34 347

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除