
数据结构与算法Python版
文章平均质量分 90
数构Python实现
云崖先生
持续分享Python、Golang、JavaScript、MySQL、Redis、Elasticsearch、MongoDB等相关知识。
Ps:高产似母猪
展开
-
数据结构与算法Python版 09 数构之树相关
树的知识什么是树树是一种基本的非线性数据结构,在操作系统、图形学、数据库系统、计算机网络等领域被广泛使用。跟自然界中的树一样,数据结构树也分为:根、枝、叶三个部分,一般数据结构的图示会把根放在上方,叶放在下方,就像一颗倒置的树,如下示例:相关术语节点(node)节点是组成树的基本部分,每个节点具有不同的名称或“键值”属性。除此之外,节点还可以保存额外数据项,数据项根据不同的应用而变化。边(edge)边是组成树的另一个基本部分,每条边恰好连接两个节点,表示节点之间具有关联。除此之外,边原创 2021-07-07 13:43:11 · 356 阅读 · 0 评论 -
数据结构与算法Python版 08 算法之排序篇
排序简介常见的十大排序算法如下所示,本章节会例举6种常见且易于掌握的排序算法:算法名称平均时间复杂度最好情况最坏情况空间复杂度排序方式稳定性冒泡排序O(n²)O(n)O(n²)O(1)in-place稳定选择排序O(n²)O(n²)O(n²)O(1)in-place不稳定插入排序O(n²)O(n)O(n²)O(1)in-place稳定希尔排序O(n log n)O(n log n)O(n log² n)O(1)原创 2021-07-07 13:42:04 · 122 阅读 · 0 评论 -
数据结构与算法Python版 07 算法之搜索篇
线性搜索顺序查找也被称之为线性查找,因在Python中list的底层为顺序表存储,故我们可以使用index来循环遍历整个列表获得所需要查找的数据项。它的时间复杂度为O(n),如果刚好被搜索的数据项排列在最后一个,那么整个查找是非常耗费时间的:如下所示,如果查找数据项50,将会查找11次:def seqLinerSearch(seq, findItem): idx = 0 count = 0 seqLenght = len(seq) while idx < se原创 2021-07-07 13:41:15 · 83 阅读 · 0 评论 -
数据结构与算法Python版 06 算法之递归篇
递归前言递归(Recursion)相信各位都非常了解了,所以这里就不再详细阐述,具体可参照Python函数章节中的递归函数。递归三大定律如下:递归算法必须有一个基本结束条件递归算法必须能改变问题规模递归算法必须调用自身分治策略分治策略是指将一个大规模的问题分解成更小的相同问题,经过持续分解到最后问题规模小到可以用非常简单直接的方式来解决,或者将一个问题拆分成不同的各个部分,分而解决分而治之。分治策略一般会经历三个步骤:划分:此步骤涉及将问题分解为更小的子问题。子问题应该代表原始问题的原创 2021-07-07 13:40:34 · 349 阅读 · 0 评论 -
数据结构与算法Python版 05 数构之链表篇
线性表(linear list)顺序表(order list)Python中list和tuple的实现都是基于一种叫顺序表的东西。顾名思义,所有的数据项都是有序的并且在一片连续的内存空间中存放,在使用顺序表进行存储时,需预先申请一整块足够大的存储空间,然后将数据按照次序逐一存储,数据项之间紧密贴合,不留一丝空隙:当pop()掉任意一个非尾部数据项时,会导致pop()后的所有数据项前推,如下图所示:同理,当insert()一个数据项时,如果insert()的数据项未在顺序表尾部,也会导致所有in原创 2021-07-06 11:57:44 · 248 阅读 · 1 评论 -
数据结构与算法Python版 04 数构之哈希篇
Hash Table散列表(hash table)也被称为哈希表,它是一种根据键(key)来存储值(value)的特殊线性结构。常用于迅速的无序单点查找,其查找速度可达到常数级别的O(1)。散列表数据存储的具体思路如下:每个value在放入数组存储之前会先对key进行计算根据key计算出一个重复率极低的指纹根据这个指纹将value放入到数组的相应槽位中同时查找的时候也将经历同样的步骤,以便能快速的通过key查出想要的value。这一存储、查找的过程也被称为hash存储、hash查找。如原创 2021-07-06 11:55:32 · 270 阅读 · 0 评论 -
数据结构与算法Python版 03 数构之线构篇
Linear Structure认识线性结构线性结构是一种有序的数据项集合结构,线性结构中除开第一个后最后一个数据项,其他每一个数据项都有前驱和后继,如图所示:当新的数据项加入到数据集中时,只会加入到原有某个数据项之前或之后。具有这种性质的数据集,就称为线性结构。如Python中的list、tuple等数据类型都属于线性结构。特点介绍线性结构总有2端,在不同情况下,2端的称呼也不同。如称呼为:(前端、后端),(左端、右端)、(首端、尾端):还有称呼为:(上端、下端)、(顶端、底端):原创 2021-07-06 11:54:28 · 204 阅读 · 0 评论 -
数据结构与算法Python版 02 list和dict性能探究
2种常用类型在Python中,最常用的2种数据类型为list和dict。你是否了解过它们的各种方法,时间复杂度到底如何?在那种策略下用那种方法更省时?两种数据类型都拥有很多方法,常用的亦或是不常用的,因此在Python设计之初定下了一个原则:让最常用的操作性能最好,牺牲不太常用的操作在实际使用中,80%的功能其使用率往往只有20%,因此将剩下的20%的功能时间复杂度降低,而将不常用的80%功能时间复杂度增加,做到一种均衡的策略。其实在Python官网上,已经贴出了每种数据类型方法的时间复杂原创 2021-07-06 11:53:41 · 231 阅读 · 0 评论 -
数据结构与算法Python版 01 算法与数据结构
为什么要学习数算随着应用程序变的越来越复杂,我们最常思考的问题无非下面2个:如何存储海量数据?如何从海量数据中操纵所需要的数据?为了解决上述问题,我们需要有合理的机制来规划如何存储数据,那么如何存储数据即为数据的结构。同时,我们还需要制定一系列方案,来思考如何从海量数据中进行增、删、改、查,这一方案的实现即程序的算法。尼克劳斯·埃米尔·维尔特(n.writh)说过一句很著名的话:程序 = 算法 + 数据结构因此,一个良好的健硕的程序,必然根据其业务场景采用了合适的数据存储方案,并且原创 2021-07-06 11:52:59 · 147 阅读 · 0 评论