数据结构与算法python
坤坤子的世界
人之能,不仅在学,且在悟,悟之根本,不在少学,在难后重学,大难而有大悟,始得大成。
展开
-
图python(数据结构与算法)-----最小生成树
连通图:在无向图中,若从顶点v到顶点v'有路径,则称v和v'是连通的,若在改图中的任意两个顶点之间都是连通的,则称其为连通图。生成树某一个具有n个顶点的连通图的生成树是该图的极小连通子图,生成树包含这一连通图中的n个顶点和n-1条边。连通图的生成树是图的极小连通子图,它包含了图中的全部顶点,一个只有n个顶点的连通图的生成树只有n-1条边,若有n个顶点而少于n-1条边,则为非连通图,若多余N-1条边,则一定形成回路。最小生成树:通常把各边带权的连通图称为连通网,在某一连通网的所原创 2020-06-06 15:29:20 · 1010 阅读 · 0 评论 -
图python(数据结果与算法)---遍历
图遍历是指:从任意一个顶点出发对图中每个顶点访问且仅访问一次的过程。因为图中可能存在回路,为了避免对一个顶点的重复访问可以增设一个辅助的数组visited[],全部初始化为0,一旦访问过,置位visited[i] = 1,:图的遍历比较复杂,需要考虑:指定遍历的第一个顶点 由于一个顶点和多个顶点的相邻,需要在多个邻接顶点间确定访问次序 由于图中存在回路,必须对访问过的顶点做标记,防止出现重复访问同一顶点的情况。图的遍历可分为:深度优先遍历 广度优先遍历1图的广度优先搜索算法(B原创 2020-06-04 20:25:05 · 728 阅读 · 0 评论 -
图python(数据结构与算法)---实现
图的存储结构1邻接矩阵表示法存储方式是用两个数组来表示图,一个一维数组表示图中顶点的信息,一个二维数组表示存储图中的边的信息。即边采用顺序存储结构,用二维数组存储,称为图的邻接矩阵1.1 无向图邻接矩阵表达无向图,邻接矩阵一定是对称的,而且对角线一定为01.2 有向图邻接表达1.3带权邻接表达,对顶点之间没有联系的,用无穷大表示。分析可得:在无向图的邻接矩阵中的第i 行或者第i 列的非零元素的个数,为第i个顶点的度;在有向图中邻接矩阵中的第i行的非00原创 2020-06-04 16:13:58 · 1210 阅读 · 1 评论 -
图python(数据结构与算法)---基础概念
图的基本概念图是对象的一个集合,每一个对象称为顶点,顶点之间的成对链接称为边,通常表示为:G(V,E),其中G表示一个图,V表示G中的顶点的集合,E是图G中边的集合。图的种类:1无向图:如果图中任意顶点之间的边都是无向边,则称图为无向图:2有向图若从顶点V到顶点W的边有方向,则称这条边为有向边,图中的顶点V和顶点W的关系可以用有序的对<v,w>表示,它是从v到w的一条弧,其中v被称为弧尾或者初始点,w 被称为弧头或者终端点。如果任意两个顶点之间的边都是有向的边,则称为原创 2020-05-25 11:34:34 · 1020 阅读 · 0 评论 -
树python(数据结构与算法)--树的遍历
树的遍历树的遍历是树的一种重要的运算。所谓遍历是指对树中所有结点的信息的访问,即依次对树中每个结点访问一次且仅访问一次,我们把这种对所有节点的访问称为遍历(traversal)。那么树的两种重要的遍历模式是:深度优先遍历,深度优先一般用递归 广度优先遍历,广度优先一般用队列深度优先遍历对于一颗二叉树,深度优先搜索(Depth First Search)是沿着树的深度遍历树的节点,尽可能深的搜索树的分支。那么深度遍历有重要的三种方法。这三种方式常被用于访问树的节点,它们之间的不同在于访问每原创 2020-05-18 21:15:13 · 1271 阅读 · 0 评论 -
树python--数据结构于算法--基础概念
树的基本定义:树是一种将元素分层次存储的抽象数据类型,除了最顶部的元素,每个元素在树中都有一个。树的术语节点的度:一个节点含有的子树的个数称为该节点的度;例如上图中根节点的度为5. 树的度:一棵树中,最大的节点的度称为树的度;例如根节点的度为5,节点6的度为2,依次计算剩余的度,最后取这13个节点度最大的值为树的度。 叶节点或终端节点:度为零的节点;例如3,12,10,20,13,3,12,; 分支节点:度不为零的节点被称为分支节点;(非终端节点,),例如,节点6,和16。原创 2020-05-15 10:16:49 · 259 阅读 · 0 评论 -
栈python(数据结构与算法)----匹配
题目:在一个用字符串描述的表达式“{[a+b]/f+(c+d)}”中存在大、中、小括弧,请编写程序,基于栈,实现对输入的一串字符串的依次扫描,并检查括号匹配成功。示例:输入样例:{{}}()(hell0){({world}{})}输出:括号匹配成功输入样例:{{}}()(hell0){({world}(})}输出:括号匹配不成功分析1假设输入样例为:{{}}()(h...原创 2020-05-04 11:35:46 · 540 阅读 · 0 评论 -
队列python(数据结构与算法)--优先队列
"""优先级队列"""#优先级队列是在普通队列的基础上将队列中的数据元素按照#关键字的值进行有序的排序 #优先级队列在队首进行删除的操作,但为了保证队列的优先级顺序#插入操作不一定在队列的尾部进行#优先级队列可以由链表和顺序表实现,#但为了快速的访问高级的元素和快速的插入元素,通常使用链式存储结构。...原创 2020-05-03 21:54:10 · 593 阅读 · 0 评论 -
队列python(数据结构与算法)--基础图解
队列的概念因为入队和出队操作分别再队尾和队首进行,所以增加front来指示对首的元素的位置,rear来指示队尾元素的下一个存储单元的位置。# -*- coding: utf-8 -*-"""Created on Thu Dec 19 09:53:44 2019@author: dell"""from abc import ABCMeta,abstractclassm...原创 2020-03-06 22:03:03 · 619 阅读 · 0 评论 -
栈python(数据结构与算法)--顺序栈+链表栈
顺序栈出栈和入栈的操作:因为入栈和出栈都在栈顶进行,所以增加变量top来指示栈顶的元素。# -*- coding: utf-8 -*-"""Created on Wed Dec 18 22:41:02 2019@author: dell"""from abc import ABCMeta,abstractclassmethod,abstractproperty#栈...原创 2020-03-03 21:55:57 · 556 阅读 · 0 评论 -
双向循环链表python(数据结构与算法)
1概念2.操作is_empty() 链表是否为空 length() 链表长度 travel() 遍历链表 add(item) 链表头部添加 append(item) 链表尾部添加 insert(pos, item) 指定位置添加 remove(item) 删除节点 search(item) 查找节点是否存在class Node(object): # 节点...原创 2020-05-06 15:59:35 · 876 阅读 · 1 评论 -
单向循环链表pytho(数据结构与算法)
单链表的一个变形是单向循环链表,链表中最后一个节点的next域不再为None,而是指向链表的头节点。操作is_empty() 判断链表是否为空 length() 返回链表的长度 travel() 遍历 add(item) 在头部添加一个节点 append(item) 在尾部添加一个节点 insert(pos, item) 在指定位置pos添加节点 remove(item...原创 2020-03-03 21:48:06 · 124 阅读 · 0 评论 -
哈希表练习题python(数据结构与算法)
哈希表主要用在计数,判断是否有重复中,另外,字典、元组是基于哈希表表实现的,故在实际应用过程中,哈希表的应用主要是字典和元组的使用。练习1给定一个字符串,统计字符串中出现的最多的字母次数。思路:使用字典统计字符串中字母的个数 找出字典中的字母出现最多def letterCounter(s): freq = {} for piece in s: ...原创 2020-03-02 15:04:37 · 1273 阅读 · 0 评论 -
双向链表python(数据结构与算法)
双向链表一种更复杂的链表是“双向链表”或“双面链表”。每个节点有两个链接:一个指向前一个节点,当此节点为第一个节点时,指向空值;而另一个指向下一个节点,当此节点为最后一个节点时,指向空值。操作is_empty() 链表是否为空 length() 链表长度 travel() 遍历链表 add(item) 链表头部添加 append(item) 链表尾部添加 insert(pos...原创 2020-03-03 21:41:37 · 190 阅读 · 0 评论 -
子序列(字符串)python(数据结构与算法)
1最长子序列:给定一个字符串“s”,和一个整数k,找到其他字符串“t”,使得‘t’是给定字符串“s”的最大子序列,同时‘t’的每一个字符在字符串中必须出现k次。示例:输入:s = "baaabaacba",k=3输出:baaabaaba2检查子序列给定两个字符串str1和str2,判断str1是否是str2的子序列,3通过删除给定字符串的字符串的字符得到字典中最长的单词...原创 2020-02-24 16:56:37 · 2442 阅读 · 0 评论 -
哈希表python(数据结构与算法)
基本概念映射:dict即字典,是python语言中重要的数据结构,在其中每一个唯一的关键字(键)都被映射到对应的值上。故将字典所表示的键和值之间的关系,通常称之为关联数组或者映射。如下图:my_dict={"name":"张三","age":21}#添加my_dict["性别"]="女"print(my_dict)print(my_dict['name'])#给定键,...原创 2020-03-03 21:36:52 · 639 阅读 · 0 评论 -
链表的排序python(数据结构与算法)
题目:用常数空间复杂度,对链表进行排序,时间复杂度为:O(nlogn)归并排序法:思路:将链表用二分法划分,然会在用双指针法,对划分的链表排序,由于链表的特殊性,中间位置的寻找,需单独完成,故最终为方便起见,分别完成二分法划分,中间位置寻找,对两个数组的排序方法。中间位置的寻找(很经典的思路)思路:使用两个指针,都指向头元素,然后一个向后移动的速度是另外一个的两倍,...原创 2020-02-10 15:08:31 · 2500 阅读 · 0 评论 -
链表的反转python(数据结构与算法)
题目:反转一个单链表例如:输入:2,3,4,5,None输出:5,4,3,2,None方法一双指针步骤:1首先使用两个指针分别指向链表第一个和第二个位置,第二指针nxt保存第二个位置,并建立为None的result,步骤2,将一个元素指向result,(result的起始值为None),将result(current保存了第一个元素的位置)和curren(nxt已经保存...原创 2020-02-08 21:32:15 · 233 阅读 · 0 评论 -
两个链表交集
题目给定两个链表,两个链表有一部分是一样,求给出两个链表交集开始的地方。方法1步骤1 ,求先求出两个链表的长度差,然后让步骤2,长度较长的链表,向后移动长度差。使得两个链表后续遍历长度相同,步骤3 ,最后移动两个指针,一次对比数据,def getIntersectionNode(headA,headB): curA,curB = headA,headB ...原创 2020-02-07 16:55:51 · 2415 阅读 · 0 评论 -
链表python(数据结构与算法)
链表的定义:不像顺序表一样连续存储数据,而是在每一个节点(数据存储单元)里存放下一个节点的位置信息(即地址),而是数组由一个一个节点组成,每个节点包含:数据部分和保存下一个数据的地址。在建立数组的时候通过添加元素的操作将数据连起来。单向链表:创建链表的过程是建立基础的节点类,节点可用一个类来实现,然后建立一个链表类,实现对节点的操作,实现链表、1 节点的实现:class ...原创 2020-02-25 18:42:29 · 403 阅读 · 0 评论 -
二维动态规划python(数据结构与算法)
题目:一个机器人被放置在棋盘的左上角,棋盘上有(m*n)个格子,机器人只可以往下移或者往右移动,机器人的目标是到达右下角,如下图所示:问:可以有多少不重复的路径,题解步骤:找出有有4个方格,6个方格,9个方格。有多少种路径,然后,找出其中的数学关系,即可推导其他有多少路径。如上图所示,机器人只下移或者右移,对第一行和第一列的所有位置来说,只有一种方式到达。即,...原创 2020-02-07 13:40:42 · 1060 阅读 · 0 评论 -
股票问题python(数据结构与算法)
题目给定一个数组,元素表示每天 的股票价格,进行一次交易(先买再卖),问如何能够得到最大利润。示例:nums = [4,1,4,7,8,1],输出:7题解:要想得到最大,就是前后差值最大,也就是找到,最小值和最大值代码实现:def maxProfit(prices): if len(prices) < 2: return 0 ...原创 2020-02-03 15:10:12 · 838 阅读 · 0 评论 -
计算逆序对pytho(数据结构与算法)
题目如果一个数组已经排好序,当是升序的时候,那么逆序对个数为0,当时降序的时候,那么逆序对的个数最多。对数组进行逆序对计算的意义:距离数组的排序的距离多远。例如:3,5,1,4,7,有三个逆序对,(3,1),(5,1),(5,4)方法1两个循环,时间复杂度为O(n^2)def countInver(nums): n = len(nums) count...原创 2020-02-02 21:54:34 · 297 阅读 · 0 评论 -
归并排序python(数据结构与算法)
归并排序归并排序的思想就是先递归分解数组,再合并数组。归并排序是采用分治法的一个非常经典的应用。其基本思路是:假设:有一个数组:list = [2,5,4,3],对其进行排序。第一步:将数组以分治法划分。第二步,第二步步骤分解:实现代码:def merge(left, right): '''合并操作,将两个有序数组left[]和r...原创 2020-02-02 21:25:06 · 527 阅读 · 0 评论 -
搜素峰值python(数据结构与算法)
题目:给定一个没有重复的数组nums,找出其中数组中的峰值,数组中可以有多个峰值,返回其中任意一个即可,其中假设nums是无穷大的,示例2:输入: nums = [2,3,2,5,10,15,4]输出: 1 或 5为峰值索引值解法:二分法,其时间复杂度为O(lgn)峰值出现的情况:刚好满足情况,返回mid,(设置初始指针,分别指向,数组第一个元素,和最后一个元素,找到m...原创 2020-01-31 14:11:41 · 1127 阅读 · 0 评论 -
快速指数计算python(数据结构与算法)
分治法思想:实现代码:def fast_power(x,n): if n == 0: return 1 elif n < 0: return 1 / fast_power(x,-n) elif n % 2 :#0是false,会执行偶数部分,不会执行下面代码 return fast_power(x*x...原创 2020-01-31 14:13:26 · 1534 阅读 · 0 评论 -
时间复杂度python
计算机原子操作(来源:数据结构与算法python语言实现)一个原子操作相当于一个低级别的指令,其执行时间是常数,在理想情况下,这可能是被硬件执行的基本操作类型,常见的原子操作:给对象指定一个标示符 确定与这个标示符相关的对象 执行算术运算(例如,加法) 比较两个数的大小 通过索引访问python列表的一个元素 调用函数 函数返回分析算法时,存在几种可能的考虑:算法完...原创 2020-01-04 20:57:04 · 852 阅读 · 0 评论