python数据结构与算法
文章平均质量分 85
一门编程语言的基本功就是数据结构与算法,也是找工作必备技能。这里介绍关于python的各种数据结构的实现,以及刷题时做到的一些题目,旨在帮助学习者进一步熟悉基于python的数据结构与算法那一套理论,为今后搞个大项目打基础。
xutiantian1412
考虑到历史的行程,我就从地质专业润了去做风控算法。
展开
-
9.5.2 关键路径
图论的最后一部分是关键路径,我们简单了解一下。关键路径是在拓扑排序基础上进行的。拓扑排序解决工程项目能否顺利进行,解决活动间的依赖问题;而关键路径解决工程完成的时间。这里提出一个AOE网络(Activity on Edge),即顶点代表事件,边代表活动,权重代表活动持续时间。二者的关系就是:AOV网只能表示活动之间的制约关系,边表示活动之间的依赖,没有权重,而AOE网可以用权值表示活动的持续时间。所以AOE网是建立在活动之间制约关系没有矛盾的基础上,再来分析整个工程需要多少时间。在AOE网中,从原创 2021-02-17 22:47:04 · 592 阅读 · 0 评论 -
9.5.1 拓扑排序及LeetCode题目 —— Course Schedule II & Minimum Height Trees
首先解释AOV网的概念:用一个有向无环图DAG表示一项工程或项目,我们用顶点表示活动,用弧\边表示活动之间的优先关系。这样的图称为顶点表示活动的网即AOV网(Active on Vertex Network)。再看一下拓扑排序topologicalSort对于任何有向图而言,其拓扑排序为其所有结点的一个线性排序(对于同一个有向图而言可能存在多个这样的结点排序)。该排序满足这样的条件——对于图中的任意两个结点u和v,若存在一条有向边从u指向v,则在拓扑排序中u一定出现在v前面。拓扑排序主要用来原创 2021-02-17 19:42:20 · 308 阅读 · 3 评论 -
9.4 最短路径算法
最短路径问题是图论研究中的一个经典算法问题, 旨在寻找图(由结点和路径组成的)中两结点之间的最短路径。 算法具体的形式包括:确定起点的最短路径问题 - 即已知起始结点,求起始点到所有点的最短路径的问题。 确定终点的最短路径问题 - 与确定起点的问题相反,该问题是已知终结结点,求最短路径的问题。在无向图中该问题与确定起点的问题完全等同,有向图中该问题等同于把所有路径方向反转的确定起点的问题。 确定起点终点的最短路径问题 - 即已知起点和终点,求两结点之间的最短路径。 全局最短路径问题 - 求图中所有原创 2021-02-16 20:30:53 · 858 阅读 · 0 评论 -
9.3 最小生成树算法
接下来我们看最小生成树问题,和下一节的最短路径问题容易混淆。最小生成树的概念(1)一个带权值的图:网。并需要最小成本,就是用n-1条边把n个顶点连接起来,且连接起来的权值最小。(2)我们把构造联通网的最小代价生成树称为最小生成树产生最小生成树必须解决下边两个问题:(1) 尽可能选取权值小的边,但不能构成回路;(2) 选取n-1条恰当的边以连通n个顶点。最小生成树的算法主要有Kruskal算法和Prim算法,他们都是贪心算法的应用。最小生成树的应用用带权值的图表示一群城市及城市间的原创 2021-02-15 23:37:53 · 507 阅读 · 0 评论 -
9.2.3 图的遍历及路径 —— Reconstruct Itinerary & All Paths From Source to Target
前面的遍历都没有关注路径本身,本节从两道题目着手,穴习一个图的遍历及路径。首先了解几个概念。1.欧拉通路:通过图(有向图或者无向图)中的所有边,且每条边只通过一次且行遍所有顶点的通路。2.欧拉回路:当欧拉通路为回路时,称为欧拉回路。3.欧拉图:具有欧拉回路的无向图。半欧拉图:具有欧拉通路但不具有欧拉回路的无向图。简单来说,类似于[一笔画]问题。七桥问题是最早涉及这一问题的数学趣闻,有兴趣的可以了解一下https://www.cnblogs.com/graytido/p/10421927.h.原创 2021-02-10 10:35:15 · 504 阅读 · 0 评论 -
9.2.2 图的遍历LeetCode题目 —— Find the Town Judge & Clone Graph & Keys and Rooms
133.Clone GraphGiven a reference of a node in aconnectedundirected graph.Return adeep copy(clone) of the graph.Each node in the graph contains a val (int) and a list (List[Node]) of its neighbors.题解:注意题目的入参和出参,都是Node结构,而题目说明及例子多少绕了个弯。...原创 2021-02-09 17:39:44 · 234 阅读 · 0 评论 -
9.2.1 图的存储与遍历
2021 继往开来,继续学习数据结构。9.1一节简述图的基本概念及存储结构,这一节我们深入看一下图的存储,学习图的遍历方法,实现图的存储和遍历。原创 2021-01-17 22:22:53 · 546 阅读 · 0 评论 -
LeetCode刷题指南——题目精选3
7. 二叉树遍历树的概念,树的存储结构,孩子兄弟存储方式二叉树、完全二叉树的性质深度优先、广度优先遍历即先序中序后序层次遍历的递归和非递归写法(相当于6道题)101. Symmetric Tree111. Minimum Depth of Binary Tree103. Binary Tree Zigzag Level Order Traversal105. Const...原创 2020-03-22 00:15:38 · 366 阅读 · 0 评论 -
10. 1 动态规划及贪心算法概述
这一章介绍两个重要的算法思想:动态规划和贪心。谈到算法思想,前面已经涉及到的包括,递归,分治,当然暴力求解也是一种算法思想(关于算法思想的知识框架,可以参考算法书籍),但是许多问题最优解暴力实在解决不了或者效率低下,不够优美,这样就引出了——动态规划。一. 概述建议在对算法有所了解的情况下再学习。什么是动态规划(Dynamic Programming)?动态规划的意义是什么?首...原创 2020-02-17 00:39:01 · 863 阅读 · 0 评论 -
7.12.1 线段树原理及应用(上)
继续在树这一类问题上拓展,线段树也是高级的数据结构,初学者要跳过,深入学习阶段可以适当了解一下,拓宽思维能力。如果要参加竞赛或者其他对数据结构要求比较高的情形,可以仔细研究一番,本文借其他博客和几道力扣题目介绍一下线段树。第一篇文章我们先从以下两个问题展开:1. 线段树是什么?是什么样的结构?这样的结构可以解决什么样的问题?2. 线段树的基本实现及区间查询问题——LeetCode307...原创 2020-02-16 18:43:16 · 359 阅读 · 0 评论 -
LeetCode刷题指南——题目精选2
这是LeetCode经典题目总结文章~第二篇4. 二分查找熟练掌握二分查找的通用格式,包括递归及非递归的写法;33. Search in Rotated Sorted Array34. Find First and Last Position of Element in Sorted Array5. 排序排序算法的分类,每种方法的时空复杂度,最好、最坏复杂度,稳定性及...原创 2020-03-21 23:33:25 · 532 阅读 · 0 评论 -
LeetCode刷题指南——题目精选1
这是LeetCode经典题目总结文章~基础:将数据结构及算法学习的差不多,LeetCode题目按类别刷题及总结,参考鄙人数据结构及算法系列文章~按类别将每类题目做好,大概刷250道左右的程度即可。再按照如下精选题目进行知识点巩固,文章总结了各种类型的经典题目,用于第二遍刷题。第二遍刷题同时还可以做一些第一遍时没做的题目,争取刷到400道,但是题目在于精细而不在于数量,一般面试就考察基础...原创 2020-02-01 23:11:41 · 908 阅读 · 0 评论 -
7.11.1 Trie 树(字典树)简介与实现
新年第一篇,补充一下trie树的相关知识,还比较好理解,关键是在实际问题上应用起来~一、基本概念Trie树又称字典树、单词查找树、前缀树等,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。 优点:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。 ...转载 2020-01-08 11:40:40 · 289 阅读 · 0 评论 -
8.2.3 python排序LeetCode题目(3) —— K Pairs with Smallest Sums & Kth Smallest Element in a Sorted Matrix
这一节再看一些排序相关的题目。373.Find K Pairs with Smallest SumsYou are given two integer arraysnums1andnums2sorted in ascending order and an integerk.Define a pair(u,v)which consists of one elemen...原创 2019-09-05 20:47:26 · 237 阅读 · 0 评论 -
8.2.2 (python)排序算法及LeetCode题目(2) —— Insert Interval & Contains Duplicate III & Wiggle Sort II
这一节是数组排序的相关题目,并没有直接应用算法解决问题那么好的事情。这一部分都是难度较高的题目,重点是解题思路,和排序相关,反而没用到什么排序算法。57.Insert IntervalGiven a set ofnon-overlappingintervals, insert a new interval into the intervals (merge if necessary)...原创 2019-09-05 09:37:43 · 205 阅读 · 0 评论 -
8.2.1 (python)排序算法之链表排序LeetCode题目(1) —— Sort List & Merge k Sorted Lists
首先,在排序的题目中,我们先总结、学习一下,链表排序的问题,顺便也回忆一下链表相关操作。对应于下面两道题147.Insertion Sort ListSort a linked list using insertion sort.148.Sort ListSort a linked list inO(nlogn) time using constant space com...原创 2019-09-03 23:27:05 · 317 阅读 · 0 评论 -
9.1 数据结构之图的基本概念及存储结构
前面8章都是比较基础的数据结构与算法,当然各章也有一些较深的知识。之后的章节,都是进阶的数据结构与算法的知识了。这一章我们介绍更复杂的数据结构——图。图状结构是一种比树形结构更复杂的非线性结构。在树状结构中,结点间具有分支层次关系,每一层上的结点只能和上一层中的至多一个结点相关,但可能和下一层的多个结点相关。而在图状结构中,任意两个结点之间都可能相关,即结点之间的邻接关系可以是任意的。因此...原创 2019-09-01 10:46:53 · 815 阅读 · 0 评论 -
8.1.2 排序算法概述及python基本实现(下)
归并排序(Merge Sort)和选择排序一样,归并排序的性能不受输入数据的影响,但表现比选择排序好的多,因为始终都是O(n log n)的时间复杂度。代价是需要额外的内存空间。归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。归并排序是一种稳定的排序方法。将已有序的子序列合并,得到完全有序的序列;即先使每个子序...原创 2019-09-01 10:46:15 · 302 阅读 · 0 评论 -
8.1.1 排序算法概述及python基本实现(上)
从查找算法的性能可以看出,有序数据可以提高查找速度。对数据进行排序,是数据结构与算法知识基础篇中最后介绍也是最重要的一部分。面试时考察编程基础,一看字符串、数组处理的一些题目,二看链表、树的基础应用,三看查找、排序各种方法张口就来。排序算法是和语言无关的,本节重点还是python的实现;另外,排序算法分为几大类,若有不理解之处还要自行研究,本文不对原理详细展开(原理上比较复杂的算法不多,大...原创 2019-09-01 10:44:40 · 656 阅读 · 0 评论 -
7.10.2 (python)堆的应用及Leetcode题目解析
我们简单看几道二叉堆/优先队列的应用。215.Kth Largest Element in an ArrayFind thekth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element....原创 2019-08-21 23:58:55 · 308 阅读 · 0 评论 -
7.10.1 优先队列及堆
树这一章真是又臭又长,这一节从优先队列着手,学习堆的概念。优先队列队列是一种FIFO(First-In-First-Out)先进先出的数据结构,优先队列(Priority Queue)是特殊的队列,从“优先”一词,可看出有“插队现象”,取出元素的顺序是依照元素的 优先权(关键字)。优先队列有两种特殊的操作:删除最大元素和插入元素。我们来看一下优先队列的实现方案,元素插入时如果不处理...原创 2019-08-19 21:18:14 · 292 阅读 · 0 评论 -
7.9 哈夫曼树(Huffman Tree)
二叉树的知识还没完哈,我们来介绍一下哈夫曼树。参考博客:哈夫曼树haffman哈夫曼树——贪心算法(java)哈夫曼树原理,及构造方法概述给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。首先我们先学会这样一个概念:树...原创 2019-08-15 17:39:02 · 1731 阅读 · 0 评论 -
7.8.1 带你学习红黑树(1)
继续学习二叉搜索树相关知识,我们来认识一下略高级的数据结构——红黑树。鄙人在此仍然提供一些博客,并整理主要知识点及学习路线,由浅入深认识,觉得自己需要掌握到什么地步,适可而止。红黑树的特点和主要性质 红黑树结点的插入和删除 由2-3-4树理解红黑树 python 手撕红黑树推荐的文章又是July大神的系列文章,我会在下面的总结中捋一下怎么看:1、教你透彻了解红黑树2...原创 2019-08-13 21:28:10 · 300 阅读 · 0 评论 -
7.7.3 (转载) B树、B+树、B*树(2)
原文链接:https://blog.csdn.net/v_JULY_v/article/details/6530142/转载自July博客从B树、B+树、B*树谈到R 树https://blog.csdn.net/v_JULY_v/article/details/6530142/之第一节第一节、B树、B+树、B*树6、B树的插入、删除操作上面第3小节简单介绍了利用...转载 2019-08-11 22:04:26 · 225 阅读 · 0 评论 -
7.7.2 (转载) B树、B+树、B*树(1)
转载自July博客从B树、B+树、B*树谈到R 树https://blog.csdn.net/v_JULY_v/article/details/6530142/之第一节第一节、B树、B+树、B*树1.前言:动态查找树主要有:二叉查找树(Binary Search Tree),平衡二叉查找树(Balanced Binary Search Tree),红黑树(Red-Blac...转载 2019-08-11 21:12:18 · 248 阅读 · 0 评论 -
7.7.1 外查找之 B-tree、B+tree 认识
前面的BST、AVL都是用作内部查找的数据结构,即被查找的数据集不大,可以放在内存中。本节7.7 所介绍的查找树,用作外部查找所查数据放在外存中。本节内容,主要推荐几篇大神的博客,后面作一些转载,并总结主要内容,没有代码实践,就没有必要自己写一堆东西了,前辈们写的都很牛。1. July 大神的文章从B树、B+树、B*树谈到R 树2. 简明扼要的文章BTree和B+Tree详解...原创 2019-08-11 21:01:03 · 462 阅读 · 0 评论 -
7.6.2 (python)AVL LeetCode题目 及 AVL结点插入操作详解
这一节关于 AVL 平衡二叉搜索树的题目,刷了不少题,关于平衡树的题目确实很少,做来做去,就先看下面这两道小儿科的题目吧。110.Balanced Binary TreeGiven a binary tree, determine if it is height-balanced.For this problem, a height-balanced binary tree i...原创 2019-08-11 10:05:55 · 1031 阅读 · 0 评论 -
7.6.3 (python)BST LeetCode题目 —— Delete Node in a BST & Recover Binary Search Tree
这一节再解析两道题,略有难度的。450.Delete Node in a BSTGiven a root node reference of a BST and a key, delete the node with the given key in the BST. Return the root node reference (possibly updated) of the BST...原创 2019-08-09 17:46:17 · 246 阅读 · 0 评论 -
7.6.1 (python)BST LeetCode题目 —— Minimum Absolute Difference in BST & Convert BST to Greater Tree
BST相关题目并不多,毕竟是一个查找的数据结构。对于BST的题目,最常用的就是中序遍历获得递增序列,进而解决一些题目。在做这一部分题目之前,先默念中序遍历大法。以98.Validate Binary Search Tree 为例,如何判断是否为二叉搜索树呢,就是对树进行中序遍历,判断序列是否递增。class Solution: def isValidBST(self, roo...原创 2019-08-05 09:38:58 · 261 阅读 · 0 评论 -
7.3.3 树和二叉树LeetCode题目解析(3)
二叉树这一数据结构十分重要,在此不断补充一些有趣味的题目,不断学习。623.Add One Row to TreeGiven the root of a binary tree, then value vand depth d, you need to add a row of nodes with value vat the given depth d. The root n...原创 2019-07-31 19:06:26 · 115 阅读 · 0 评论 -
6.1 查找算法概述
一、基本概念查找是在大量的信息中寻找一个特定的信息元素,在计算机应用中,查找是常用的基本运算。被查找的对象是由一组记录组成的表或文件,而每个记录则由若干个数据项组成,并假设每个记录都有一个能唯一标识该记录的关键字。在这种条件下,查找的定义是:给定一个值k,在含有n个记录的表中找出关键字等于k的记录。若找到,则查找成功,返回该记录的信息或该记录在表中的位置,否则查找失败,返回相关的指示信息。...原创 2018-12-23 16:05:11 · 557 阅读 · 0 评论 -
7.5 二叉查找树(BST)及平衡二叉树(AVL)的概念及基本运算
经历二叉树的重重拷问,终于来到二叉查找树,又称二叉搜索树(BinarySearchTrees)。在第6章查找算法的介绍中,我们提到了树表查找/动态表查找,BST因为关键字有序,在查找时同样高效,并且易于对关键字的插入及删除操作。二叉搜索树的基本概念二叉搜索树是一棵二叉树。这样一棵树可以使用一个链表结构表示,其中每个结点就是一个对象。除了结点中的关键字外,每个结点还包含属性left、righ...原创 2019-08-01 00:09:18 · 727 阅读 · 0 评论 -
7.4.2 python二叉树路径问题及LeetCode题目解析(2)
下面题目中的路径,定义有所延伸,在解法思路及时间空间复杂度上有所挑战。437.Path Sum IIIYou are given a binary tree in which each node contains an integer value.Find the number of paths that sum to a given value.The path does no...原创 2019-07-28 21:32:23 · 360 阅读 · 0 评论 -
7.4.1 python二叉树路径问题及LeetCode题目解析(1)
二叉树从根结点到每个叶子结点都形成一条路径,当然,从任意节点到任意节点也是一条路径,这一类题目较多是我们二叉树问题的重点,也伴随着一些有难度的题目。递归遍历依次访问树中结点可以构成路径,另外前面提到后序遍历非递归写法的栈中保留当前元素的所有祖先结点。首先我们看最简单的一道题,所有路径输出:257.Binary Tree PathsGiven a binary tree, retu...原创 2019-06-02 21:16:38 · 264 阅读 · 0 评论 -
7.3.2 python 二叉树层次遍历应用及LeetCode题目解析(2)
这一节几道题目都是应用层次遍历的基本思路解决问题,当然也有不用层次遍历思想的解法,我们也会介绍一下。层次遍历可以同时处理二叉树每一层结点,许多问题迎刃而解。(三)二叉树层次遍历103.Binary Tree Zigzag Level Order TraversalGiven a binary tree, return thezigzag level ordertraversal ...原创 2019-05-05 19:15:02 · 341 阅读 · 0 评论 -
7.2 二叉树的基本运算及遍历的python实现
这几节内容,概念少,全靠代码撑住场面。多看代码,才能学习到二叉树的基本知识和应用。二叉树的基本运算所谓的基本运算主要包括:括号表示法的树与二叉链存储结构的树互相转换,树节点查找,求树高度。1. 树节点查找:最基本的操作了:class TreeNode: # 树节点的定义 def __init__(self, val): self.data = val...原创 2019-04-23 23:59:11 · 1172 阅读 · 2 评论 -
7.1 树及二叉树的概念及存储结构
终于来到数据结构中的核心内容——树。树是最重要的数据结构,没有之一。树,表示一个元素与多个元素之间一对多的关系,因此可以用来表示事物中的层次关系,如家谱,如企业或政府机关的组织结构关系等,在逻辑上的用层次关系来存储,在管理时也方便查找等。这一节从树的概念和存储开始,延伸至最重要的二叉树。以概念为主,大多数内容都在各教材和博客中可以找到。树的基本概念可以参考博客https://ww...原创 2019-04-14 23:24:51 · 780 阅读 · 0 评论 -
6.2.3 python二分查找算法及LeetCode题目(3)之二维数组 —— Search a 2D Matrix
接下来是两道二维数组查找的题目,看一下二维数组中二分查找的特点,或者说应用。74.Search a 2D MatrixWrite an efficient algorithm that searches for a value in anmxnmatrix. This matrix has the following properties:Integers in eac...原创 2019-04-13 22:47:05 · 461 阅读 · 0 评论 -
6.2.2 python二分查找算法及LeetCode题目(2)之旋转的数组 —— Search in Rotated Sorted Array
这一节总结几道关于Rotated 数组的题目,涉及到LeetCode内四道相关题目:33.Search in Rotated Sorted Array81.Search in Rotated Sorted Array II153.Find Minimum in Rotated Sorted Array154.Find Minimum in Rotated Sorted Ar...原创 2019-04-09 23:40:22 · 477 阅读 · 0 评论 -
6.2.1 python二分查找算法及LeetCode题目(1) —— Find First and Last Position & Find Peak Element
二分查找基本格式算法要点:(1)从中间位置开始,如果正好是要查找的元素或满足的条件,则搜素过程结束,这意味着你要有一个return或break的操作;(2)如果不是,每一次比较都使搜索范围缩小一半,这意味着你要改变搜索的left和right。废话少说,直接看一下二分查找的基本写法,以while 写法为例,需要注意(1)循环的条件带等号,(2)mid 计算的这个写法,是防止(lt +...原创 2019-04-06 16:44:58 · 448 阅读 · 0 评论