自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 收藏
  • 关注

原创 算法导论第12章python代码

第十二章 二叉搜索树文章目录12.1二叉搜索树12.1二叉搜索树1、二叉搜索树的递归遍历(中序、先序,后序)class TreeNode(object): def __init__(self, x): self.val = x self.left = None self.right = Noneclass Solution(): # 中序遍历 左中右 def inorderTree(self, root):

2022-01-12 17:28:51 306

原创 第十章 基本数据结构

文章目录10.1 栈和队列10.2 链表10.2-210.2-3 单链表实现队列10.2-5 使用单向循环链表表实现字典10.4-210.1 栈和队列class Stack(object): def __init__(self, limit=3): self.stack = [] # 存放元素 self.limit = limit # 栈容量极限 def push(self, data): # 判断栈是否溢出 if len(self

2021-12-25 16:43:36 315

原创 十大排序算法总结

文章目录1、插入排序2、选择排序3、冒泡排序4、归并排序5、快速排序6、堆排序7、计数排序8、基数排序9、桶排序10、希尔排序1、插入排序遍历列表的第二个元素到最后一个元素,每次拿后面的元素与前面的元素做比较找到合适的插入位置采用一个for循环套一个while循环实现。2、选择排序首先找出最小的元素与A[0]交换,再找出第二小的元素与A[1]交换,依次类推每次找出剩下元素中最小的元素。3、冒泡排序元素从左至右两两循环,将小的元素放在前面,采用双重for循环实现4、归并排序分函数将待排元

2021-12-18 10:34:54 217

原创 算法导论第九章中位数和顺序统计量

文章目录9.1最小值和最大值练习 9.1-1 找到第二最小值9.2 期望为线性时间的选择算法练习9.2-1练习9.2-39.3最坏情况为线性时间的选择算法9.1最小值和最大值1、从n个数中无论是只找到最小值还是最大值都需要(n−1)(n-1)(n−1)次比较2、同时找到最大值和最小值则至多需要⌊3n2⌋\lfloor 3\frac{n}{2} \rfloor⌊32n​⌋nnn为奇数n为偶数练习 9.1-1 找到第二最小值第一步:找到最小的元素需要(n−1)(n-1)(n−1)次比较第二步

2021-12-18 08:38:25 163

原创 算法导论第八章——线性时间排序

文章目录8.1排序算法的下界8.2 计数排序8.3 基数排序8.4 桶排序8.1排序算法的下界算法最好情况最糟情况平均情况是否原址插入排序Θ(n)\Theta(n)Θ(n)Θ(n2)\Theta(n^2)Θ(n2)Θ(n2)\Theta(n^2)Θ(n2)原址冒泡排序Θ(n)\Theta(n)Θ(n)Θ(n2)\Theta(n^2)Θ(n2)Θ(n2)\Theta(n^2)Θ(n2)原址选择排序Θ(n2)\Theta(n^2)Θ(n2)Θ(n2)

2021-12-14 15:53:08 358

原创 算法导论第七章—快排

文章目录7.1快排算法的描述7.1练习7.1-17.1快排算法的描述采用了分治思想,原址排序PARTITION采用双指针分治: 将A[p,……,r]A[p,……,r]A[p,……,r],划分为L=A[p,……,q−1]L=A[p,……,q-1]L=A[p,……,q−1] 和 R=A[q+1,……,r]R=A[q+1,……,r]R=A[q+1,……,r] ,其中LLL中元素都小于A[q]A[q]A[q] , RRR都大于A[q]A[q]A[q]。解决: 递归调用快排对LLL和RRR进行排序合并:

2021-12-13 13:57:48 571

原创 第六章 堆排序总结

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录第六章总结思考题 6-2(对d叉堆的分析)第六章总结思考题 6-2(对d叉堆的分析)a、 父结点:(i−1)//d(i-1)//d(i−1)//d; 子结点:i∗d+ji*d+ji∗d+jb、Θ(logdn)\Theta(log_dn)Θ(logd​n)'''6-2 d叉堆'''def PARENT(i): return (i - 1) // 3def CHILD(i, j): return

2021-12-11 16:14:37 726

原创 算法导论第六章

文章目录6.1堆6.1练习6.1-16.1-26.1-46.1-56.1-66.2 维护堆的性质6.2练习6.2-16.2-26.2-36.2-46.2-56.3建堆6.3练习6.3-16.3-26.3-36.4堆排序算法6.4练习6.4-26.4-36.1堆完全二叉树:所有叶结点深度相同,所有内部结点度为2.(二叉)堆: 是一个数组,可以被看成一个近似的完全二叉树。最大堆: 最大堆是指除了根以外的所有结点iii都要满足: A[PARENT(i)]⩾A[i]A[PARENT(i)]\geqsl

2021-12-07 16:16:20 587

原创 算法导论第一部分总结

2021-12-02 15:32:33 143

原创 算法导论第五章概率分析和随机算法

文章目录5.1雇佣问题5.2示性函数5.2-15.2-25.2-35.3随机算法5.3-15.3-25.3-35.3-45.3-6总结5.1雇佣问题概率分析概率分析是在问题分析中应用概率的理念,大多数情况,我们采用概率分析来分析一个算法的运行时间,对所有可能的输入产生的运行时间取平均,当报告此类的运行时间时,称其为平均情况运行时间。随机算法如果一个算法的表现不仅由输入决定,而且也由随机数生成器产生的数值决定,则称这个算法是随机的。称一个随机算法的运行时间为期望运行时间。5.2示性函

2021-12-01 16:20:17 833

原创 算法导论练习题4.1-4.2

文章目录4.1最大子数组4.1-14.1-24.1-44-1.54.2矩阵乘法的Strassen算法4.1最大子数组按照书中分治思想的代码:def find_max_crossing_subarray(A, low, high): left_sum = -float('inf') S_left = 0 mid = (low + high) // 2 for i in range(mid, low - 1, -1): S_left = S_left +

2021-11-24 18:52:03 459

原创 算法导论第二章总结

文章目录一、算法二、时间复杂度一、算法1.插入排序:遍历列表的第二个元素到最后一个元素,每次拿后面的元素与前面排好的元素作比较找到合适的插入位置。(采用一个for循环一个while循环)2.选择排序:首先找出A中最小的元素,将其与A[1]A[1]A[1]互换,接着找出A中次最小的元素将其与A[2]A[2]A[2]互换。对A中的前n−1n-1n−1个元素采照该方式继续。(找到A中剩余元素中最小索引的python代码A.index(min(A[K::])3.归并排序:采用分治的思想,已知拆分A直到剩余

2021-11-18 15:12:02 102

原创 算法导论练习题2.2

文章目录2.3分治算法习题2.3-2习题2.3-3习题2.3-4习题2.3-5习题2.3-6习题2.3-7总结2.3分治算法将原问题分解为几个规模较小但类似于原问题的子问题,递归的求解这些子问题,然后再合并这些子问题的解来建立原问题的解。分解—解决—合并θ\thetaθ=(nlglglgn)按照书中的方式编写的代码,采用两个函数递归调用:# merge(合并)函数在改写Adef merge(A, p, q, r): n_1 = q - p + 1 n_2 = r - q

2021-11-18 14:16:24 579

原创 算法导论练习题2.1

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档算法导论-插入排序一、2.1插入排序二、练习2.1-22.1-32.1-4总结一、2.1插入排序二、练习2.1-2代码如下(示例):class Solution(object): def generate(self, A): """ :type numRows: int :rtype: List[List[int]] """ for j in

2021-11-16 14:41:20 995

空空如也

空空如也

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

TA关注的人

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