叫我安不理

随笔分类 -  数据结构与算法

重生之数据结构与算法----常见排序算法(二)
摘要:简介 上文中,我们讲到了选择排序,冒泡排序,插入排序,希尔排序。 都是相对比较简单的实现方式,因为它们都是以人的思维,维护一个index,将index与周围元素逐步对比。直到整个数组有序。 但越是效率高的算法,反而要越接近计算的的思维。否则非常难以突破O(N^2)的桎梏。 而接下来的几种效率高算法, 阅读全文

posted @ 2025-03-13 15:11 叫我安不理 阅读(97) 评论(0) 推荐(0) 编辑

重生之数据结构与算法----常见排序算法(一)
摘要:简介 排序算法有三个重要的指标: 时间/空间复杂度 在前面的文章中,虽然经常强调空间换时间能解决大多数问题。但如果时间与空间都比较小,自然是更好的选择。 排序稳定性 相同的元素,如果排序之后相对位置没有发生改变,那可以被称为稳定排序,否则就是不稳定排序。 比如说两个相同的数,排序前它们的顺序是 a 阅读全文

posted @ 2025-03-12 14:55 叫我安不理 阅读(145) 评论(0) 推荐(0) 编辑

重生之数据结构与算法----图的遍历
摘要:简介 上文讲到,图的本质是多叉树。因此主要遍历方式还是DFS与BFS。 唯一的区别在于,树结构中不存在环,而图中可能回成环。因此我们需要记录一下已经访问过的节点,避免死循环。 深度优先遍历(DFS) 遍历所有节点 /// <summary> /// 邻接表实现DFS /// </summary> / 阅读全文

posted @ 2025-03-11 13:30 叫我安不理 阅读(221) 评论(0) 推荐(1) 编辑

重生之数据结构与算法----图论
摘要:简介 图结构本质上还有多叉树的变种,图结构在逻辑上,由于若干个节点和边组成。但在实际落地中,一般用邻接表,邻接矩阵来存储图 在标准的树结构中,一般都是单链表表示,即只允许父节点指向子节点,两个子节点之间也不允许互相指向。 而图中,则是双链表放飞自我版,既可以父子之间互相指向,又可以子节点互相链接,形 阅读全文

posted @ 2025-03-10 16:29 叫我安不理 阅读(250) 评论(0) 推荐(0) 编辑

重生之数据结构与算法----二叉树的变种
摘要:挖坑待埋 由于二叉树有很多变种,目前只提供逻辑概念,具体实现日后慢慢补充 二叉搜索树 上文简单的介绍了一下二叉搜索树(BST),这个树可以说是梦的起点。无数高性能搜索方案,底层核心都是基于BST来构建。 那二叉搜索树有什么优势呢? 它的优势即左小右大,左子树的每个节点都小于当前节点,右子树的每个节点 阅读全文

posted @ 2025-03-07 12:36 叫我安不理 阅读(43) 评论(0) 推荐(1) 编辑

重生之数据结构与算法----二叉树
摘要:简介 二叉树作为链表的衍生,本身不难。但它同样是其它复杂数据结构的前身。比如红黑树,多叉数,二叉堆,图,字典数等等。如果不熟悉二叉树,就会陷入一个难者不会,会者不难的境地。 几种简单的二叉树 树的顶点(1),一般称为根节点,下方直接相连的节点称之为子节点,上方直接相连的节点称之为父节点,最下方没有子 阅读全文

posted @ 2025-03-06 10:34 叫我安不理 阅读(232) 评论(0) 推荐(1) 编辑

重生之数据结构与算法----哈希表
摘要:简介 hash的基本原理,可以理解为一个加强版的数组。为什么这么说呢,数组通过index来实现随机访问Log(1),而hash的key也是类似,把key理解为index,本质上还是一个基于数组的随机访问。 那么问题来了,如何把hash的key转换成数组的index呢? hash函数如何实现 hash 阅读全文

posted @ 2025-03-05 14:42 叫我安不理 阅读(327) 评论(0) 推荐(1) 编辑

重生之数据结构与算法----队列&栈
摘要:简介 上文说到,数据结构只有两种。其它的数据结构都是它的整花活。 栈 栈只能在表的一端(称为栈顶)进行插入和删除操作,遵循 “后进先出”(Last In First Out,LIFO)的原则。就像生活中的一摞盘子,最后放上去的盘子会最先被拿走 队列 它只允许在表的一端进行插入操作(队尾),在另一端进 阅读全文

posted @ 2025-03-04 13:15 叫我安不理 阅读(281) 评论(0) 推荐(2) 编辑

重生之数据结构与算法----数组&链表
摘要:简介 数据结构的本质,只有两种结构,数组与链表。其它的都是它的衍生与组合 算法的本质就是穷举。 数组 数组可以分为两大类,静态数组与动态数组。 静态数组的本质是一段连续的内存,因为是连续的,所以我们可以采用偏移量的方式来对元素实现快速访问。 而动态数组则是对静态数组的封装,使得更加方便操作元素。有了 阅读全文

posted @ 2025-03-03 13:31 叫我安不理 阅读(341) 评论(1) 推荐(1) 编辑

导航