文章分类 -  算法和数据结构

数据结构和算法刷题
摘要:常用内置的数据类型:list, tuple, dict, set, frozensetcollectionsheapq:堆bisect:二分相关 阅读全文
posted @ 2020-05-05 03:02 SBJBA 阅读(131) 评论(0) 推荐(0)
摘要:""" 二叉查找树:BST: 每个节点包含一个`key`和他附带的数据,对于每个内部节点`V` 所有`key`都小于`V`的都被存储在`V`的左子树 所有`key`小于`V`的都存储在`V`的右子树 时间复杂度:O(n) """ class BSTNode(object): def __init__ 阅读全文
posted @ 2020-05-05 02:51 SBJBA 阅读(248) 评论(0) 推荐(0)
摘要:""" first in first out 高优先级的先出, """ class Array(object): def __init__(self, size=32): self.size = size self.items = [None]*self.size def __getitem__(s 阅读全文
posted @ 2020-05-05 02:50 SBJBA 阅读(84) 评论(0) 推荐(0)
摘要:""" 堆是一种完全二叉树,有最大堆和最小堆 完全二叉树:叶子节点从左到右填充 最大堆:孩子的值大于父亲的值,root的值最大 最小堆:父亲的值大于孩子的值,root的值最小 堆的操作: 插入节点 删除节点 对于一个节点n,n的孩子的节点的下标是 n*2+1,n*2+2,其父节点是 int((n-1 阅读全文
posted @ 2020-05-05 02:48 SBJBA 阅读(106) 评论(0) 推荐(0)
摘要:""" 树: 树结构是一种包含节点(nodes)和边(edges)的拥有层级关系的一种结构 一些概念: 根节点:root 路径:path 父亲:parent 孩子:children 兄弟:siblings 子树:subtree 叶子节点:leafnode 二叉树: 每个节点对多只能包含两个孩子 一些 阅读全文
posted @ 2020-05-05 02:47 SBJBA 阅读(67) 评论(0) 推荐(0)
摘要:""" 分治法: 归并排序: 分解原问题为若干个子问题,解决这些子问题 递归求解子问题 合并子问题的解,成为原问题的解 """ '''快速排序非常重要,很多内置排序都使用这个算法''' def quick_sort(seq): if len(seq) <= 1: # 设置递归出口 return se 阅读全文
posted @ 2020-05-05 02:46 SBJBA 阅读(94) 评论(0) 推荐(0)
摘要:""" 分治法: 归并排序:分解原问题为若干个子问题,解决这些子问题,递归求解子问题 合并子问题的解,成为原问题的解 """ def merge_sort(seq): if len(seq) <= 1: return seq else: mid = int(len(seq)/2) left_half 阅读全文
posted @ 2020-05-05 02:45 SBJBA 阅读(111) 评论(0) 推荐(0)
摘要:''' 原理: balabala ''' import random def bubble_sort(seq): n = len(seq) for i in range(n-1): for j in range(n-i-1): if seq[j] > seq[j+1]: seq[j], seq[j+ 阅读全文
posted @ 2020-05-05 02:44 SBJBA 阅读(97) 评论(0) 推荐(0)
摘要:import random # 线性查找 number_list = [0,1,2,3,4,5,6,7,8,9] def linear_search(val, iterable): for index, value in enumerate(iterable): if value == val: r 阅读全文
posted @ 2020-05-05 02:43 SBJBA 阅读(127) 评论(0) 推荐(0)
摘要:dict: """ 哈希表,实现字典 """ class MyArray(object): def __init__(self, size=32, init=None): self.size = size self._items = [init]*self.size def __getitem__( 阅读全文
posted @ 2020-05-05 02:42 SBJBA 阅读(169) 评论(0) 推荐(0)
摘要:""" 哈希表,也叫做散列表: 原理:balabala 实现过程:balabala 几个概念: 哈希函数:用于实现冲突最小化 装载因子:控制实现槽的数量的最优化,当槽的数量不够用时,进行重哈希操作,实现扩容 给定一个能存放n个元素的,具有m个槽位的散列表T,装在因子a=n/m, 重哈希:开辟新的空间 阅读全文
posted @ 2020-05-05 02:40 SBJBA 阅读(110) 评论(0) 推荐(0)
摘要:""" 栈(stack) 概念1:内存当中的栈区,函数的临时变量之类的都是存储在栈区里边的 概念2:数据结构,先入后出, last in first out, LIFO 操作: push pop """ # ######################################### # 先实 阅读全文
posted @ 2020-05-05 02:39 SBJBA 阅读(69) 评论(0) 推荐(0)
摘要:单链表实现队列 """ 队列: 先进先出, 左出右进, first in first out, FIFO 实现: 单链表, 双链表, 数组 方法: 入队 push 出队 pop """ # ###################################################### 阅读全文
posted @ 2020-05-05 02:38 SBJBA 阅读(83) 评论(0) 推荐(0)
摘要:单链表: """ 线性结构:内存是连续的,可通过下标访问 链式结构: 内存不连续,不能通过下标访问 追加的方式会很方便,直接放到后面就可以了 遍历操作,find 方法会比较麻烦 单链表: root(入口) --> head --> ... --> tail(尾节点) Node: value 和 ne 阅读全文
posted @ 2020-05-05 02:36 SBJBA 阅读(75) 评论(0) 推荐(0)
摘要:""" 线性结构: 特点:内存连续,下标访问 ## array(python内置了array): 缺陷:只能存同一类型,只能存比较基本的数值,字符类型 一般用的不多,常用numpy ## list init:新建了一个 PyListObject 对象;O(1) append: 最开始先分派4个 Py 阅读全文
posted @ 2020-05-05 02:34 SBJBA 阅读(432) 评论(0) 推荐(0)
摘要:def insert_sort(seq): for j in range(1, len(seq)): target = seq[j] index = j while index > 0 and seq[index-1] > target: seq[index] = seq[index-1] inde 阅读全文
posted @ 2020-05-05 02:32 SBJBA 阅读(47) 评论(0) 推荐(0)