
Python数据结构与算法
文章平均质量分 65
糖公子没来过
学生一枚
展开
-
二叉树概念及实现
二叉树 二叉树的基本概念 二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree) 完全二叉树 若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第h层有叶子结点,并且叶子结点都是从左到右依次排布,这就是完全二叉树。 满二叉树 除了叶结点外每一个结点都有左右子叶且叶子结点都处在最底层的二叉树 二叉树的性质 性质1:在二叉树的第i层上至多有2^(i-1)个结点(i>0)..原创 2021-06-10 17:55:39 · 184 阅读 · 1 评论 -
树的概念与种类
树的概念 树(tree),是一种抽象数据类型(ADT),或是实作这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是一个由n(n>=1)个有限节点组成的一个具有层次关系的集合。 树具有一些特点 每个节点有0个或多个子节点 没有父节点的节点称为根节点 每一个非根节点有且只有一个父节点 除了根节点之外,每个子节点可以分为多个不相交的子树 树的术语 节点的度:一个节点含有的子树的个数称为该节点的度; 树的度:一棵树中,最大的节点的度称为树的度; 叶节点或终端节点:原创 2021-06-10 17:21:10 · 164 阅读 · 0 评论 -
搜索、二分法查找
搜索 搜索是在一个序列中找到一个指定元素的过程 搜索返回True或者False 搜索的几种常见方法:顺序查找、二分法查找、二叉树查找、哈希查找 二分法查找 概念 二分法查找又叫做折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。 原理 二分法查找处理的必须是有序表,如果序列按升序的顺序排列,首先,比较中间位元素与目标元素的大小,如果就是它,直接返回True,如果不是,判断目标元素比中间元素大原创 2021-06-08 21:02:52 · 124 阅读 · 0 评论 -
归并排序原理
归并排序 概念与原理 归并排序的思想是先拆分,再组合,组合的同时进行排序,最后组合成一个新的有序序列 拆分,将序列拆到每一份只有一个元素 合并,合并的顺序是怎么拆的怎么合,比如由[54, 26]拆成了[54],[26],合并的时候就是他们两个合,54对应一个left_pointer游标,26对应right_pointer游标,比较两个游标对应元素的大小,若左边比右边大,则left_pointer与right_pointer对应的元素互换 游标进行互换操作之后均需要往后移一位,直到移到最原创 2021-06-08 20:49:20 · 116 阅读 · 1 评论 -
排序与搜索——希尔排序、快速排序
希尔排序 概念 希尔排序(Shell Sort),感觉是插入排序的改进版,把序列中的元素按照一定gap分组,每一组中按照插入排序的方法进行排序,然后缩短gap,再次分组,再次排序,直到gap缩短为1,整个序列变成一组。 实际上gap=1的时候就是插入算法了 当gap选取合理的时候是可以降低算法的时间复杂度的 希尔排序的实现 def shell_sort(alist): """希尔排序""" n = len(alist) gap = n // 2原创 2021-06-07 20:57:09 · 207 阅读 · 0 评论 -
栈与队列、排序算法
栈与队列的概念 栈的概念 栈(stack),有些地方称为堆栈,是一种容器,可存入数据元素、访问元素、删除元素,它的特点在于只能允许在容器的一端(称为栈顶端指标,英语:top)进行加入数据(英语:push)和输出数据(英语:pop)的运算。没有了位置概念,保证任何时候可以访问、删除的元素都是此前最后存入的那个元素,确定了一种默认的访问顺序。 由于栈数据结构只允许在一端进行操作,因而按照后进先出(LIFO, Last In First Out)的原理运作。 关于栈的概念,不需要知道它在物理层面是如.原创 2021-06-05 10:50:39 · 383 阅读 · 0 评论 -
双向链表、单向循环链表
双向链表 概念 双向链表的每个节点有两个链接:一个指向前一个节点,当此节点为第一个节点时,指向空值;而另一个指向下一个节点,当此节点为最后一个节点时,指向空值。 指向前一节点的链接区可以自己命名,叫做prev,指向后一节点的链接区叫做next。 在双向链表中,游标对应的节点的前一个节点叫做“前驱节点”,后一个节点叫做“后继节点”。 双向链表的结构如下 操作(同单向链表) is_empty() 链表是否为空 length() 链表长度 travel() 遍历链表 add(item)..原创 2021-06-04 22:24:29 · 248 阅读 · 1 评论 -
链表之单链表
链表 链表(Linked list)是一种常见的基础数据结构,是一种线性表,但不像顺序表一样连续存储数据,而是在每一个节点(数据存储单元)里存放下一个节点的位置信息(即地址)。 相较于顺序表,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理 单链表 包含:信息域(元素域)和链接域。 链接域指向链表中的下一个节点,最后一个节点的链接域则指向一个空值。 (最后那个垂直符号表示的就是一个空值) 表元素域elem用来存放具体的数据。 链接域next用来存放下一个节点的位置(pyth原创 2021-06-03 10:25:51 · 109 阅读 · 1 评论 -
基本顺序表
基本顺序表与元素外围顺序表 不同数据类型在内存中占据的内存单元不同 int整型,如Int a = 1,需要先将十进制转化为二进制00000001,对于整型,必须要占据4个字节,那么前面还有24个0,那么一个整型相当于占据了四个存储单元 对于Char(字符)来说(Python中没有这种类型),只需要占据一个内存单元 从取的角度来讲,取的时候也需要知道哪些数据表示的是一个数据 顺序表的基本形式 顺序 当一个数组含有相同类型的数据的时候,这些数据按照顺序的方式(连续的)在内存中进行排列 元原创 2021-06-02 10:35:17 · 139 阅读 · 1 评论 -
Python内置类型的性能分析、数据结构引入
Python内置类型的性能分析 使用 timeit 模块 class timeit.Timer(stmt='pass', setup='pass', timer=<timer function>) Timer是测量小段代码执行速度的类 stmt是statement,要测试的代码语句,注意,这是一个字符串参数 setup参数是运行代码时需要的设置,比如"from xx import xxx"这种设置 timeit.Timer.timeit(number=1000000) Timer类原创 2021-06-02 09:22:12 · 134 阅读 · 0 评论 -
python数据结构与算法、时间复杂度
枚举法 时间复杂度 执行基本运算的数量 2也不重要,其实就是n^3 g(n)=n^3就是大O表示法原创 2021-06-01 22:25:21 · 70 阅读 · 0 评论