自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 资源 (4)
  • 收藏
  • 关注

原创 Python中的堆:heapq模块

heapq模块中有6个函数:1、heappush(heap, x):向堆中添加元素from heapq import *heap = []for i in range(3): heappush(heap, i)print(heap) #[0, 1, 2]heappush(heap, 0.5)print(heap) #[0, 0.5, 2, 1]heappush(hea...

2018-06-28 19:17:04 1573

原创 Python中的split和join函数

split()函数是按照指定分隔符,对字符串进行分割,还可以通过num指定分割的次数。例子:s = '123 456 789'print(s.split()) #默认是以空字符为分隔符,包括空格,\n,\t#输出:['123', '456', '789']s = '123,456,789'print(s.split(',')) #输出:['123', '456', '789']join...

2018-06-26 16:11:10 1057

原创 按单词反转字符串(Python)

按单词反转字符串:保持每个单词内的字母顺序不变,只是将单词的顺序反转。例如:原来的字符串:That is a boy反转后变为:boy a is Thatdef reverse_word(s): s1 = s.split(' ') i, j = 0, len(s1)-1 while i < j: s1[i], s1[j] = s1[j], s1[i]...

2018-06-26 15:25:40 5133

原创 删除数组中重复的元素(Python)

删除一个给定数组中重复的元素:1、可以利用set函数:num = [1,2,1,4,5]print(list(set(num)))2、使用字典函数:num = [1,2,1,4,5]b = {}c = b.fromkeys(num) #fromkeys(num)是用num中的元素作为键,并给每一个键默认赋值None。print(list(c.keys()))3、def deleteSame...

2018-06-26 14:31:39 23192

原创 判断一个数组中最大子序列的和(Python)

判断一个数组中最大子序列的和(数组中存在负数),例如数组[1,2,-1,4,5]的最大子序列就是它本身,和为1。利用动态规划的思想,求解子问题的最优解。设置一个临时变量temp(用于保存临时子序列的累加和),将数组中从第一个数开始累加,如果加上一个新元素后,子序列的和temp大于res的值,则更新res的值;否则检查temp是否小于0,如果是,则令temp=0.这里解释一下判断语句temp<...

2018-06-26 10:14:46 3040 1

原创 判断两个数组中是否存在相同的数字(Python)

给定两个已排好序的数组,判断两个数组中是否存在相同的数字? 第一种办法:遍历其中一个数组中的每个元素,然后在第二个数组中用二分查找法,检查是否存在相同的元素。其时间复杂度是O(nlog n).没有利用数组有序这个信息。 第二种办法:设置两个下标,分别初始化为两个数组的第一个元素,比较当前两个元素的大小,将较小元素的下标加一,如果有相同的数字,则返回True,如果直到数组末尾还没有相同的...

2018-06-26 09:26:48 15713 1

原创 判断一个链表是否存在环(Python)

判断一个链表是否存在环:例如n1->n2->n3->n4->n5->n6->n2就是一个有环的链表,环的开始结点是n6。有的博客说的一种方法:遍历链表,将遍历过的结点放在一个字典中,如果一个结点已经存在字典中,说明有环。个人认为这种方法不可行,因为如果链表中如果有重复的元素,但是重复的元素的地址是不一样的,此时并没有形成环。所以这种判断环的方法不可行。下面是正确...

2018-06-25 15:58:56 13551 4

原创 详解单链表中元素的反转(Python实现)

给定一个单链表,将其反转。其实很容易想到,只需要修改每个结点的指针指向:即令后一个结点指向前一个结点,并且将表头指针指向最后一个结点即可。这个过程可以用循环实现,也可以用递归来实现。1、用循环来实现:class LNode: def __init__(self, elem): self.elem = elem self.pnext = Nonedef r...

2018-06-22 17:33:05 2782

原创 学习笔记-单链表(Python)

