![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
python算法与数据结构
Python_Heaven
这个作者很懒,什么都没留下…
展开
-
动态规划的案例python(2)
1题目:给一个数组和一个数,从这个数组找出几个数的和是这个数。比如{3,34,4,12,5,2} 9,如果可以找到比如4+5=9,则返回True动态规划分析:arr = {3,34,4,12,5,2}下标i:0 1 2 3 4 5这里我们设置函数subset(i, s), 我们输入i 是下标,s是要组合的数。开始当i 是5时,表示为subset(arr[5],9),...原创 2020-04-12 21:15:08 · 280 阅读 · 0 评论 -
动态规划的案例python(1)
1:题目:一组数中不能相邻的几个数选出来组成的和最大比如[4,1,1,9,1] 我们可以选择[4,1,1],[1,9],[4,9],但是只有[4,9]比较大例如:标号i:0 1 2 3 4 5 6 —arr: 1 2 4 1 7 8 3分析设opt(i) 为最佳选法。我们倒着看,开始是opt(6),如果选6号位的3,我们就只能选opt(4)+3,如果不选3,就选opt(5...原创 2020-04-12 20:44:39 · 125 阅读 · 0 评论 -
通过先序和中序遍历重建二叉树
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。# -*- coding:utf-8 -*-# class TreeNode:# def __init__(self, x):# ...原创 2020-04-11 00:15:40 · 230 阅读 · 0 评论 -
python算法与数据结构(22)图
有向图和无向图。把图变成代码,可以使用邻接矩阵。"""构造图"""from collections import dequeGRAPH = { "A": ["B", "F"], "B": ["C", "I", "G"], "C": ["B", "I", "D"], "D": ["C", "I", "G", "H", "E"], "E": ["D",...原创 2020-03-08 15:32:48 · 125 阅读 · 0 评论 -
python算法与数据结构(21)二叉查找树
二叉查找树,所有左子树key的值都比根小,所有右子树都比他大。中序遍历,就是从小到大。BST查找操作,从根节点开始,search_key大于当前key,去右子树找,否则去左子树找。插入操作。class BSTNode(object): def __init__(self, key, value, left=None, right=None): self.key, ...原创 2020-03-08 14:58:28 · 113 阅读 · 0 评论 -
python算法与数据结构(20)优先级队列
优先级队列Queue : FIFOTDD方式写代码,先写测试代码。def test_priority_queue(): size = 5 pq = PriorityQueue(size) pq.push(5, 'purple') pq.push(0, 'white') pq.push(3, 'orange') pq.push(1, 'black...原创 2020-03-07 19:01:14 · 115 阅读 · 0 评论 -
python算法与数据结构(19)堆
堆:一种完全二叉树,有最大堆和最小堆两种。最大堆:根总是最大值,最小的值存储在叶节点中,最小堆:每个非叶子节点的两个孩子的值都比它大。堆的操作:插入新的值,依然保证堆的最大堆或者最小堆的结构。删除一个值。堆的表示:使用数组表示堆。parent = int(i-1)/2left = 2i +1right = 2i+2class Array(object): def __i...原创 2020-03-07 18:37:43 · 100 阅读 · 0 评论 -
python算法与数据结构(18)树与二叉树
tree 父节点,儿子节点,兄弟节点,子树,叶子节点(没有子节点的节点)。二叉树,节点深度,树的高度(节点深度+1),树的宽度(最多节点的层级的节点数),数的size(二叉树的节点总个数)。满二叉树完美二叉树完全二叉树...原创 2020-03-07 11:34:47 · 117 阅读 · 0 评论 -
python算法与数据结构(17)快速排序
快速排序也是分治法。很多标准语言的排序方法,最优的算法复杂度比较好。原理:定一个主元,左边指针从左往右,右边指针从右往左,把与主元小的元素,把主元函数和这个元素调换位置。方案1 :缺点需要额外内存空间def quicksort(array): if len(array) < 2: return array else: pivot_ind...原创 2020-03-06 23:45:28 · 123 阅读 · 0 评论 -
python算法与数据结构(16)归并排序,分治法
归并排序,分治法有递归。def merge_sort(seq): if len(seq) <= 1: return seq else: mid = int(len(seq) / 2) left_half = merge_sort(seq[:mid]) right_half = merge_sort(seq[m...原创 2020-03-06 22:10:06 · 115 阅读 · 0 评论 -
python算法与数据结构(15)冒泡排序,选择排序,插入排序
1冒泡排序import randomdef bubble_sorted(list): n = len(list) for j in range(0, n - 1): # 最后一次不用排序 for i in range(0, n - 1 - j): # 每轮排序后面j位已经排好了。 if list[i] > list[i + 1...原创 2020-03-06 21:15:41 · 135 阅读 · 0 评论 -
python算法与数据结构(14)线性查找和二分查找
线性查找:number_list = [0, 1, 2, 3, 4, 5, 6, 7]def linear_search(value, iterable): for index, val in enumerate(iterable): if val == value: return index return -1def test_l...原创 2020-03-06 13:15:00 · 176 阅读 · 0 评论 -
python算法与数据结构(13)递归
递归:自己调用自己。需要递归出口返回。def fact(n): # 阶乘 if n == 0: return 1 else: return n * fact(n-1)print(fact(3))调用栈,每次递归都会分配新的内存,类似于调用栈。"""打印1到10序列"""def print_num_recursive(n): i...原创 2020-03-06 11:56:47 · 177 阅读 · 0 评论 -
python算法与数据结构(12)使用hash表实现set集合
离散数学。交集,并集,差集实现一个set ADT:为了看起来方便,还是先把hash表拷贝过来。class Array(object): def __init__(self, size=32, init=None): self._size = size self._items = [None] * size def __getitem__(se...原创 2020-03-05 23:12:11 · 232 阅读 · 0 评论 -
python算法与数据结构(11)使用hash表实现dict
使用hash表实现dict ADTHASH表代码拷贝过来class Array(object): def __init__(self, size=32, init=None): self._size = size self._items = [None] * size def __getitem__(self, index): ...原创 2020-03-05 21:44:27 · 193 阅读 · 0 评论 -
python算法与数据结构(10)哈希表
哈希表:也叫散列表。给每个元素一种逻辑下标,直接可以找到。哈希函数计算逻辑下表h(key) = key%x哈希冲突链接法:缺点哈希函数选的不好,冲突太多链会变长。开放寻址法。当一个槽被占用,采用一种方式寻找下一个可用的槽:1.线性探查:当一个槽被占用,找下一个可用的槽2.二次探查,当一个槽被占用,以二次方作为偏移量。3.双重散列:重新计算hash结果。哈希函数装载因子load...原创 2020-03-05 20:41:21 · 141 阅读 · 0 评论 -
python算法与数据结构(9)栈溢出和时间复杂度
1 栈溢出def infinite_fib(n): return infinite_fib(n-1) + infinite_fib(n-2)if __name__ == '__main__': infinite_fib(10)因为无穷递归栈溢出报错:RecursionError: maximum recursion depth exceeded2 时间复杂度2n^2...原创 2020-03-05 11:50:48 · 109 阅读 · 0 评论 -
python算法与数据结构(8)栈,循环双端链表实现栈
栈stack:栈区,后进先出LIFO结构。ADT: datamethod:push,pop使用双端队列实现栈。deque模拟stackclass Node(object): def __init__(self, value=None, prev=None, next=None): self.value, self.prev, self.next = value, ...原创 2020-03-04 21:23:36 · 210 阅读 · 0 评论 -
python算法与数据结构(7)数组实现队列
队列:先进先出。通过指针前移,模拟队列,必须保证队列长度小于数组长度。size取模操作/数组size,方便观看,先把数组代码拷贝过来,class Array(object): def __init__(self, size=32): self._size = size self._items = [None] * size def __ge...原创 2020-03-04 00:00:21 · 199 阅读 · 0 评论 -
python算法与数据结构(6)队列,单链表实现队列
队列:先进先出。 FIFO结构。5,4,3,2,1如何FIFO呢?已经学了array(数组) ,list(列表), linkedlist(单链表), DLL(双链表)队列实现需要push(入队)和从队首pop(出队)list 插入时间复杂度较高,单链表:popleft和append都是O(1)。可以使用。双链表:也可以用,但是实现相对复杂。这里使用单链表实现队列:方便查看直接把04...原创 2020-03-03 18:04:06 · 255 阅读 · 0 评论 -
python算法与数据结构(5)循环双端链表
单链表是单向的,缺点是remove删除是 o(n)。双链表: 每个链有三个元素:指向前面的指针,值,指向后面的指针。data: maxsize, root, lengthmethod: headnode, tailnode ,append, appendleft, remove(O(1)),iter_node, iter_node_reverse(反向遍历)class Node(objec...原创 2020-03-03 15:59:31 · 154 阅读 · 0 评论 -
python算法与数据结构(4)单链表
线性: 内存连续,下标结构链式: 不连续,无下标,append(追加方便)find(遍历)单链:root ( 入口) --> head(头节点)–>node/next( 节点和指针)–>… tail (尾节点)linked list data : root ,lengthmethod: init , append, append left, iter_node...原创 2020-03-02 17:43:27 · 114 阅读 · 0 评论 -
python算法与数据结构(3)数组和列表
线性结构:内存连续,可以下标访问1 python array(数组)存放同一类型,数字或者字符,numpy array.2 list 列表append 分配策略是0 2 4 8内存空间 O(1)insert 从中间插入需要重新开辟空间 O(n)pop 从最后弹出 O(1) 从中间删除则O(n)remove 把一个拿掉,每个往前移 O(1) O(n)...原创 2020-03-02 11:39:31 · 156 阅读 · 0 评论 -
python算法与数据结构(1)
初中级算法why : 面试 ,代码高效,系统设计。what: C =AL+D 代码等于算法加数据结构D: array, list ,linked list, set, heap,dict,queue,stackA: search,sorthow: 理解 手动模拟, 代码实现原理和实现,时间复杂度,时间空间权衡,使用场景。...原创 2020-03-01 11:13:22 · 90 阅读 · 0 评论 -
python算法与数据结构(2)抽象数据类型和面向对象编程
抽象数据类型和面向对象编程class 包含 data methodADT Abstract Data Type 抽象数据类型Bag data: 容器method : addremoveleniter做一个抽象数据类型,包含数据和方法,方法包含添加数据,删除数据,数据长度,迭代数据。class Bag(object): def __init__(self, maxsize...原创 2020-03-01 12:40:00 · 218 阅读 · 0 评论