动态规划属于不好理解的计算机基本算法之一。
需要经过多次实践,才能体会其精妙之处。
其精妙的地方在于:降低运算量。
下面通过实例理解动态规划解题思路。
实例一:求数组的最大连续和子数组。参考文章
用动态规划来解,首先得考虑状态和状态转移方程。如果我们把题述数组看成序列,那么是不是可以用序列DP来考虑呢?
我们不妨考虑一个这样的序列:1,-3,5,-2,4
a[i]表示这个...
分类:
编程语言 时间:
2016-05-07 11:13:51
阅读次数:
296
STL实践与分析
--再谈迭代器【上】
引言:
另外三种迭代器类型:
1)插入迭代器:这类迭代器与容器绑定在一起,实现在容器中插入元素的功能。
2)iostream迭代器:这类迭代器可以与输入与输出流绑定在一起,用于迭代遍历所关联的IO流。
3)反向迭代器:这类迭代器实现向后遍历,而不是向前遍历,所有的容器都定义了自己的rever...
分类:
编程语言 时间:
2016-05-07 11:12:07
阅读次数:
341
STL实践与分析
--set类型
引:
map容器是键-值对的集合,好比人名为键的地址和电话号码。相反的,set容器类型只是单纯的键的集合。当只想知道一个键是否存在时,使用set容器是最合适的。
除了两种例外情况,set容器支持大部分的map操作,包括下面几种:
1)第10.2节列出的所有通用的容器操作。
2)表10.3描述的...
分类:
编程语言 时间:
2016-05-07 11:10:40
阅读次数:
239
STL实践与分析
--map类型(下)
六、查找并读取map中的元素
map容器提供了两个操作:count和find,用于检查某个键是否存在而不会插入该键:
不修改map对象的查询
m.count(k)
返回m中k的出现次数
m.find(k)
如果m...
分类:
编程语言 时间:
2016-05-07 11:10:35
阅读次数:
191
STL实践与分析
--map类型(上)
引:
map是键-值对的集合。
map类型通常能够理解为关联数组:能够通过使用键作为下标来获取一个值,正如内置数组类型一样;而关联的本质在于元素的值与某个特定的键相关联,而并不是通过元素在容器中的位置来获取。
一、map对象的定义
1、定义map对象时,必须分别指明键和值的类型:...
分类:
编程语言 时间:
2016-05-07 11:12:04
阅读次数:
274
我们知道,数组是一种引用数据类型,数组引用变量只是一个引用,数组元素和数组变量在内存里是分开存放的,下面介绍数组在内存中的运行机制。
1.内存中的数组
数组引用变量只是一个引用,这个引用变量可以指向任何有效的内存,只有当该引用指向有效内存后,才可以通过该数组变量来访问数组元素,因为,引用变量是访问真实对象的根本方式。也就是说,如果我们希望在程序中访问数组,则只能通过这个数组的引用变量来...
分类:
编程语言 时间:
2016-05-07 11:10:36
阅读次数:
135
STL 实践与分析
-- 容器的综合应用:文本查询程序
引言:
本章中最重点的实例,因为不需要用到 multiset 与 multimap 的内容,于是将这一小节提到了前面,通过这个实例程序,大师分析问题的智慧,大师的编程风格,大师对程序的控制能力,由此可见一斑。因此,我对这一小节的内容几乎不做修改,或只做很小的更改(因为有些东西不同人有不同的理解),搬出来,以供大家仔细...
分类:
编程语言 时间:
2016-05-07 11:09:31
阅读次数:
234
因为作者本人也是刚学python不久,在看python官方文档的时候看到了 Lambda 函数,其中使用sort函数的地方看的有些迷惑,所以就查找了一些关于sort和sorted函数的资料,在此整理到博客
L.sort(cmp=None, key=None, reverse=False)
sorted(iterable, cmp=None, key=None, reverse=False)
这样...
分类:
编程语言 时间:
2016-05-07 11:09:25
阅读次数:
144
java nio做即使通讯的使用...
分类:
编程语言 时间:
2016-05-07 11:09:43
阅读次数:
139
STL 实践与分析
--multimap 与 multiset
引言:
map 和 set 容器中,一个键只能对应一个实例,而 multiset 和 multimap 类型则允许一个键对应多个实例。
multimap 与 multiset 类型与相应的单元素版本具有相同的头文件定义:分别是map 与 set 头文件。
multimap/mult...
分类:
编程语言 时间:
2016-05-07 11:09:10
阅读次数:
151
STL实践与分析
--引言、pair类型、关联容器
引言:
关联容器与顺序容器的本质差别在于:关联容器通过键[key]来存储和读取元素,而顺序容器则通过元素在容器中的位置顺序的存取元素。
map的元素以键-值【key-value】对的形式组织:键用作元素在map中的索引,而值则表示所存储和读取的数据。
set仅包括一个键,并...
分类:
编程语言 时间:
2016-05-07 11:05:53
阅读次数:
260
前言
在默认情况下,即在不指定线程的情况下,RxJava 遵循的是线程不变的原则,即:在哪个线程调用 subscribe(),就在哪个线程生产事件;在哪个线程生产事件,就在哪个线程消费事件。
如果需要切换线程,就需要用到 Scheduler (调度器)。
Schedulers部分主要来自《给Android 开发者的 RxJava 详解》
Sche...
分类:
编程语言 时间:
2016-05-07 11:08:07
阅读次数:
150
map()函数
map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。
例如,对于list [1, 2, 3, 4, 5, 6, 7, 8, 9]
如果希望把list的每个元素都作平方,就可以用map()函数:
因此,我们只需要传入函数f(x)=...
分类:
编程语言 时间:
2016-05-07 11:06:35
阅读次数:
232
Python函数
(1)数据框的另一种定义方式,将数据内容(多维数组)直接放入data中,再定义columns和index。(数据框.columns是取列名,.index是取行名,取出的类型类似元组,可以用[0],[1]…直接取出)
df = pd.DataFrame(data=[[34, 'null', 'mark'], [22, 'null','mark'], [34, 'null'...
分类:
编程语言 时间:
2016-05-07 11:04:09
阅读次数:
273
如何将一个接受多参数的函数变换为一系列只接受单个参数的函数,这个过程被称为柯里化 (Currying)
参照:objc.io|objc 中国
/**
1.add0 和 add
的例子向我们展示了如何将一个接受多参数的函数变换为一系列只接受单个参数
的函数,这个过程被称为柯里化 (Currying),它得名于逻辑学家 Haskell Curry;我...
分类:
编程语言 时间:
2016-05-07 11:03:27
阅读次数:
228
伸展树属于一种平衡二叉树。在每次查找之后对树进行重构,把被查找的条目搬移到离树根近一些的地方。伸展树应运而生。伸展树是一种自调整形式的二叉查找树,它会沿着从某个节点到树根之间的路径,通过一系列的旋转把这个节点搬移到树根去。主要分为四种情况Zig, Zag, Zig-zig,Zig-Zag....
分类:
编程语言 时间:
2016-05-07 11:02:12
阅读次数:
290
布鲁特-福斯算法简单的模式匹配算法是一种带回溯的匹配算法。一.算法思想从主串S的第pos个字符开始,和模式串T的第一个字符开始比较,如果相等就继续比较后续字符,如果不等,则从(回溯到)主串S的第pos+1个字符开始重新和模式串T进行比较,直到模式串T中的每一个字符和主串的每一个连续字符子序列全部相等,则称匹配成功,返回和T第一个字符相等的字符在主串S中的位置;或者主串中没有和模式串相等的字符序列,则...
分类:
编程语言 时间:
2016-05-07 11:01:51
阅读次数:
223