数据结构与算法python版
文章平均质量分 83
巴涅波赫夫
这个作者很懒,什么都没留下…
展开
-
Manache(马拉车)算法基本原理与python实现
马拉车算法:在元素向两边扩散进行查找的基本思路不变的情况下,充分利用回文串的对称性,大幅减少算法时间的一种算法(时间复杂度o(n))。字符的处理在每个字符和字符串开头与结尾都添加上特殊符号“#”。然后在两端分别加入一个全新的符号,这样可以省去边界的判断。如”aba“可以改写成”@#a#b#a#$“。几个重要变量的初始化建立列表p,并给其添加和字符串等数量的0,之后会用来记录每个元素向两边扩散所能达到的最大回文长度。将max_right,max_mid_index初始...原创 2020-08-20 04:50:12 · 1023 阅读 · 0 评论 -
最小生成树之克鲁斯卡尔算法的python实现
最小生成树之克鲁斯卡尔算法的python实现克鲁斯卡尔算法是求连通网的最小生成树的另一种方法。与普里姆算法不同,它适合于求边稀疏的网的最小生成树。算法思路利用字典建立图以字典的形式建立加权连通图,通常以各顶点为字典的键,与该顶点所能连通的其余顶点再次构成一个子字典。这个子字典的键为所能连通的顶点,值为这个有向边的权重。这个子字典则构成了一个完整的值。例如以下加权连通图:可表示为:graph = { 0: {1: 4, 7: 8},...原创 2020-08-06 15:46:59 · 1175 阅读 · 0 评论 -
最小生成树之普利姆(prim)算法的python实现
普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索得到最小生成树。最小生成树即在一个带权连通图中,不但包括了连通图里的所有顶点,且其所有边的权值之和亦为最小。算法思路利用字典建立图以字典的形式建立加权连通图,通常以各顶点为字典的键,与该顶点所能连通的其余顶点再次构成一个子字典。这个子字典的键为所能连通的顶点,值为这个有向边的权重。这个子字典则构成了一个完整的值。例如以下加权连通图:可表示为:graph = { 0: {1: ......原创 2020-08-05 00:54:20 · 3951 阅读 · 5 评论 -
利用python实现栈(Stack)的操作
定义一种有次序的数据项集合,在栈中,数据项的加入和移除都仅发生在同一端。这一端叫做栈“顶top”,另一端叫栈“底base”。日常生活中有很多栈的应用,盘子、托盘、书堆等等都属于栈。性质1.后进先出距离栈底越近的数据项,留在栈中的时间就越长,而最新加入栈的数据项会被最先移除。这种次序通常称为“后进先出LIFO”:Lats in First out这是一种基于数据项保...原创 2019-12-12 14:00:19 · 4022 阅读 · 0 评论 -
利用python理解时间复杂度,以及list、dict常用操作的时间复杂度
算法时间复杂度的定义在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间度量,记作:T(n) = O(f(n))。它表示随问题规模n的增大,算法的执行时间的增长率和f(n)的增长率相同,称作算法的渐进时间复杂度,简称为时间复杂度。其中f(n)是问题规模n的某个函数。(关键就是需要知道执行次...原创 2019-12-12 13:50:44 · 1873 阅读 · 0 评论