python数据结构与算法
zhangyu4863
这个作者很懒,什么都没留下…
展开
-
算法常用术语中英对照
算法常用术语中英对照Data Structures 基本数据结构Dictionaries 字典Priority Queues 堆Graph Data Structures 图Set Data Structures 集合Kd-Trees 线段树Numerical Problems 数值问题Solving Linear Equations 线性方程组Bandwidth Reducti...原创 2018-11-19 23:12:06 · 31028 阅读 · 0 评论 -
矩阵相乘 (python语言)
这里把矩阵想象成二维excal表格# 运算两个矩阵相乘的结果def matrix_multiply(a, b): a_line = len(a) / len(a[0]) # a的行数(矩阵的总长度除第一行的长度) b_column = len(b[0]) # b的列数(第一行向量的长度) if a_line == b_column: # 满足矩阵相乘条件 ...原创 2018-06-29 21:04:50 · 1360 阅读 · 0 评论 -
斐波那契数列(python3)
# 斐波那契数列----------------------------------------def fib(n): if n == 0: return 0 elif n ==1 or n == 2: return 1 else: return fib(n-1) + fib(n-2)print(fib(10))...原创 2018-06-24 23:14:52 · 495 阅读 · 0 评论 -
汉诺塔问题(python3)
# 汉诺塔问题----------------------------------------def hanoi(n, p_1, p_2, p_3): # n是盘子数量 if n == 1: print('把盘子从{}移到{}'.format(p_1, p_3)) return else: hanoi(n-1, p_1, p_3,...原创 2018-06-24 23:13:46 · 883 阅读 · 0 评论 -
环形链表(python3)
# 环形链表----------------------------------------class AnnularList: def __init__(self, value): self.elem = value self.next = Noneclass AnnularListHandle: def __init__(self): ...原创 2018-06-24 23:13:06 · 640 阅读 · 0 评论 -
单链表(python3)
# 单链表----------------------------------------class ListNode: # 单链表的定义 def __init__(self, value, pointer): self.elem = value self.next = pointerclass ListHandle: # 单链表的操作 ...原创 2018-06-24 09:48:48 · 2693 阅读 · 1 评论 -
数组(python3)
# 数组--------------------# 定义一个[n,m]的二维数组n, m = 3, 4array_2 = [[None for i in range(n)] for i in range(m)]# 定义一个[x,y,x]的三维数组x, y, z = 2, 3, 4array_3 = [[[None for i in range(x)] for i in range(y)...原创 2018-06-23 21:33:50 · 1213 阅读 · 0 评论 -
菜鸟教程 练习实例48 (python3)
# -*- coding: UTF-8 -*-def main(a, b): if a > b: print('%d 大于 %d' % a, b) elif a < b: print('%d 小于 %d' % a, b) else: print('%d 等于 %d' % a, b)main(10, 20...原创 2018-06-09 00:04:13 · 283 阅读 · 0 评论 -
图的遍历(python语言)
图的遍历,就是按某种方式系统的访问图中的每个顶点而且仅访问一次的过程。 基本方法分为深度优先遍历和宽度优先遍历两种。深度优先遍历 访问顶点,并将其标记为已访问。 检查顶点的邻接顶点,从它出发进行深度优先搜索,不存在邻接顶点时回溯。 重复上述操作,直到从顶点出发的所有顶点都已访问。 如果图中还存在未访问的顶点,则选出一个未访问过的顶点,由它重复上述的过...原创 2018-06-08 22:34:34 · 2618 阅读 · 0 评论 -
树的python实现
# -*- coding: UTF-8 -*-class SubtreeIndexError(ValueError): passdef tree(data, *subtrees): return [data].extend(subtrees)def is_empty(tree): return tree is Nonedef root(tree):...原创 2018-06-06 21:20:24 · 1132 阅读 · 0 评论 -
栈 数组实现(python语言)
class StackArray: def __init__(self): # 建空栈 self.array = [] def is_empty(self): # 栈的判空 if len(self.array) == 0: # 如果为零 return 0 else: retur...原创 2018-06-30 15:44:35 · 1323 阅读 · 0 评论 -
老鼠走迷宫(python语言)
老鼠走迷宫—————————————-0为可走,1为不可走x为行数,y为列数matrix = [] # 定义二维数组exit_x = 1 # 定义出口所在行exit_y = 1 # 定义出口所在列class Node: def __init__(self, x, y): self.x = x self.y = y ...原创 2018-07-03 21:57:21 · 3108 阅读 · 2 评论 -
排序
算法性能分析分类内排序:带排序的记录全部保存在内存中外排序:针对外存(磁盘等)数据的排序基本操作:比较关键码的操作,通过这种操作确定数据的顺序关系移动数据记录的操作,用于调整记录的位置顺序基于关键码的比较的排序问题,时间复杂度是O(n log n),也就是说任何算法都不能优于O(n log n)稳定的排序算法:对于待排序的序列里任何一对排序码相同的记录Ri和Rj,在排序后后...原创 2018-07-12 10:06:22 · 925 阅读 · 0 评论 -
快速排序 python 三行代码
快速排序def quick_sort(list_): if len(list_) < 2: return list_ return quick_sort([lt for lt in list_[1:] if lt <= list_[0]]) + list_[0:1] + quick_sort([rt for rt in list_[1:] if rt > lis...原创 2018-10-17 22:23:19 · 4811 阅读 · 0 评论 -
DP KMP python
贪婪算法贪婪算法并不能得到最优解,因为每步都是局部最优解动态规划使用动态规划时,要么考虑拿走整件商品,要么考虑不拿,而没法判断该不该拿走商品的一部分。问题: - 假设你要去伦敦度假,假期两天,但你想去游览的地方很多。你没法前往每个地方游览,因此你列个单子。 名胜 时间 评分 威斯敏斯特教堂 0.5天 7 环球剧场 ...原创 2018-08-16 11:38:54 · 292 阅读 · 0 评论 -
狄克斯特拉算法、广度优先搜索、最短路径问题 python
最短路径问题:使用广度优先搜索,使用图来建立问题模型假设你经营着一个芒果农场,需要寻找芒果销售商,以便将芒果卖给他。在Facebook,你与芒果销售商有联系吗?为此,你可在朋友中查找。查找最短路径,广度优先搜索可回答两类问题[x] 第一类问题:从节点A出发,有前往节点B的路径吗?(在你的人际关系网中,有芒果销 售商吗?)[x] 第二类问题:从节点A出发,前往节点B的哪条路径最短?(...原创 2018-08-16 02:44:17 · 598 阅读 · 0 评论 -
Dijkstra 算法 python
def Dijkstra_is_algorithm(node): node = find_lowest_cost_node(costs) # 在未处理的节点中找出开销最小的节点 while node is not None: # 这个while循环在所有节点都被处理过后结束 cost = costs[node] neighbors = gra...原创 2018-08-06 19:59:41 · 493 阅读 · 0 评论 -
快速排序 python
def quick_sort(array): if len(array) < 2: return array else: pivot = array[0] less = [i for i in array[1:] if i <= pivot] # 由所有小于基准值的元素组成的子数组 greater = [...原创 2018-08-06 10:44:19 · 200 阅读 · 0 评论 -
选择排序
def findsmalleast(arr): smallest = arr[0] smallest_index = 0 for i in range(1, len(arr)): if arr[i] < smallest: smallest = arr[i] smallest_index = i ...原创 2018-08-06 10:19:48 · 130 阅读 · 0 评论 -
二分查找 python
def binary_search(list, item): low = 0 high = len(list) - 1 while low <= high: mid = int((low + high) / 2) # 中间的 guess = list[mid] if guess == item: ...原创 2018-08-05 12:25:11 · 208 阅读 · 0 评论 -
二叉树的遍历 python
从二叉树的根节点出发,节点的遍历分为三个主要步骤:对当前节点进行操作(称为“访问”节点,或者根节点)、遍历左边子节点、遍历右边子节点。访问节点顺序的不同也就形成了不同的遍历方式。需要注意的是树的遍历通常使用递归的方法进行理解和实现,在访问元素时也需要使用递归的思想去理解。实际实现中对于前序和中序遍历可尝试使用递归实现。按照访问根元素(当前元素)的前后顺序,遍历方式可划分为如下几种:深度优...原创 2018-08-05 11:26:19 · 217 阅读 · 0 评论 -
快慢指针(找未知长度链表的中间、判断链表是否是循环链表)
快慢指针也是一个可以用于很多问题的技巧。所谓快慢指针中的快慢指的是指针向前移动的步长,每次移动的步长较大即为快,步长较小即为慢,常用的快慢指针一般是在单链表中让快指针每次向前移动2,慢指针则每次向前移动1。快慢两个指针都从链表头开始遍历,于是快指针到达链表末尾的时候慢指针刚好到达中间位置,于是可以得到中间元素的值。快慢指针在链表相关问题中主要有两个应用:快速找出未知长度单链表的中间节点 设置...原创 2018-08-05 01:52:01 · 31650 阅读 · 0 评论 -
哈夫曼算法实现(python语言)
# -*- coding: UTF-8 -*-class HTNode(BinTNode): def __lt__(self, othernode): return self.data < othernode.dataclass HuffmanPrioQueue(PrioQueue): def number(self): retur...原创 2018-06-06 21:04:04 · 1040 阅读 · 0 评论 -
二叉树的类实现(python语言)
# -*- coding: UTF-8 -*-class BinTNode: # 定义一个二叉树节点类 def __init__(self, dat, left=None, right=None): self.data = dat # 节点数据 self.left = left # 左子节点 self.right = right ...原创 2018-06-06 20:50:53 · 917 阅读 · 0 评论 -
串匹配朴素算法的代码实现(python语言)
> def n_matching(t, p): # 朴素的串匹配算法的实现(p是要匹配的字符串,t是被匹配的字符串> j, i = 0, 0 # i,j的初始化> n, m = len(t), len(p) # m,n分别是t,p字符串的长度> while j < n and i < m: # i,j指针在被扫描的字...原创 2018-05-25 10:18:37 · 745 阅读 · 0 评论 -
线性表的Josephus 问题的代码实现(python语言)
问题:设有n个人围坐一圈,现在从第k个人开始报数,报到第m的人退出。然后继续报数,直至所有人退出。输出出列人顺序编号def josephusa_A(n, k, m): # 数组方法 people = list(range(1, n+1)) i = k - 1 for num in range(n): count = 0 while coun...原创 2018-05-20 15:31:21 · 445 阅读 · 0 评论 -
线性表的单向链表的排序的代码实现(python语言)
注:代码中的cort就是表中的crtdef sort_m(self): # 表元素排序(从小到大) if self.head is None: # 将要排序的表为空则直接返回 return cort = self.head.next # cort赋为表的第二节点 while cort is not None: # cort不为空 x ...原创 2018-05-20 14:55:32 · 1300 阅读 · 0 评论 -
线性表的链表的排序的代码实现(python语言)
def list_sort(list_1): # 表的排序(冒泡排序) for i in range(1, len(list_1)): # x = list_1[i] j = 1 while j > 0 and list_1[j-1] > x: list_1[j] = list_1[j-1] ...原创 2018-05-20 13:40:40 · 441 阅读 · 0 评论 -
线性表的表元素反转的代码实现(python语言)
def reverse(self): # 表元素的反转 p = None # p指向空 while self.head is not None: # 判断将要被反转的表是否为空 q = self.head # q指向表的首节点 self.head = q.next # 表头的head指向原表的第二个节点 q.next = p...原创 2018-05-20 13:38:57 · 449 阅读 · 0 评论 -
线性表的双向链表的代码实现(python语言)
# 单链表class ListNode: # 定义链表节点类 def __init__(self, elem_1, next_1): self.elem = elem_1 # 节点的值 self.next = next_1 # 指向下一个节点的链接class TwoListNode(ListNode): # 定义一个双向链表的节点类 ...原创 2018-05-19 22:32:28 · 193 阅读 · 0 评论 -
线性表的循环单链表使用的代码实现(python语言)
# 单链表class ListNode: # 定义链表节点类 def __init__(self, elem_1, next_1): self.elem = elem_1 # 节点的值 self.next = next_1 # 指向下一个节点的链接class LoopList: # 定义一个循环单链表 def __init__(sel...原创 2018-05-19 09:26:06 · 246 阅读 · 0 评论 -
线性表的循环单链表的类定义的代码实现(python语言)
# 单链表class ListNode: # 定义链表节点类 def __init__(self, elem_1, next_1): self.elem = elem_1 # 节点的值 self.next = next_1 # 指向下一个节点的链接class LoopList: # 定义一个循环单链表 def __init__(sel...原创 2018-05-18 21:06:55 · 255 阅读 · 0 评论 -
串匹配正则表达式(re包规定的元字符)的代码实现(python语言)
re包规定的元字符:. ^ $ * + ? \ | { } [ ] ( ) - 贪婪匹配:与有可能匹配的最长子串匹配 在这里 ab* 匹配 abbbbbb,* 运算符做贪婪匹配 - 非贪婪匹配:与有可能匹配的最短子串匹配字符组表达式字符组表达式[abc]可以匹配字符a或b或c 区间形式[0-9]是顺序列出的缩写,匹配数字字符0到9 ...原创 2018-05-25 16:11:18 · 251 阅读 · 0 评论 -
串匹配(无回溯匹配)KMP 算法的代码实现(python语言)
KMP的精髓是开发了一套分析和记录模式串信息的机制(和算法)KMP的基本思想是匹配中不回溯# 匹配循环while j &amp;amp;gt; n and i &amp;amp;lt; m: if i == -1: j, i = j+1, i+1 elif t[j] == p[i]: j, i = j+1, i+1 else: i = p...原创 2018-05-26 18:00:43 · 440 阅读 · 0 评论 -
栈的代码实现(python语言)
- 栈和队列都是(临时性的)保存数据元素的容器 - 栈是保证缓冲元素后进先出 - 队列是保证缓冲元素的先进先出栈# 定义一个连续表(list)实现的栈class ContinuityStack(): def __init__(self): # 建立空栈 self.elems = [] def is_empty(self): # 栈的判空...原创 2018-05-26 19:00:08 · 832 阅读 · 0 评论 -
优先队列的堆实现(python语言)
# -*- coding: UTF-8 -*-class PrioQueue: # 优先队列类 def __init__(self, elist=[]): # 新建 self._elems = list(elist) if elist: self.buildheap() # 新建堆 def is_empty(se...原创 2018-06-06 19:49:31 · 911 阅读 · 0 评论 -
(八大)排序 (python语言)
插入排序 思想:将一组数组分为有序组和待插入组两组,将待插入组的元素依次与有序组元素比较找到合适的位置插入。# -*- coding: UTF-8 -*-def main(): list_1 = [4, 6, 8, 4, 6, 1, 6, 8, 7, 4] for i in range(len(list_1)): for j in ran...原创 2018-11-11 16:03:06 · 247 阅读 · 0 评论 -
字典和集合(python语言)
# -*- coding: UTF-8 -*-class Assoc: def __init__(self, key, value): self.key = key self.value = value def __Lt__(self, other): return self.key < other.key d...原创 2018-06-11 22:37:36 · 182 阅读 · 0 评论 -
优先队列的连续表实现(python语言)
class PrioQue: # 定义一个优先队列类 def init(self, lst=[]): self.elems = sorted(lst)def enqueue(self, e): # 插入元素 i = len(self.elems) - 1 while i &gt;= 0: if self.elems[i] &lt;...原创 2018-05-27 13:43:12 · 190 阅读 · 0 评论 -
二叉树的应用:表达树的代码实现(python语言)
def make_sum(a, b): # 加 return ['+', a, b]def make_prod(a, b): # 乘 return ['*', a, b]def make_diff(a, b): # 减 return ['-', a, b]def make_div(a, b): # 除 return ['/', a,...原创 2018-05-27 11:58:35 · 1387 阅读 · 0 评论