顺序表可以在O(1)的时间内定位元素,但是插入或者删除需要O(n)的时间,因为其需要移动大量的元素块。链表的实现不需要连续的存储区。链表的每个结点含有表元素和指向后继元素的指针。在链表表首插入和删除元素的复杂度都是O(1),在其他位置插入和删除元素的复杂度都是O(n)。下面定义一个链表的结点类:class LNode: def __init__(self, elem, pnext = No...

2018-06-21 17:33:27 610 1

原创 列表的逆序排列

将一个列表中的元素顺序倒置,其复杂度是O(n)。如果lst中有偶数个元素,则所有元素两两对调,中间没有剩余元素。如果lst中有偶数个元素,则所有元素两两对调,中间会剩余一个元素,让其保持在原来位置即可。def reverse_list(lst): i, j = 0, len(lst)-1 while i < j: lst[i], lst[j] = lst[j]...

2018-06-21 11:31:46 1240

原创 学习笔记-简单的排序算法(Python实现)

1、直接插入排序时间复杂度:O(n^2)空间复杂度:O(1)稳定性:稳定插入排序就是将一个数据插入到已经排好序的序列中。如图所示,插入元素是2,则用2依次与左边的元素比较,只要左边的元素大于2,就将左边的元素右移一位,直到2大于左边元素为止。def insert_sort(lst): for i in range(1, len(lst)): ...

2018-06-19 11:17:04 423

原创 分步图解平衡二叉树的插入过程(Python实现)

一、基本概念:平衡二叉树:是一种特殊的二叉排序树,它或者为空树,或者每个结点的左右子树都是平衡二叉树,也就是每个结点的左右子树的高度之差只能是-1,0,1三种情况。平衡二叉树又称AVL树,是由苏联的Georgy Adelson-Velsky和E.M.Landis发明的,并以他们的名字命名。与之类似的还有红黑树、B树等。平衡二叉树的平衡状况由平衡因子(Balance Factor,BF)...

2018-06-19 08:32:13 11933 8

原创 学习笔记-用二叉排序树实现字典类(Python实现)

二叉排序树,又称二叉查找树,或二叉搜索树。二叉排序树或者为空,或者具有以下性质:如果其左子树不空,那么其左子树上所有结点的值均小于其根结点的值。如果其右子树不空,那么其右子树上所有结点的值均大于其根结点的值。非空的左子树或右子树也是二叉排序树。如果对二叉排序树做中序遍历,将得到一个递增序列。下图是数据集[36,65,18,7,60,89,43,57,96,52,74]所生成的两棵二叉排序树。可见,...

2018-06-17 21:47:41 2029

原创 求两个列表的交集(Python)

如果s的当前元素小于t的当前元素,则应该进一步考虑s的下一个元素;他中当前元素较小的也是同样的道理;只有两个两个列表的当前元素相等时,将其加入到交集中。假设s、t中的元素个数分别为m和n,主循环的每次迭代总能处理掉两个集合中的至少一个元素,所以此算法的时间复杂度是O(m+n)。def findIntersection(s,t): s.sort() t.sort() ...

2018-06-15 17:33:56 2045

原创 常用散列函数和冲突消解机制(数据结构)

散列函数(哈希函数)是一种大集合到小集合的映射。这种映射肯定会出现不同的关键码被映射到同一个位置的情况,称为冲突。关于冲突有一个重要的度量值:负载因子。                               负载因子越大,出现冲突的可能性就越大。扩大散列表的存储空间,就可以降低负载因子;但是负载因子过小,就会造成散列表中的空间浪费。用散列技术实现字典,需解决两个大问题:散列函数的设计,冲突消...

2018-06-15 11:38:41 2747 1

原创 二分法检索(Python)

二分法检索是一种重要的检索技术,其基本思想是逐步缩小需要考虑的数据范围,从而快速逼近需要找的数据。def Binsearch(lst,key): #lst是一个顺序表 low, high = 0, len(lst)-1 while low <= high: mid = (high-low) // 2 if key == lst[mid]: ...

2018-06-14 20:13:49 589

原创 学习笔记-图、最小生成树、最短路径、AOV/AOE的基本算法(Python实现)

一、采用深度优先搜索来遍历整个图得到DFS序列的步骤:首先访问顶点v,并将其标记为已访问检查v的邻接顶点,从中选一个尚未访问的顶点,从它出发继续进行深度优先搜索。将顶点v剩余的邻接顶点入栈。重复以上操作,直到顶点v的多有邻接顶点都被访问。如果图中还存在未访问的顶点,则选出一个未访问顶点,重复以上操作,直到所有的顶点都已被访问。具体实现在代码的最后部分,前面部分只是栈和图的类实现。class Sta...

2018-06-13 09:26:13 2734 2

原创 学习笔记-数据结构-图的基础知识及邻接矩阵和邻接表的实现(Python)

一、基本概念图是一个二元组G=(V,E)。V是非空有穷的顶点集合。E是图G中边的集合。有向图:图中的每条边都有方向(即带有箭头)。无向图:图中的每条边都没有方向。有向边:用尖括号来表示为<a,b>。a是始点,b是终点。也被称为弧,a是弧尾,b是弧头。无向边:用圆括号表示为(a,b)。完全图:任意两个顶点之间都有边的图(有向图或无向图)。            n个顶点的无向完全图有n*...

2018-06-11 11:16:12 11881 5

原创 学习笔记-二叉树-先序、中序、后序、层次遍历的实现(Python)

二叉树类的的Python实现及其函数:包括统计结点个数,用递归实现的先序遍历,非递归实现的先序遍历,以及非递归实现的后序遍历。class StackUnderflow(ValueError): pass class SStack(): def __init__(self): self.elems = [] d...

2018-06-10 19:08:33 573 1

原创 学习笔记-图解堆排序(Python实现)

堆排序思想:堆顶(小顶堆)的元素是整个堆中最小的元素,将堆顶元素与最后一个元素交换,然后用一次‘向下筛选’将新的堆顶元素插入到堆中正确的位置:即比较堆顶元素与其两个左右子结点的大小,如果堆顶元素最小,则将其保留在堆顶位置,停止;如果左子结点或右子结点最小,则交换堆顶元素与左子结点或右子结点的值,然后再沿着当前路径不断地比较下去,直至最初的堆顶元素在某一次比较中是最小值或者到达叶结点位置。此外,如果...

2018-06-10 10:47:58 8210 3

原创 学习笔记-用堆实现优先队列(Python)

    堆是一棵完全二叉树,这棵二叉树需要满足堆序:任何分支结点(即除去叶结点所剩余的结点)的值都大于等于(或小于等于)其左右子结点的值。一般用列表来表示堆(Python中的列表下标从0开始),i结点父结点位置为(i-1)/2,i结点的左右子结点位置为2*i+1和2*i+2。如果堆序是小元素优先,则构造出来的称为‘小顶堆’(小元素在上)。如果堆序是大元素优先,则构造出来的称为‘大顶堆’(大元素在上...

2018-06-09 21:26:02 3314

原创 学习笔记-优先队列(Python实现)

优先队列是一种重要的缓存结构。优先队列总是会弹出当前元素中优先级最高的。当插入元素时,将其插入到满足当前优先级顺序的位置。 当用列表来实现优先队列时,可以考虑利用元素在列表中的先后顺序来表示优先级关系。为了在O(1)时间内弹出优先级最高的元素,所以应该将优先级最高的元素放在列表的表尾。在以下的实现中,值较小的元素具有更高的优先级。class ListPriQueueValueError(Value...

2018-06-08 19:12:34 1489

原创 二叉树基础知识

父节点相同的两个结点互为兄弟结点。没有子结点的结点称为叶结点,树中其余结点称为分支结点(也就是度不为0的结点)。一个结点的子结点的个数称为该结点的度。树中结点的最大层数称为树的高度。二叉树的性质:(1)非空二叉树的第i层至多有个结点。(从第1层开始算起)(2)高度为h的二叉树至多有个结点。(3)任何非空二叉树,如果其叶结点的个数为,度数为2的结点个数为,那么 证明:设:二叉树中总的结点的个数为n,...

2018-06-08 16:08:39 4270

原创 二叉树的先序、中序、后序遍历序列

    二叉树的遍历主要有三种:(1)先(根)序遍历(根左右)(2)中(根)序遍历(左根右)(3)后(根)序遍历(左右根)举个例子:先(根)序遍历(根左右):A B D H E I C F J K G中(根)序遍历(左根右) : D H B E I A J F K C G后(根)序遍历(左右根) : H D I E B J K F G C A    以后(根)序...

2018-06-08 10:41:57 466319 27

原创 学习笔记-队列(Python实现)

    队列中的元素都是先进先出(First In First Out, FIFO)    用列表来实现队列存在着一定的困难。首先根据队列的定义,出队应该在表首进行,但是一个元素出队后,需要将后面的元素一次前移一位,这是一个O(n)时间的操作。Python中list对象的pop(0)就是这样。    另一种可能是在队首元素出队后,剩余的元素不前移,但要记住队头所在的新的位置。但是这样会让前面空出来...

2018-06-07 21:27:22 1205

原创 学习笔记-栈的简单应用(Python)

    用栈来实现简单的括号匹配问题。主要包含圆括号、方括号和花括号。    当前闭括号应该与前面最近的尚未配对的开括号进行匹配,下一个闭括号应该与前面次近的括号进行匹配。这恰恰符合后进先出的的原则。如果一个开括号已经匹配,则将其删除,为随后的匹配做准备。class StackUnderflow(ValueError): pass class SStack(): ...

2018-06-07 16:37:36 672

原创 学习笔记-栈(Python实现)

    栈中的元素都是后进先出(Last In First Out, LIFO).用列表可以实现一个栈类。class StackUnderflow(ValueError): """ 这个是 ValueError的子类,可以抛出自定义的异常 """ passclass SStack(): def __init__(self): self...

2018-06-07 11:14:25 2929

原创 学习笔记-双链表(Python实现)

    单链表只有一个方向的链接,即使增加了尾结点的引用,也只能支持O(1)时间的表首元素的插入和删除以及尾端元素的插入。如果希望两端插入和删除都变得高效,需要增加另一方向的链接,这就得到了双向链接表,简称双链表。这样做也会付出代价,每个节点都需要增加一个链接域,增加的空间开销与结点数成正比,是O(n)。但是,如果每个表结点里的数据规模比较大,新增加的开销可能就显得不太重要了。    从双链表的任...

2018-06-06 22:07:39 1069

原创 学习笔记-循环单链表(Python实现)

循环单链表是单链表的一种变形,其最后一个结点的next域不再是None,而是指向表的第一个结点。在循环列表对象中记录表位结点,可以实现O(1)时间的表头/表尾插入和O(1)时间的表头删除。由于循环链表中的结点连成一个圈,哪个结点是表头或表尾,主要是概念问题,从表的形态上无法区分。以下实现了一个简单的循环单链表类,其中包含了几个典型的操作:class Node: def __init__(s...

2018-06-06 17:34:22 4454 1

机器学习实战 高清版+源代码

非常适合初学者来机器学习入门,每个算法都有代码,可实际调试运行,加深对算法的理解。

2018-11-13

21天学通Python(高清版)

21天学通Python,全面、系统、深入地讲解了Python编程基础语法与高级应用。在讲解过程中,通过大量实际操作的实例将Python语言知识全面、系统、深入地呈现给读者。在学习中遇到问题时,也可以作为参考。

2018-11-13

数字图像处理(冈萨雷斯第三版)高清版+详尽PPT课件+MATLAB源码

数字图像处理(冈萨雷斯第三版)高清版,详尽PPT课件,重点知识点,带MATLAB源码

2018-11-12

空空如也

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

TA关注的人

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