![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 54
pia君
菜鸟一枚
展开
-
递归时间复杂度分析——master公式
若递归可以写成如下形式:T(n)=aT(nb)+O(nd)T(n) = aT(\frac{n}{b})+O(n^d)T(n)=aT(bn)+O(nd)则时间复杂度计算如下:if logba>d\log_ba > dlogba>d ,复杂度为O(Nlogba)O(N^{\log_ba})O(Nlogba)if logba=d\log_ba = dlogba=d ,复杂度为O(Nd∗logN)O(N^{d*logN})O(Nd∗logN)if logba<原创 2021-01-03 18:50:46 · 380 阅读 · 0 评论 -
用二叉堆实现优先队列 Priority Queue
优先队列出队跟队列一样,从队首出队;但队内的次序由优先级决定,即优先级高的数据项可以插队,排到前面。二叉堆能够将优先队列的入队和出队复杂度都保持在O(logn)完全二叉树,如果用顺序表来表示的话,设根节点下标为1,若某节点下标为p,则其左子节点下标为2p,右子节点下标为2p+1,父节点下标为p//2.最小二叉堆代码:class BinaryHeap: def __init__(se...原创 2020-04-30 19:50:56 · 235 阅读 · 0 评论 -
抽象数据类型 “映射” :ADT Map
字典,通过保存key-data键值对的数据类型。ADT Map的结构是键值关联的无序集合。其中关键码key具有唯一性,通过关键码可以唯一确定一个数据值。通过散列表构造Map。class HashTable: def __init__(self): self.size=11 #可以任意设置,但为了便于求解,应该设为素数 self.slots=[None...原创 2020-04-29 22:11:35 · 740 阅读 · 0 评论 -
散列(Hashing) 的基本概念
查找的次数降低到常数级别。即事先知道要查找的数据项应该出现在什么位置。散列表(hash table, 哈希表),表中的每一个存储位置,成为槽(slot),可以用来保存数据项,每个槽有一个唯一的名称。有利于快速的查找定位。散列函数:实现从数据项到存储槽名称的转换的函数。常用的散列方法是求余数,将数据项除以散列表的大小,得到的余数作为槽号。完美散列函数:如果一个散列函数能把每个数据项映射到不同...原创 2020-04-29 19:09:54 · 840 阅读 · 0 评论 -
查找算法——顺序查找、二分查找
顺序查找无序查找def sequentialSearch(alist,item): pos=0 found=False while pos<len(alist) and found==False: if alist[pos]==item: found=True else: pos+=1...原创 2020-04-28 19:13:46 · 202 阅读 · 0 评论 -
递归、分形树、动态规划、背包问题
递归三定律1. 必须有一个基本结束条件(对最小规模问题的直接解决)2. 必须能改变状态向基本结束条件严禁(减小问题规模)3. 必须调用自身(把问题分解成规模更小的相同问题)递归为自顶向下求解,把最大规模逐步分解为小规模。原创 2020-04-28 03:46:59 · 250 阅读 · 0 评论 -
用链表实现有序表
有序表就是表中的元素是按一定的逻辑顺序排列的,如按照数字大小排列,或字符的大小排列等等。使用链表进行一个构造由小到大排列的有序表。当加入新的数据时,需要对当前表中的数据进行比较,找到第一个比自己大的值,然后再插入。当进行搜索时,只要当前值比要搜索值大,则无需进行后面部分的遍历,直接返回False。class Node: def __init__(self,item): ...原创 2020-04-23 04:04:20 · 647 阅读 · 1 评论 -
找到数组中最大(最小)的k个数 python解法
方法一:内置函数sorted()def getLeastNumbers(self, arr: List[int], k: int) -> List[int]: return sorted(arr)[:k]sorted()内部的排序方法为归并排序时间复杂度O(nlogn) 空间复杂度O(logn)...原创 2020-04-09 02:08:24 · 4065 阅读 · 0 评论 -
树,表达式解析树
树的特点(1)每个节点有0个或多个子节点(2)没有父节点的节点称为根节点(3)每一个非根节点有且只有一个父节点(4)除根节点外,每个子节点可以分为多个不相交的子树二叉树每个节点最多有两个子节点。性质1: 在二叉树的第i层上至多有2(i-1)个结点(i>0)性质2: 深度为k的二叉树至多有2(k-1)个结点(k>0)性质3: 对于任意一棵二叉树,如果其叶结点数为...原创 2020-03-18 03:43:29 · 557 阅读 · 0 评论 -
排序算法
目录冒泡排序 **O(n^2^)**选择排序冒泡排序 O(n2)第一次循环 j=0,下标从0比到n-1第二次循环 j=1,下标从1比到n-2第二次循环 j=2,下标从2比到n-3……第 j+1次循环 j=j , 下标从1比到n-1-jdef bubble_sort(alist): n = len(alist) for j in range(n-...原创 2020-03-17 21:20:00 · 95 阅读 · 0 评论 -
栈和队列
栈线性表描述数据如何存放,栈描述数据如何进行操作。栈(stack)只允许元素在一端(栈顶,top)进行加入数据(push)和推出数据(pop)的运算,后进先出(LIFO,Last In First Out)。栈结构的实现栈可以用顺序表,也可以用链表。栈的操作:Stack()创建一个空栈push(item)压栈,添加新元素到栈顶pop()出栈,弹出栈顶元素peek()返回栈...原创 2020-03-15 18:06:12 · 123 阅读 · 0 评论 -
链表
线性表有两种:顺序表和链表单链表链表的一个结点包含 数据区和连接区。箭头方向为单方向的为单向链表,也叫单链表。需要有一个头节点p指向单链表的头第一个节点的位置,表示单链表的地址,最后一个位置为尾结点,指向空。图python中如何赋值变量的本质a=10先找到一块内存,存放整数10,然后再找到一块内存a,存放整数10所在的地址,从而建立连接。a=10 表示a所存储的内容指向10所在的地...原创 2020-03-15 03:49:31 · 276 阅读 · 0 评论 -
顺序表
顺序表的基本布局,表头位置,即容量扩展。原创 2020-03-12 17:42:12 · 84 阅读 · 0 评论 -
时间复杂度
数据结构与算法 时间复杂度原创 2020-03-12 02:21:42 · 113 阅读 · 0 评论