- 博客(24)
- 资源 (1)
- 收藏
- 关注
原创 Python基础:10函数参数
局部命名空间为各个参数值创建了一个名字,一旦函数开始执行,就能访问这个名字了。 在函数调用时,有非关键字参数和关键字参数之分,非关键字参数必须位于关键字参数之前。 在函数定义时,严格的顺序是:位置参数,默认参数,可变长元组,可变长字典。 一:调用函数时的参数 a:关键字参数 关键字参数的概念仅仅针对函数的调用。这种理念
2015-05-31 18:53:52 1490
原创 Python基础:09函数式编程
Python支持一些函数式编程的特性。比如lambda、 map()、reduce()、filter()函数。 一:匿名函数与lambda Python可以用lambda 关键字创造匿名函数。匿名函数不需要以标准的方式来声明(使用def 语句)。作为函数,它们也能有参数。 一个完整的lambda“语句”代表了一个表达式,这个表达式的定义体必须和声明放在同
2015-05-31 18:16:34 558
原创 Python基础:08列表解析与生成器表达式
一:列表解析 列表解析(List comprehensions,或缩略为 list comps )来自函数式编程语言Haskell 。它可以用来动态地创建列表。它在 Python 2.0 中被加入。 列表解析的语法: [expr foriter_var in iterable] 这个语句的核心是 for 循环,它迭代 itera
2015-05-30 10:09:13 1048
原创 Python基础:07迭代器
迭代器是在版本 2.2 被加入Python 的,它为类序列对象提供了一个类序列的接口。Python 的迭代无缝地支持序列对象,而且它还允许迭代非序列类型,包括用户定义的对象。它的出现,对列表迭代、字典迭代带来了性能上的增强。 迭代器用起来很灵巧,可以迭代不是序列但表现出序列行为的对象,例如字典的 key ,一个文件的行,等等。当你使用循环迭代一个对象条目时,你几乎不可能分辨出它是
2015-05-30 09:28:04 580
原创 Python基础:06条件和循环
1:条件表达式(三元操作符) Python 在很长的一段时间里没有条件表达式(C ? X : Y), 或称三元运算符。人们试着用 and 和 or 来模拟它, 但大多都是错误的。 根据 FAQ , 正确的方法(并不唯一)是:(C and [X] or [Y])[0]。 唯一的问题是社区不同意这样的语法。最后 Python 2.5 集成的语法确定为:X if
2015-05-30 08:59:22 509
原创 Python基础:01Python标准类型分类
有三种不同的模式可以帮助我们对基本类型进行分类,每种模型都展示了这些类型之间的相互关系。 一:存储模式 这种分类模式,看这种类型的对象能保存多少个对象。 一个能保存单个字面对象的类型称为原子或标量存储,那些可容纳多个对象的类型,称之为容器存储。 容器类型又带来一个新问题,那就是它是否可以容纳不同类型的对象。所有的Python容器对象都能
2015-05-29 20:04:27 789
原创 Python基础:05集合类型
集合类型 Python中,集合对象是一组无序排列的可哈希的值。所以集合成员可以做字典中的键。集合中的元素都是唯一的。 集合(sets)有两种不同的类型,可变集合(set)和 不可变集合(frozenset)。对可变集合(set),可以添加和删除元素,对不可变集合(frozenset)则不允许这样做。 请注意,可变集合(set)不是可哈希的,
2015-05-29 09:26:35 453
原创 Python基础:04映射类型
映射类型 字典是Python语言中唯一的映射类型。一个字典对象是可变的,它是一个容器类型,能存储任意个数的Python对象。字典中的数据是无序排列的。 映射类型也可被称做哈希表,哈希表的算法是获取键,对键执行一个叫做哈希函数的操作,并根据计算的结果,选择在数据结构的某个地址中来存储值。任何一个值存储的地址皆取决于它的键。正因为这种随意性,哈希表中的值是没有顺序的
2015-05-28 09:23:58 2052
原创 Python基础:03序列:字符串、列表和元组
一:序列 1:连接操作符(+) 这个操作符允许把一个序列和另一个相同类型的序列做连接,生成新的序列。语法如下:sequence1 + sequence2 该表达式的结果是一个包含sequence1和sequence2 的内容的新序列。 注意,这个操作不是合并操作中最快或者说最有效的。对字符串来说,这个操作不如把所有的子字符
2015-05-27 08:55:53 674
原创 Python基础:02数字
1:Python标准整数类型等价于C的(有符号)长整型。整数一般以十进制表示,但是Python也支持八进制或十六进制来表示整数。八进制整数以数字“0”开始, 十六进制整数则以“0x”或“0X”开始。 2:Python中的长整型和C或其它编译型语言的长整数不同。那些语言的长整数典型的取值范围是32位或64位。而Python的长整数类型能表达的数值仅仅与机器支持的(虚拟)内存大
2015-05-26 11:58:31 684
原创 Python基础:00概述
1:续行符 在Python中,一般是一行一个语句。一个过长的语句可以使用反斜杠( \ )分解成几行。 有两种例外情况,一个语句不使用反斜线也可以跨行。在使用闭合操作符时,单一语句可以跨多行,例如:在含有小括号、中括号、花括号时可以多行书写。另外就是三引号包括下的字符串也可以跨行书写。如下例:>>> alist = [1,... 2]>>> alist
2015-05-25 09:28:54 634
转载 01左旋字符串
题目描述: 定义字符串的左旋转操作:把字符串前面的k个字符移动到字符串的尾部。如把字符串abcdef左旋转k=2位得到字符串cdefab。请实现字符串左旋转的函数,要求对长度为n的字符串操作的时间复杂度为O(n),空间复杂度为O(1)。 大家开始可能会有这样的潜在假设,K尤其在编程的时候,全面地考虑问题是很重要的,K可能是一个远大于N的整数。
2015-05-14 17:50:51 482
原创 算法导论笔记:32字符串匹配算法
在编辑文本程序中,经常需要在文本中找到某个模式的所有出现位置。典型的情况是:在一个文本文件中,搜索用户输入的关键字。解决这种问题的算法叫做字符串匹配算法。字符串匹配算法的形式化定义如下:假设文本是长度为n的数组T[1..n],而模式是一个长度为m的数组P[1..m],其中m<=n,P和T中的元素都来自优先字符集。比如∑ = {0,1}或者∑ ={a,b,...z}。字符数组P和T通常称为字符串
2015-05-11 21:34:25 695
原创 算法导论笔记:31数论算法
因为我们将处理一些大整数,所以需要调整一下如何看待输人规模和基本算术运算的代价的看法。 在本章中,一个“大的输入”意味着输入包含“大的整数”,而不是输人中包含“许多整数”。因此,我们将根据输入数的位数来衡最输人的规模,而不是仅根据输人中包含的整数的个数。在本章中,我们在分析算法时一般既考虑算术运算的次数,也考虑它们所要求的位操作的次数。 一:初等数论概念 一
2015-05-11 21:22:43 1527
原创 算法导论笔记:25所有节点对的最短路径问题
本章考虑在给定的有向加权图G=(V, E),对于所有的节点u,v∈V,找到一条从节点u到节点v的最短路径。希望以表格的形式表示输出:第u行第v列给出的是节点u到节点v的最短路径权重。 对于这个问题,如果是运行|V|次单源最短路径算法来解决所有节点对的最短路径问题,每一次使用一个不同的节点做为源节点。如果所有边的权值是非负的,可以采用Dijkstra算法。如果采用数组来实现最小优先队
2015-05-10 16:02:28 7330
原创 算法导论笔记:24单源最短路径
最短路径问题:一个带权重的有向图G = (V, E)和权重函数w: E->R,该权重函数将每条边映射到实数值的权重上。一条路径p的权重w(p)是构成该路径的所有边的权重之和,定义从节点u到结点v的最短路径权重δ (u, v)如下: 在实际应用中,可以用一张图表示道路交通图,结点代表城市,边代表城市之间的道路,边上的权重代表道路的长度。目标就是找出一条从城市A到城市B的最
2015-05-10 10:23:46 7197
原创 算法导论笔记:23最小生成树
一个连通无向图G=(V, E),每条边(u, v) ∈ E,都有权重w(u, v),希望找到一个无环子集TE,既能够将所有节点都连接起来,又具有最小的权重。由于T是无环的,并且能连接所有的节点,所以T必然是一棵树,成T为最小生成树。最小生成树不唯一。 一:最小生成树的形成 本章所讨论的两种算法都采用贪心策略,这个贪心策略由下面的通用算法描述: GENER
2015-05-10 09:34:05 1764
原创 算法导论笔记:22基本图算法
本章阐述图的表示方法和图的搜索方法。图的搜索指的是系统化的沿着图的边访问所有顶点。图的搜索算法可以用来发现图的结构。许多图的算法在开始时,都是通过搜索获取图结构信息。另外还有一些图的算法实际上是由基本的图搜索算法经过简单扩充而成的。因此。图的搜索技术是图算法领域的核心。 一:图的表示 对于图G=(V, E),可以有两种表示方法:邻接链表和邻接矩阵。两种表示方法既可以表示
2015-05-10 08:58:18 2993
原创 算法导论笔记:21用于不相交集合的数据结构
在某些应用中,要将n个不同的元素分成一组不相交的集合。不相交集合上有两个重要操作,即找出给定的元素所属的集合和合并两个集合。 一:不相交集合的操作 不相交集合教据结构维护一组不相交的动态集合的集合S={S1, S2, ..., SK}。每个集合通过一个代表来识别,代表是集合中的某个成员,在某些应用中,哪一个成员被选作代表是无所谓的,但是必须保证在两次寻找某一集合
2015-05-09 16:48:06 1034
原创 算法导论笔记:19斐波那契堆
可合并堆是支持以下5种操作的数据结构,其中每个元素都有一个关键字: MAKE-HEAP():创建和返回一个新的不含任何元素的堆。 INSERT(H, x):将一个已填入关键字的元素x插入堆H中。 MINIMUM(H):返回一个指向堆H中具有最小关键字元素的指针。 EXTRACT-MIN(H):从堆H中删除最小关键字的元素,并返回指向该
2015-05-09 16:36:40 6043
原创 算法导论笔记:18B树
磁盘作为辅存,它的容量要比内存大得多,但是速度也要慢许多,下面就是磁盘的的结构图: 磁盘驱动器由一个或多个盘片组成,它们以固定的速度绕着主轴旋转,数据存储于盘片的表面,磁盘驱动器通过磁臂末尾的磁头来读写盘片。礠臂可以将磁头向主轴移近或移远。当一个磁头处于静止的时候,它下面经过的磁盘表面称为磁道。 磁盘之所以比主存要慢,是因为它有机械运动的部分:盘片旋
2015-05-09 13:05:12 784
原创 算法导论笔记:17摊还分析
在摊还分析中,通过求数据结构的一系列的操作的平均时间,来评价操作的代价。这样,即使这些操作中的某个单一操作的代价很高,也可以证明平均代价很低。摊还分析不涉及概率,它可以保证最坏情况下每个操作的平均性能。 摊还分析有三种常用的技术: 聚合分析,它确定n个操作的总代价的上界为T(n),所以每个操作的平均代价为T(n)/n。每个操作都有相同的摊还代价。
2015-05-09 10:42:59 8277 2
原创 算法导论笔记:16贪心算法
动态规划方法求解最优化问题时,每个步骤都面临多种选择。对于许多最优化问题,使用动态规划算法来求解最优解有些杀鸡用牛刀了,可以使用更简单更高效的贪心算法。贪心算法在每一步的选择中,都选择当时最佳的情况。即局部最优的选择。贪心算法并不能保证总能得到最优解,但是很多问题确实可以求得最优解。 一:活动选择问题 多个活动调度竞争共享资源,目标是选出一个最大的互相兼容的活动集合。假设有
2015-05-09 10:12:17 5537 1
原创 算法导论笔记:15动态规划
动态规划(dynamic programming,这里的programming不是程序,而是表示表格)。它与分治算法类似,都是通过组合子问题的解来求解原问题。分治算法是将原问题分解为互不相交的子问题,递归的求解子问题,然后将解组合起来。 动态规划则不同,它应用于求解子问题重叠的情况,也就是不同的子问题会涉及相同的子子问题。这样,普通的递归方法会反复的求解那些公共子问题,因而浪费了时
2015-05-06 09:08:16 6882 1
柔性数组成员
2018-09-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人