
数据结构
文章平均质量分 79
进一步有进一步的欢喜
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
排序代码模板
【代码】排序代码模板。原创 2023-04-21 01:24:31 · 103 阅读 · 0 评论 -
单调栈:数组元素大小秩序的 “守护者”
本文将深入探讨单调栈的概念、原理、应用场景,并通过丰富的案例和详细的代码解读,帮助读者全面掌握该算法工具。原创 2025-02-07 02:33:22 · 482 阅读 · 0 评论 -
搜索补全(二):Trie树(前缀树)经典应用
在信息检索、自动补全和拼写检查等领域,Trie树(发音为“try”,源自retrieval)作为一种高效的前缀树数据结构,发挥着至关重要的作用。本文将深入探讨Trie树的基本概念、构建与使用方法、应用场景及其优化策略,旨在为开发者和技术爱好者提供全面的理解。原创 2025-01-09 01:15:56 · 639 阅读 · 0 评论 -
从链表到平衡树:二叉查找树的退化与优化
二叉查找树(BST)是一种高效的动态数据结构,但在最坏情况下(如节点按顺序插入或删除),它可能会退化为链表,导致查找、插入和删除操作的时间复杂度退化为线性时间 𝑂(𝑛)。本文通过具体例子详细分析了这种退化现象,并介绍了自平衡二叉查找树(如红黑树、AVL树等)的工作原理和优势,帮助读者理解如何通过引入自平衡机制确保树的高度始终保持在 𝑂(log𝑛),从而实现高效的查找、插入和删除操作。原创 2024-12-30 12:02:26 · 1006 阅读 · 0 评论 -
四大自平衡树对比:AVL树、红黑树、B树与B+树
本文详细介绍了AVL树、红黑树、B树和B+树的概念、特点,并通过表格形式对比了它们的不同之处。AVL树适用于严格平衡和高效查找的场景;红黑树适用于综合性能要求较高的通用场景;B树适用于需要高效磁盘访问的文件系统和数据库索引;B+树则特别适合范围查询和顺序扫描。希望这些内容能为你提供有价值的参考,帮助你在实际开发中做出明智的选择。原创 2024-12-30 14:16:50 · 1375 阅读 · 0 评论 -
机器学习-cart树
1、cart回归树评价指标:mse描述:依次遍历所有特征,依次遍历每个特征的所有取值,算出当前每一个可能的切分点的误差,最后选择切分误差最小的点将输入空间切分为两个部分,然后递归上述步骤,直到切分结束。...原创 2019-08-28 23:00:48 · 138 阅读 · 0 评论 -
一文带你看透 kd 树的 “魔法” 世界
kd 树作为一种强大的数据结构,为我们处理高维数据提供了高效的解决方案。从基本概念到构建过程,从应用场景到构建注意事项,我们深入了解了 kd 树的方方面面。通过合理地构建和应用 kd 树,我们能够在众多领域中提高数据处理效率,解决实际问题。原创 2025-01-30 12:02:59 · 1022 阅读 · 0 评论 -
揭秘B树与B+树:如何保持高效的磁盘访问
B树和B+树是两种广泛应用于数据库和文件系统的自平衡多路查找树。B树通过严格的规则确保树的高度接近对数级别O(logn),而B+树则通过将所有数据记录存储在叶子节点中,提高了范围查询和顺序扫描的效率。本文详细介绍了B树和B+树的概念、常见的操作方法(如查找、插入和删除)、时间复杂度及其在文件系统、数据库索引等场景中的应用,并突出了两者的差别,帮助更好地理解它们的工作原理。原创 2024-12-30 13:08:52 · 1124 阅读 · 0 评论 -
AVL树入门:理解自平衡二叉查找树的基础
AVL树(Adelson-Velsky and Landis Tree)是一种自平衡二叉查找树,通过严格限制每个节点左右子树的高度差不超过1来保持平衡,确保树的高度接近对数级别O(logn),从而提供高效的查找、插入和删除操作。本文详细介绍了AVL树的概念、常见的操作方法(如查找、插入和删除,包括左旋、右旋和双旋)、时间复杂度及其在关联数组、操作系统调度器、数据库索引等场景中的应用,并通过具体例子帮助更好地理解其工作原理。原创 2024-12-30 12:49:24 · 812 阅读 · 0 评论 -
红黑树全解:概念、操作方法及常见应用
红黑树(Red-Black Tree)是一种自平衡二叉查找树,通过严格的着色规则和旋转操作确保树的高度接近对数级别O(logn),从而提供高效的查找、插入和删除操作。本文详细介绍了红黑树的概念、常见的操作方法(如查找、插入和删除)、时间复杂度及其在关联数组、操作系统调度器、数据库索引等场景中的应用,并通过具体例子更好地理解其工作原理。原创 2024-12-30 12:32:18 · 963 阅读 · 0 评论 -
自平衡二叉查找树:如何让二叉查找树始终保持高效
自平衡二叉查找树(Self-balancing Binary Search Tree)通过严格的规则和操作,确保在插入、删除等操作后树的高度始终保持在对数级别O(logn),从而提供高效的查找、插入和删除操作。本文详细介绍了红黑树、AVL树、伸展树和Treap等常见类型的自平衡机制,并探讨了它们在关联数组、操作系统调度器、数据库索引等实际应用中的表现。希望这篇文章能帮助读者深入了解自平衡二叉查找树的工作原理及其优势。原创 2024-12-30 12:21:12 · 1389 阅读 · 0 评论 -
揭秘堆排序:大顶堆和小顶堆的高效利用
本文详细介绍了堆排序的原理,以及大顶堆和小顶堆的概念和特性。堆是一种特殊的完全二叉树结构,广泛应用于排序和优先队列的实现中。大顶堆用于维护最大值的优先级,而小顶堆用于维护最小值的优先级。堆排序通过建堆和反复调整堆顶元素,实现了稳定的O(nlogn) 排序性能。原创 2024-12-30 19:56:32 · 861 阅读 · 0 评论 -
java数据结构
java常用数据结构map、Array_List、set原创 2021-04-27 15:50:20 · 124 阅读 · 0 评论 -
数据结构母题每日一练
【代码】数据结构母题每日一练。原创 2025-01-25 19:00:34 · 173 阅读 · 0 评论 -
python堆排序之heapq
python 的 heapq 模块及python实现大顶堆原创 2023-06-05 16:29:59 · 1349 阅读 · 0 评论 -
Python 中最大堆和最小堆的构建与应用:以寻找第 k 大元素为例
最大堆和最小堆作为重要的数据结构,在 Python 中可以方便地使用 heapq 库来实现。通过分析堆的插入和删除操作的时间复杂度,我们可以看到堆在处理需要频繁插入和删除元素的场景中具有很高的效率。原创 2025-02-02 18:46:38 · 1238 阅读 · 0 评论 -
解析 Python heapq:元组最小堆构建时的比较顺序
在 Python 的数据处理和算法实现中,`heapq` 模块扮演着重要的角色。它提供了堆队列算法(优先队列算法)的高效实现。当我们使用元组作为元素来构建最小堆时,了解元素之间的比较顺序至关重要,这将直接影响到堆的结构和最终结果。本文将深入探讨 `heapq` 利用元组构建最小堆时的比较顺序,通过丰富的案例和详细的代码解读,帮助读者更好地掌握这一知识点。原创 2025-02-07 01:27:02 · 1165 阅读 · 0 评论 -
深入剖析 Bitmap 数据结构:原理、应用与优化策略
在计算机科学领域,数据的高效存储和快速处理一直是核心问题。随着数据量的不断增长,如何用最少的空间和最快的速度来表示和操作数据变得至关重要。Bitmap(位图)作为一种简洁而强大的数据结构,应运而生并在众多领域得到了广泛应用。本文将深入探讨 Bitmap 的原理、应用场景、实现方式以及相关的技术细节。原创 2025-02-03 22:40:54 · 2212 阅读 · 0 评论 -
leetcode-数组
118. 杨辉三角class Solution: def generate(self, numRows: int) -> List[List[int]]: result = [] for i in range(numRows): now = [1]*(i+1) if i > 1: ...原创 2019-09-01 11:31:45 · 221 阅读 · 0 评论 -
leetcode-动态规划
53. 最大子序和class Solution: def maxSubArray(self, nums: List[int]) -> int: n = len(nums) dp = nums if n == 1: return dp[0] for i in range(1, n): ...原创 2019-09-02 09:33:04 · 133 阅读 · 0 评论 -
leetcode-DFS、BFS
200. 岛屿数量class Solution: def numIslands(self, grid: List[List[str]]) -> int: nextStep = [[0, 1], [0, -1], [-1, 0], [1, 0]] step = 0 def dfs(grid, x, y):...原创 2019-09-02 23:54:56 · 227 阅读 · 0 评论 -
leetcode-链表
开始建立一个None的节点ret,最后返回ret.nextnode = ListNode(None) p = node while p: .....return node.next 快慢指针判断是否相交链表反转160. 相交链表class Solution(object): def getIntersectionNode(self, headA, he...原创 2019-09-03 18:53:17 · 145 阅读 · 0 评论 -
leetcode-二叉树简单题
144. 二叉树的前序遍历递归实现class Solution: def preorderTraversal(self, root: TreeNode) -> List[int]: if not root: return [] return [root.val] + self.preorderTraversal(...原创 2019-09-03 21:31:47 · 1489 阅读 · 0 评论 -
leetcode-二叉树路径题
常规做法是dfs搜索左右子树257. 二叉树的所有路径class Solution: def binaryTreePaths(self, root: TreeNode) -> List[str]: res = [] def dfs(root, path): if not root: ret...原创 2019-09-03 23:57:30 · 186 阅读 · 0 评论 -
leetcode-二叉树结构题
常规做法是原创 2019-09-03 23:58:16 · 185 阅读 · 0 评论 -
leetcode-回溯
排列组合典型原创 2019-09-04 01:38:51 · 154 阅读 · 0 评论 -
leetcode-排序
快排、堆排、归排原创 2019-09-04 01:39:53 · 140 阅读 · 0 评论 -
leetcode-堆、栈、队列
堆栈队列原创 2019-09-04 01:40:54 · 235 阅读 · 0 评论 -
leetcode-哈希表
查询时间复杂度:O(1)原创 2019-09-04 01:41:56 · 328 阅读 · 1 评论 -
leetcode-动态规划(二)
动态规划解题步骤总结:1、确定状态(1)研究最优策略的最后一步(2)化为子问题2、转移方程(1)根据子问题定义直接得到3、初始条件和边界情况4、计算顺序(1)由小到大逐个计算5、例子(1)打家劫舍1, 2, 3(2)Jump Game(3)Coin Change(4)Uniuqe Paths...原创 2019-08-16 11:06:19 · 173 阅读 · 0 评论 -
leetcode刷题笔录
1、生成26个大小写字母arr = [chr(i) for i in range(ord('a'),ord('z'))]arr = [chr(i) for i in range(ord('A'),ord('Z'))]arr = [chr(i) for i in range(65,91)]arr = [chr(i) for i in range(97,123)]ord chr...原创 2019-08-14 09:56:07 · 167 阅读 · 0 评论 -
leetcode-字符串(一)
67. 二进制求和bin(num):转成2进制int(num,2):用2进制读取class Solution: def addBinary(self, a: str, b: str) -> str: return bin(int(a,2) + int(b,2))[2:]原创 2019-08-14 20:25:28 · 214 阅读 · 0 评论 -
python-常用写法(Updating)
1、mapmap()是 Python 内置的高阶函数,它接收一个==函数 f ==和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。原创 2019-08-14 09:51:01 · 214 阅读 · 0 评论 -
归并排序(python版)
1、 描述将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并2、思想分治3、代码import randomnums = []for i in range(10):nums.append(random.randint(0, 10))def merge_sort(nums): if len(nums...原创 2019-03-13 17:13:08 · 201 阅读 · 0 评论 -
leetcode-动态规划(一)
动态规划类型总结1、计数(1)有多少方式走到右下角(2)有多少种方法选出k个数和为sum2、求最大最小值(1)从左上角走到右下角路径的最大数字和(2)最长上升子序列长度3、求存在性(1)取石子游戏,先手是否必胜(2)能不能选出k个数和为sum...原创 2019-08-16 11:09:53 · 214 阅读 · 0 评论 -
leetcode-常见方法
1、str.isalpha():检测字符串是否只由字母组成2、Counter from collections import Counter r = Counter(ransomNote) m = Counter(magazine) for k in r.keys(): if k not in m or m[k] - r[k]...原创 2019-08-30 16:00:17 · 212 阅读 · 0 评论 -
leetcode-常见写法
1、while(1)循环541:反转字符串class Solution: def reverseStr(self, s: str, k: int) -> str: val = list(s) res = 0 while res < len(s): val[res:res + k] = val[res:...原创 2019-08-30 22:54:59 · 340 阅读 · 0 评论 -
leetcode-字符串(二)
345. 反转字符串中的元音字母class Solution: def reverseVowels(self, s: str) -> str: rev = ['a','e','i','o','u','A','E','I','O','U'] res = [i for i in s if i in rev] ...原创 2019-08-30 19:58:45 · 191 阅读 · 0 评论 -
快速排序(python版)
快速排序1、描述通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分 记录继续进行排序,以达到整个序列有序。2、思想:分治3、代码import randomdef quick_sort(nums, start, end): if start &amp;amp;gt;= end: return low = star...原创 2019-03-13 16:27:04 · 598 阅读 · 0 评论