![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 79
木水_
这个作者很懒,什么都没留下…
展开
-
LeetCode hot 100 —— 哈希表 by python
集合和字典基本相同,唯一的区别,就是集合没有键和值的配对,是一系列无序的、唯一的元素组合。原创 2024-03-12 12:01:02 · 436 阅读 · 0 评论 -
排序算法(2):希尔排序
希尔排序(有时称为“递减递增排序”)通过将原始列表分解为多个较小的子列表来改进插入排序,每个子列表使用插入排序进行排序。 选择这些子列表的方式是希尔排序的关键。不是将列表拆分为连续项的子列表,希尔排序使用增量i(有时称为 gap),通过选择 i 个项的所有项来创建子列表。原创 2018-03-01 13:48:06 · 200 阅读 · 0 评论 -
Python 实现树结构
树在计算机科学的许多领域中使用,包括操作系统,图形,数据库系统和计算机网络。树数据结构与他们的植物表亲有许多共同之处。树数据结构具有根,分支和叶。自然界中的树和计算机科学中的树之间的区别在于树数据结构的根在顶部,其叶在底部。1 树的相关定义节点:树的基本部分。它可以有一个名称,我们称之为“键”。节点也可以有附加信息。我们将这个附加信息称为“有效载荷”。虽然有效载荷信息不是...原创 2018-03-23 16:57:36 · 80541 阅读 · 10 评论 -
lintcode 刷题 by Python 总结(1)
博主之前在学习 python 的数据结构与算法的基础知识,用的是《problem-solving-with-algorithms-and-data-structure-using-python》。但是仅仅看书对于知识的理解不够深入。于是选择了 lintcode 刷题,本篇博客即为最近做的算法题的一则小结。 lintcode 的界面非常干净,还有中文版本的。博主的刷题的顺序为从入...原创 2018-05-03 14:55:11 · 798 阅读 · 0 评论 -
Python实现数组和链表的归并排序
归并排序是一种稳定的排序,采用分而治之策略,可以用于顺序储存结构,也易于在链表上实现。其原理如下图: 算法时间复杂度为 O(nlogn),空间复杂度为 O(n)。1 在数组上实现def mergesort(seq): if len(seq)<=1: return seq mid=int(len(seq)/2) ...原创 2018-06-21 17:07:48 · 1863 阅读 · 0 评论 -
Python 中的堆 (heapq 模块)应用:Merge K Sorted Lists
堆是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。在队列中,调度程序反复提取队列中第一个作业并运行,因为实际情况中某些时间较短的任务将等待很长时间才能结束,或者某些不短小,但具有重要性的作业,同样应当具有优先权。堆即为解决此类问题设计的一种数据结构。1 定义n个元素序列{k1,k2...ki...kn},当且仅当满足下列关系时称之为堆:(ki...原创 2018-06-22 14:32:43 · 773 阅读 · 0 评论 -
lintcode 刷题 by python 部分链表题总结(2)
本篇博客对最近做的链表的算法题做个简单的小结,主要描述题目和提供解题思路,具体代码见我的 github:https://github.com/MUSK1881/lintcode-by-python 36. 翻转链表 II(中等)描述翻转链表中第m个节点到第n个节点的部分样例给出链表1->2->3->4->5->nul...原创 2018-06-23 22:36:20 · 321 阅读 · 0 评论 -
Python 实现图的深度优先和广度优先搜索
在介绍 python 实现图的深度优先和广度优先搜索前,我们先来了解下什么是“图”。1 一些定义顶点顶点(也称为“节点”)是图的基本部分。它可以有一个名称,我们将称为“键”。边边(也称为“弧”)是图的另一个基本部分。边连接两个顶点,以表明它们之间存在关系。权重边可以被加权以示出从一个顶点到另一个顶点的成本。例如,在将一个城市连...原创 2018-06-28 16:38:08 · 14445 阅读 · 5 评论 -
Python 实现二叉树的前序、中序、后序、层次遍历(递归和非递归版本)
博主曾在之前的博客中用python实现树结构,此篇博客将专门用 Python 实现树的各种递归和非递归的遍历。1. 构建树 我们先构建一棵简单的树:class TreeNode: def __init__(self, x): self.val = x self.left = None self.right...原创 2018-09-18 21:36:52 · 16573 阅读 · 5 评论 -
Python 实现列队
1 列队定义队列是项的有序结合,其中添加新项的一端称为队尾,移除项的一端称为队首。当一个元素从队尾进入队列时,一直向队首移动,直到它成为下一个需要移除的元素为止。 最近添加的元素必须在队尾等待。集合中存活时间最长的元素在队首,这种排序成为 FIFO,先进先出,也被成为先到先得。 队列的最简单的例子是我们平时不时会参与的列。排队等待电影,在杂货店的收营台等待,在自助餐厅排队等待(这样我们可以...原创 2017-12-26 23:52:59 · 1772 阅读 · 0 评论 -
栈实例(3):前缀、中缀、后缀转换
开篇语:继上两篇博客介绍栈在符号匹配和进制转换中的应用后,本篇博客讲介绍栈在前缀、中缀、后缀转换中的应用。1中缀、前缀、后缀概念介绍中缀:算术表达式如 B*C中,乘法运算符 *为两个操作数之间的中缀。问题:A+B*C,运算符 + 和 * 仍然出现在操作数之间。这里面有个问题是,他们分别作用于哪个运算数上,+ 作用于 A 和 B , 还是 * 作用于 B 和 C?表达式似乎有点模糊,...原创 2017-12-24 16:35:50 · 3142 阅读 · 0 评论 -
Python 实现无序列表:链表
介绍链表前我们先了解下什么是列表。 在对基本数据结构的讨论中,我们使用 Python 列表来实现所呈现的抽象数据类型。列表是一个强大但简单的收集机制,为程序员提供了各种各样的操作。然而,不是所有的编程语言都包括列表集合。在这些情况下,列表的概念必须由程序员实现。列表是项的集合,其中每个项保持相对于其他项的相对位置。更具体地,我们将这种类型的列表称为无序列表。我们可以将列表视为具有第一项,第二...原创 2017-12-30 16:25:19 · 3817 阅读 · 0 评论 -
Python 实现 Deque
1 Deque定义deque(也称为双端队列)是与队列类似的项的有序集合。它有两个端部,首部和尾部,并且项在集合中保持不变。deque 不同的地方是添加和删除项是非限制性的。可以在前面或后面添加新项。同样,可以从任一端移除现有项。在某种意义上,这种混合线性结构提供了单个数据结构中的栈和队列的所有能力。下图展示了一个python数据对象的deque。 2 Deque抽象数据类型de...原创 2017-12-28 15:21:47 · 1936 阅读 · 0 评论 -
Python 实现栈
在介绍python实现栈的一些简单例子前,我们先了解下栈的基本知识。1.什么是栈栈(有时称为“后进先出栈”)是一个项的有序集合,其中添加移除新项总发生在同一端。这一端通常称为“顶部”。与顶部对应的端称为“底部”。 和栈相关的最有用的想法之一来自对它的观察。假设从一个干净的桌面开始,现在把书一本本叠起来,你在构造一个栈。考虑下移除一本书会发生什么。移除的顺序跟刚刚被放置的顺序相...原创 2017-12-18 12:06:45 · 14210 阅读 · 2 评论 -
DBSCAN 聚类分析
DBSCANCLUSTERDBSCAN(Density-basedspatial clustering ofapplications with noise)Martin.Ester, Hans-PeterKriegel等人于1996年提出的一种基于密度的空间的数据聚类方法,该算法是最常用的一种聚类方法[1,2]。该算法将具有足够密度区域作为距离中心,不断生长该区域.该算法利用基于密度的聚类的概念,...原创 2017-12-10 14:57:33 · 3365 阅读 · 0 评论 -
常见空间聚类算法优劣概述
1. 空间数据对空间聚类算法的要求1) 空间拓扑关系2) 密度问题3) 空间簇形态多样性2. 空间聚类算法分析1) 基于划分的算法 i. K-means算法优点:处理大型数据有较高效率和伸缩性缺点:a) 初始点敏感b) 只能发现近似球状簇c) ...原创 2017-12-10 14:47:57 · 11280 阅读 · 0 评论 -
排序算法(1):冒泡排序和插入排序
1.1 冒泡排序冒泡排序需要多次遍历列表。它比较相邻的项并交换那些无序的项。每次遍历列表将下一个最大的值放在其正确的位置。实质上,每个项“冒泡”到它所属的位置。 用python写交换操作时,与大多数编程语言略有不同(需要临时储存位置),python可以执行同时赋值,语句 a,b = b,a 两个赋值语句同时完成。 下图展现了冒泡排序的第一次遍历:用python实现冒泡排序的代码如下: ...原创 2018-02-02 14:30:02 · 408 阅读 · 0 评论 -
栈实例(1):符号匹配
上一篇博客介绍了栈的定义以及python中关于栈的操作http://blog.csdn.net/m0_37324740/article/details/78830136。 在本篇博客中,将基于python,实现一些可以用栈思想处理的简单问题,本篇博客为简单符号的匹配。1括号匹配1.1单钟括号匹配区分括号是否匹配的能力是识别很多编程语言结构的重要部分。具有挑战的是如何编写一个算...原创 2017-12-22 21:28:27 · 1013 阅读 · 0 评论 -
栈实例(2):进制转换
1 十进制转换为二进制二进制在计算机科学中是很重要的,因为存储在计算机内的所有值都是以 0 和 1 存储的。如果没有能力在二进制数和普通字符串之间转换,我们与计算机之间的交互非常棘手。整数值是常见的数据项。他们一直用于计算机程序和计算。我们在数学课上学习它们,当然最后用十进制或者基数 10 来表示它们。十进制 233^10 以及对应的二进制表示 11101001^2 分别解释为:但...原创 2017-12-23 11:01:38 · 423 阅读 · 0 评论 -
递归算法举例
递归是一种解决问题的方法,将问题分解为更小的子问题,直到得到一个足够小的问题可以被很简单的解决。通常递归涉及函数调用自身。递归允许我们编写优雅的解决方案,解决可能很难编程的问题。1 递归算法的三定律在介绍递归思想的简单例子前,我们先了解下递归算法的三个重要的定律: 1.1 递归算法必须具有基本情况。 1.2 递归算法必须改变其状态并向基本情况靠近。 1.3 递归算法必须以递归方式...原创 2018-01-23 11:04:33 · 544 阅读 · 0 评论