随笔分类 -  编程

摘要:1. 写在前面 在前三篇博客中,分别介绍了 "钢条切割问题" , "矩阵链乘法问题" ,以及对动态规划问题做了一个 "小结" 。在这篇博客中,将继续介绍一个动态规划问题: 最长公共子序列问题 。 2. 提出问题 我们有时候会遇到比较两个字符串“相似度”的问题,例如:比较给定字符串X和Y的相似度,其中 阅读全文
posted @ 2016-06-08 22:32 学数学的程序猿 阅读(715) 评论(0) 推荐(0) 编辑
摘要:1. 写在前面 我们已经用动态规划的方法解决了两个问题,但可能还是弄不清应该在何时使用动态规划。本篇,我们对动态规划方法做一个总结,重点关注适合应用动态规划方法求解的最优化问题应该具备的两个要素: 最优子结构 和 子问题重叠 。 2. 最优子结构 用动态规划方法求解最优化问题的第一步就是刻画最优解的 阅读全文
posted @ 2016-06-05 14:27 学数学的程序猿 阅读(1120) 评论(0) 推荐(0) 编辑
摘要:写在前面 在上一篇博客中,学习了钢条切割问题。这一篇博客再来学习另一个典型的动态规划问题:矩阵乘法链问题。 提出问题 我们知道,矩阵的乘法是满足结合律的,即对于矩阵A,B,C 满足(A B) C = A (B C) 。不同的结合方式会导致最终所作的乘法总次数不同。 例如:对于矩阵 A(规模为10 x 阅读全文
posted @ 2016-04-28 15:37 学数学的程序猿 阅读(1370) 评论(0) 推荐(0) 编辑
摘要:什么是Base64编码 首先,我们知道,编码的目的一般是为了数据压缩和数据传输的需要。Base64编码的产生就是因为后者:有些网络传送渠道并不支持所有的字节的传输。Base64编码就是一种将二进制数据映射成一些可打印字符(或逆过来)的映射规则,具体的说是映射到[A-Za-z0-9+/]上。比如将字符 阅读全文
posted @ 2016-04-02 22:37 学数学的程序猿 阅读(639) 评论(0) 推荐(0) 编辑
摘要:我们先从两个问题入手,来学习动态规划。 1. 钢条切割问题 1.1 提出问题 某公司想要把一段长度为n的钢条切割成若干段后卖出,目前市场上长度为i(0<i<10,i为整数)的钢条的价格行情如下: 长度i 1 2 3 4 5 6 7 8 9 10 其他 价格pi 1 5 8 9 10 17 17 20 阅读全文
posted @ 2016-03-26 12:49 学数学的程序猿 阅读(1066) 评论(0) 推荐(1) 编辑
摘要:1. 安装 1. 安装 (1) 下载最新gradle压缩包,解压到某处。地址是:Gradle web site; (2) 添加环境变量: 1) 变量名:GRADLE_HOME变量值:刚才解压的地址,如:E:\gradle-2.8。 2) 为Path变量添加一个值:GRADLE_HOME/bin 3) 阅读全文
posted @ 2015-11-17 15:37 学数学的程序猿 阅读(385) 评论(0) 推荐(0) 编辑
摘要:1. 引言 1. 引言 在红黑树——算法导论(15)中学习了红黑树的原理。本来打算自己来试着实现一下,然而在看了JDK(1.8.0)TreeMap的源码后恍然发现原来它就是利用红黑树实现的(很惭愧学了Java这么久,也写过一些小项目,也使用过TreeMap无数次,但到现在才明白它的实现原理)。因此本 阅读全文
posted @ 2015-11-12 22:53 学数学的程序猿 阅读(641) 评论(0) 推荐(0) 编辑
摘要:1. 定义 1. 定义 抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或互相依赖对象的接口,而无需指定它们具体的类。抽象工厂模式又称为Kit 模式,它是一种对象创建型模式。 2. 问题 2. 问题 现有这么一个需求:我们现在要为某软件定制2套皮肤,一套是Sp 阅读全文
posted @ 2015-11-09 20:03 学数学的程序猿 阅读(355) 评论(0) 推荐(0) 编辑
摘要:1. 简单工厂模式 1. 简单工厂模式 在介绍工厂方法模式之前,先介绍一下简单工厂模式。虽然简单工厂模式不属于GoF 23种设计模式,但通常将它作为学习其他工厂模式的入门,并且在实际开发中使用的也较为频繁。 (1) 定义 简单工厂模式(Simple Factory Pattern):定义一个工厂类, 阅读全文
posted @ 2015-11-05 15:16 学数学的程序猿 阅读(619) 评论(0) 推荐(0) 编辑
摘要:1. 什么是红黑树 (1) 简介 上一篇我们介绍了基本动态集合操作时间复杂度均为O(h)的二叉搜索树。但遗憾的是,只有当二叉搜索树高度较低时,这些集合操作才会较快;即当树的高度较高(甚至一种极端情况是树变成了1条链)时,这些集合操作并不比在链表上执行的快。 于是我们需要构建出一种“平衡”的二叉搜索树。 红黑树(red-black tree)正是其中的一种。它... 阅读全文
posted @ 2015-10-29 22:47 学数学的程序猿 阅读(9224) 评论(1) 推荐(1) 编辑
摘要:1. 引言 前些天数据结构课讲到了二叉树。学校使用的教材是《数据结构(Java版)(第4版,叶核亚)》。总觉得书中给出的二叉树(包括之前学的线性表)的实现方式不太“优雅”(面向对象),比如线性表的链式存储和实现一节中给出的SinglyList的插入方法:public Node insert(int i, T t);比如在二叉树的链式存储和实现的插入方法:public BinaryNode... 阅读全文
posted @ 2015-10-20 18:19 学数学的程序猿 阅读(1061) 评论(0) 推荐(0) 编辑
摘要:1. 名称 1. 名称 单例模式(Singleton Pattern):确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类。单例模式是一种对象创建型模式。 2. 问题 2. 问题 在有些时候,对于某个类,我们无需创建多个它的实例。站在资源利用的角度讲,单例能够节省系统 阅读全文
posted @ 2015-10-19 21:10 学数学的程序猿 阅读(944) 评论(3) 推荐(0) 编辑
摘要:1. 引言 1. 引言 从大一开始学习编程,到如今也已经有两年了。从最初学习的Html,Js,JaveSe,再到JavaEE,Android,自己也能写一些玩具。学习过程中也无意识的了解了一些所谓的设计模式,如今打算系统的学习。学习以书《设计模式的艺术——软件开发人员内功修炼之道/刘伟著》为主。 所 阅读全文
posted @ 2015-10-15 14:18 学数学的程序猿 阅读(2658) 评论(0) 推荐(0) 编辑
摘要:1. 什么是二叉搜索树 顾名思义,二叉搜索树是以一棵二叉树来组织的。如下图,这样的一棵树可以使用一个链表数据结构来表示,其中的每一个节点是一个对象。除了key和卫星数据之外,每个节点还包含属性left(左孩子)、right(右孩子)、和p(双亲)(若不存在,则值为NIL)。 二叉搜索树中的关键字总是... 阅读全文
posted @ 2015-10-10 20:10 学数学的程序猿 阅读(5468) 评论(0) 推荐(0) 编辑
摘要:1. 引言 1. 引言 在Windows上,经常需要做一些重复的工作。比如在不同的工作场所需要切换不同的ip;比如有时需要对一堆文件按1~n进行重命名;再比如我们需要删除一大堆文件,这些文件名字都差不多,但不在同一个目录呆着…第一次可以忍忍,手动完成了,但次数多了,将会觉得特麻烦和无聊;于是开始用某 阅读全文
posted @ 2015-10-06 15:25 学数学的程序猿 阅读(586) 评论(0) 推荐(0) 编辑
摘要:1. 引言 1. 引言 在上一篇中,我们简单的了解了爬虫的工作流程,也简单的实现了一个爬虫,并且在文末简单分析了目前存在的问题。这一篇博客将会对上一篇分析出的问题,给出改进方法。我们将从以下几个方面加以改进。 2. 改进 2. 改进 (1) Bloom Filter 我们首先利用Bloom File 阅读全文
posted @ 2015-10-05 22:01 学数学的程序猿 阅读(1888) 评论(2) 推荐(9) 编辑
摘要:1. 引言 许多应用都需要动态集合结构,它至少需要支持Insert,search和delete字典操作。散列表(hash table)是实现字典操作的一种有效的数据结构。2. 直接寻址表 在介绍散列表之前,我们先介绍直接寻址表。 当关键字的全域U(关键字的范围)比较小时,直接寻址是一种简单而有效的技... 阅读全文
posted @ 2015-10-03 12:14 学数学的程序猿 阅读(6381) 评论(0) 推荐(1) 编辑
摘要:1. 引言 1. 引言 从今天开始系统的学习网络爬虫。写这篇博客的目的在于,一来记录下自己的学习过程;二来希望可以给像我一样不懂爬虫但又对爬虫十分感兴趣的人带来一些帮助。 昨天去图书馆找有关爬虫书籍,居然寥寥无几,且都是泛泛而谈。之后上某宝淘来淘去,只找到一本相关书籍《自己动手写网络爬虫》,虽然在某 阅读全文
posted @ 2015-10-01 23:24 学数学的程序猿 阅读(6466) 评论(11) 推荐(23) 编辑
摘要:1. 引言 这一篇博文主要介绍链表(linked list),指针和对象的实现,以及有根树的表示。 2. 链表(linked list) (1) 链表介绍 我们在上一篇中提过,栈与队列在存储(物理)结构上都可以用数组和链表来实现。数组和链表都是线性存储结构,其中的各元素逻辑上都是按顺序排列的。它们的不同点在于:数组的线性顺序由数组的下标决定;而链表的顺... 阅读全文
posted @ 2015-09-29 10:44 学数学的程序猿 阅读(1707) 评论(0) 推荐(1) 编辑
摘要:1. 引言 从这篇博客开始,来介绍一些基本的数据结构知识。本篇及下一篇会介绍几种基本的数据结构:栈、队列、链表和有根树。此外还会介绍由数组构造对象和指针的方法。 ... 阅读全文
posted @ 2015-09-27 20:12 学数学的程序猿 阅读(1412) 评论(0) 推荐(1) 编辑