- 博客(14)
- 收藏
- 关注
原创 PYTHON抓取网页中的邮箱
主要用到urllib和re模块,代码很简单:#!usr/bin/python #Filename:GetEmail.py #Written by 蒋文豪 #2013/03/26 import urllib.request import re import time print('该脚本可用于获取百度贴吧的帖子中的Email地址,获取后保存在D:\Email.txt中,可能需要权限创建这个文件,
2013-03-26 16:21:19 1936
原创 生产者消费者问题的信号量解法
生产者消费者问题,也称为有限缓冲问题,是一个多进程(线程)间同步问题的经典案例,即生产者生成数据放到缓冲区,消费者从缓冲区消费数据的过程中如何同步的问题。由于缓冲区有限,问题的关键在于,缓冲区满时生产者不能放,而缓冲区空时消费者不能取,更多描述请猛击生产者消费者问题。 关于该问题,有很多种解法,比较好的解法有信号量(互斥量)、先进先出的消息队列、管程(编程语言级别的概念)等,这里简单介绍下信号量
2013-03-17 10:47:58 1518
原创 KMP算法理解
在编程中经常有用到字符串匹配的地方,最平凡的解法,自然是利用双重循环,解法时间复杂度O(nm),而KMP算法则只需要O(n)的运行和O(m)的预处理时间。 平凡的算法当主串和子串匹配到一半失败时,两个指针都必须回溯,而KMP算法则巧妙地消除了主串指针的回溯。 假设要在主串“ACACACBAD"中”匹配子串“ACAA”: 当比较到第四个字符时失败: ACACA
2013-03-15 17:56:38 531
原创 基本数据结构——二叉查找树
二叉查找树又称为二叉排序树,他要么是一颗空树,要么满足以下性质: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3)左、右子树也分别为二叉查找树; 值得注意两点: 对于同一个序列,二叉查找树并不唯一,这使得二叉查找树基本操作的最坏情况运行时间在O(logN)到O(N)(当选择最小或最
2012-12-10 21:43:35 323
转载 裘宗燕: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 467
原创 基本数据结构——散列表(hash表)
说到散列表,在《IA》第11章有着无与伦比的讲解。《IA》这本书除了第五和第七部分之外我看了第三遍了,每次都只能感慨,THOMAS H.CORMEN、CHARLES E.LEISERSON、RONALD L.RIVEST、CLIFFORD STEIN这四位大师讲解的太完美了,无法想象仅仅700页的一本书居然包含了这么多东西,短短数言就能将一个问题讲解的非常透彻,而且其中过于深入的数学论证并非一定要
2012-12-03 19:40:55 536
原创 基本数据结构——关于单链表相交的几个问题
《编程之美》3.6的问题即“变成判断两个单链表是否相交” 1、第一种情况,假设两个都不带环。 法1、双重循环 即对于链表1中的每一个节点,判断其是否在链表2中,时间复杂度O(length1*length2),空间复杂度O(1)。 法2、hash法 对第一个链表的每一个节点的地址进行
2012-12-03 15:33:13 453
原创 基本数据结构——栈、队列和单链表
按照《IA》的说法,基本数据结构还包括有根树,但我这里想把这三个单独拿出来总结,有根树放在二叉查找树、红黑树和字典树这样的实例中总结。 栈、队列和单链表,都属于线性表的内容,都具有线性结构的特点,其形式化的表述为: 1、存在唯一的一个被称为“第一个”的数据元素; 2、存在唯一的一个被称为“最后一个”的数据元素; 3、除第一个之外,集合中的每个数据元素均只有一
2012-12-03 14:32:50 616
原创 基本排序算法(4)——堆排序
不知不觉,基本排序算法写到4了,应该是比较法排序的最后一篇,选择排序和冒泡排序就不单独总结了。 堆排序,似乎放在数据结构里面总结更好一些,因为涉及到堆这种数据结构来管理算法执行中的信息,堆排序达到了比较排序的时间下限O(NlogN),空间复杂度只有O(1). 堆是一个必须掌握的数据结构,一般用数组来表示,表示堆的数组A是一个具有两个属性的对象,length[A]表示
2012-11-29 21:27:00 287
原创 基本排序算法(3)——关于分治法及归并排序
在上一篇文章中,我们提到QuickSort是基于分治法的,那么这一篇来介绍下分治法和归并排序。 分治法,就是把一个复杂的问题分割成两个或多个子问题,直到各个子问题的规模可以简单地求解,从而各个击破,然后再把结果整合。一般来讲,复杂度随问题规模上升的速度经常是N2、N3 甚至是 2N这种指数级别,而把结果整合起来大多数可以达到N甚至是常数(如选择TOP1)。 确切的说,分治
2012-11-29 19:44:59 354
原创 基本排序算法(2)——快速排序
前面介绍了直接插入排序和shell排序基本排序算法(1)—插入排序及其变形shell排序 ,直接插入排序的时间复杂度为平方级,shell排序的时间复杂度较好,为O(nlog2 n),但这并非排序算法中效率最高的,理论上基于比较的排序算法,时间复杂度最低可以达到O(nlog n),本文所分析的快速排序,在平均情况下可以达到O(nlog n)。 快速排序基于分治法,对给定的一个数组(a1,
2012-11-29 15:48:00 365
原创 基本排序算法(1)—插入排序及其变形shell排序
简略地讲,排序问题是指对输入的一个序列(a1,a2,a3......an),按照升序或者降序输出其中的元素或返回排序好后的序列。 第一次当然是经典的插入排序,这个几乎是每一个接触排序的程序猿看到的第一个排序算法了吧。 插入排序的原理非常简单,并且当问题规模较小或者基本有序时效率很高。按照《Introduction to Algorithms》的说法,插入排序的工作机理与打牌
2012-11-29 10:19:37 439
原创 动态规划学习笔记2(最长公共子序列)
最长公共子序列(LCS)是衡量两个序列的相似度的一种方式,其形式化定义可见《Introduction to Algorithms》Page 209。 注意到子序列和子串的区别,子序列中的元素在原序列中可以使不连续的,亦即,对于任意序列(x1,x2,x3......xm),可选择每一个元素是否在其子序列中,从而共有2的m次方个子序列,因为对于任一元素xi(0 对给出的两个序列,(
2012-11-28 16:13:52 379
原创 动态规划(学习笔记)
本人学生一枚,2014年3月份毕业,近期由于兴趣使然,借着几大电商图书促销,淘了十来本程序员的书籍,在看《Introductin to Algorithms》、《编程珠玑》、《编程之美》后,深深地认识到之前对算法和数据结构认识之浅薄,也学习到很多,于是做此笔记。比较随意,现在刚刚看完动态规划和贪心,就随手记下吧。 动态规划(dynamic programming)诞生于上世纪50年
2012-11-22 18:00:34 370
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人