- 博客(78)
- 收藏
- 关注
原创 数据结构与算法-进阶(二十二)跳表
跳表可以降低有序链表的添加、删除和搜索的平均时间复杂度。跳表的应用场景也是比较多,比如在 Redis 中使用。它的实现逻辑也是值得去学习的。
2022-06-26 16:46:10
420
1
原创 数据结构与算法-进阶(二十一)动态规划案例
上期介绍动态规划的什么,有什么特性,能解决什么类型的问题。这期就通过一个案例,看一下动态规划解决问题的过程。
2022-06-19 21:56:57
157
原创 数据结构与算法-进阶(二十)动态规划
动态规划是求解最优化的一种常用策略,它依然需要拆分成若干个子问题,但是每个子问题只有求解一次,并保存它的解。可以用动态规划解决的问题需要有*最优子结构*和*无后效性*两个特定。
2022-06-17 23:46:59
179
原创 AppClips&Tips(持续更新 20220706)
事事无绝对,只怕有心人。没有解决不了的问题,不放弃,总是会解决的。记录在开发过程中遇到的问题。
2022-06-09 20:06:55
359
原创 数据结构与算法-进阶(十九)分治
分治就是将原问题不断拆分成规模小的问题,直到小问题可以得出答案为止,然后再往上推导出原问题的答案。拆分的问题必须要和原问题结构是一致,这和递归的解答思路较大程度上是一致的。...
2022-06-04 10:22:24
311
原创 数据结构与算法-进阶(十八)贪心策略
贪心策略的本质逻辑就是每一次都选择当前的最优解,直到得出全局的最优解,但是每一次的局部最优解不能和最终的全局最优解划上等号。这也就是贪心策略的缺点。
2022-05-29 22:25:29
2399
原创 数据结构与算法-进阶(十七)回溯
回溯本质就是前进不成,就后退一步换另外一条路继续前进,直到到达目的地。它在树结构、图结构中都有应用。本文通过解决八皇后的问题来了解回溯的思想。
2022-05-27 21:31:25
128
原创 数据结构与算法-进阶(十五)递归
递归是简化解决问题的思路,减少代码的处理方式。其本质就是将问题不断拆分成同类型的小问题,找到可以直接给出答案的地方时,再不断反推,直到得出原问题的答案。
2022-05-11 21:17:51
178
原创 数据结构与算法-进阶(十四)最短路径&Floyd 算法
Floyd 算法是可以计算出任意两个顶点之间的最短路径。它的核心原理基于这样一个共识,即两个顶点之间的最短路径的情况要么是两个顶点之间直接连接,要么就是通过其他顶点连接。
2022-04-29 09:42:54
901
原创 数据结构与算法-进阶(十三)最短路径&Bellman-Ford 算法
Bellman-Ford 算法是求单源最短路径的算法,它的核心就是不断松弛边,使得到达其他顶点成为最短路径。这次终于理解了边的松弛操作的本质了,也是可喜可喜
2022-04-25 21:11:32
329
原创 数据结构与算法-进阶(十二)最短路径&Dijkstra 算法
理解 Dijkstra 算法,可以想象将石头依次从桌子上提起来的场景,绷直的边就是最短的路径。比较难理解就是松弛操作,需要多思考一些。看来算法也是源于自然和生活啊(没有根据的猜测)!!!
2022-04-21 21:37:14
661
原创 数据结构与算法-进阶(十一)图&最短路径
所有的图都是有最短路径的,计算最短路径比较经典的应用场景就是路径规划。最短路径也有它自身的局限性,比如不能出现负权环等。这里先了解最短路径的概况,后面几期将分别介绍求最短路径的几个经典算法。
2022-04-20 22:10:41
804
原创 数据结构与算法-进阶(十)生成树& kruskal 算法
Kruskal 是求最小生成树的算法,本质就是依次将权值小的边不断并入最小生成树中。这期间可能会形成环,这里使用并查集的数据结构来避免形成环,这个点是非常巧妙的。
2022-04-15 09:31:00
405
原创 数据结构与算法-进阶(九)生成树 & Prim 算法
生成树是一种图的表现形式,它有个简单的规定,就是边的数量等于顶点的数量减一。在有权图中找到最小生成树在很多场景中被应用到。这里主要介绍一种获取最小生成树的方法,即 **Prim**。还有另外一种,下期继续。
2022-04-11 18:52:04
852
原创 数据结构与算法-进阶(八)AOV 网
AOV 网是图的一种类型,本质是一个有向无环图。AOV 网的排序被称为拓扑排序,它的实现思路是卡恩算法。代码实现上要留意删除顶点的操作,这是一个很巧妙的处理方式。
2022-04-02 10:07:36
6612
原创 数据结构与算法-进阶(七)图的遍历
图的遍历有两种方式,这两种方式和二叉树的层序遍历和前序遍历逻辑是一致的,在实现过程中使用到了队列和栈的数据结构。看本期文章相当于重温一下队列、栈和二叉树的遍历等知识。
2022-03-30 20:52:36
670
原创 数据结构与算法-进阶(六)图的接口实现
本期通过实现图的接口函数,来进一步理解在代码中,图的结构是如何形成的,比如怎么定义边、如何定义顶点、如何定义边与顶点的连接关系等等。
2022-03-25 19:12:29
1289
原创 数据结构与算法-进阶(五)图的实现
实现图结构的方案大致为邻接矩阵和邻接表,本期就介绍一下这两个方案分别是什么。在最后会处理一下图的基本接口,以及顶点结构和边结构,为下期代码实现做准备。
2022-03-23 20:22:03
2115
2
原创 数据结构与算法-进阶(四)图的分类续
在上期介绍完无向图和有向图之后,延伸出完全图、有权图以及连通图。主要根据边直接连接,还是间接连接,有方向,还是没有方向来区分。其中的有权图在实际生活中可以找到很多对应的场景。
2022-03-18 20:27:40
1024
2
原创 数据结构与算法-进阶(三)图
数据结构中第三大分类就是图结构。简单地理解,图就是由顶点和边组成的。根据顶点的分布和边的连接这两种情况,可以分成不同的类型。接下来将介绍图以及它的大致分类。
2022-03-16 20:40:09
918
2
原创 数据结构与算法-进阶(二)并查集的优化
并查集解决的就是快速查找和连接的问题,所以就有在连接(即合并)上的优化和在查找上的优化。不管哪个方面的优化,核心就是降低树的高度,就能减少合并时调整的路径,查找时经过的路径,时间复杂度也就随之降低。
2022-03-11 20:58:36
1887
原创 数据结构与算法-进阶(一)并查集
并查集可以快速查找多个点之间是否连接,以及快速连接多个点。并且并查集使用数组的数据结构实现。那么如何利用数组的结构实现?以及为什么能够快速查找和连接呢?文章将给出答案。
2022-03-09 11:14:21
446
原创 数据结构与算法-基础(二十二)二叉树的非递归遍历
二叉树的遍历可以用递归的方式简单实现,但是递归也有其局限性,所以非递归实现是否可行?下面的文章就会告诉答案。递归的局限性是什么?文章中也会给出作者的理解。
2022-03-04 20:53:45
453
原创 数据结构与算法-基础(二十一)Trie(前缀树)
Trie 被称为前缀树,结构类似树,一个节点有多个子节点,那么在搜索路径中就有多条路,也是高效检索的本质。Trie 的检索和字典查找单词的场景非常相似。
2022-03-02 21:14:21
547
原创 数据结构与算法-基础(二十)优先级队列
队列的数据结构保证先进先出特性,优先级队列打破先进先出特性,制定优先级高的先出队规则。依然使用数组的数据结构,并且也要优化遍历和插入操作,就需要满足这两个添加的大顶堆来支持。所以优先级队列基于大顶堆实现是最优的选择。
2022-02-25 20:23:21
333
原创 数据结构与算法-基础(十九)堆
堆可以分为大顶堆和小顶堆,是根据节点与子节点的比较来界定。文章中可以使用数组来存放元素,并处理节点与子节点的比较和交换,就是利用了二叉树的基础性质,看完文章相当于再次温习了二叉树的基础性质。
2022-02-23 20:17:57
422
原创 数据结构与算法-基础(十八)哈希表
哈希表整体结构就是一个数组,元素的结构是 key-value 形式,因为 key 可以是任意可能类型,那么就需要一个标准性的生成唯一索引方式,所以就引出哈希值这个名称。本文在介绍哈希表时,也着重的说明哈希值,了解哈希值的背景以及生成逻辑,才能更好地理解哈希表。
2022-02-18 21:06:22
156
原创 数据结构与算法-基础(十七)映射
映射的数据结构可以用链表、AVL 树或者红黑树中的任何一种来实现,对外实现对映射序列中元素的增、删、改和查等操作。所以通晓链表、AVL 树或者红黑树的底层实现逻辑之后,在顶层实现其他的数据存储序列都能很快的切入和掌握。
2022-02-16 10:32:49
548
原创 数据结构与算法-基础(十六)集合
**集合**最重要的特点就是它里面的元素是不会存在重复的,所以集合的内部实现中,添加元素函数是需要先判断是否已经存在这个元素,是代码实现的核心部分。
2022-01-06 20:33:40
292
原创 数据结构与算法-基础(十五)红黑树(3)删除元素
红黑树删除节点,和 B 树删除节点的情况非常的接近。理解红黑树删除节点之后的恢复操作前,再过一下 B 树的删除逻辑,这样会更好的理解红黑树的删除逻辑。各种处理操作就不会离开一个主要思想,就是红黑树的 5 条性质。
2022-01-05 21:10:23
331
原创 数据结构与算法-基础(十四)红黑树(2)添加元素
红黑树添加元素后,需要根据红黑树的 5 条性质判断是否满足,如果不满足就需要做相应的处理使其依然满足红黑树。分析逻辑和实现代码上面有一些比较巧妙的处理点,很值得学习。
2021-12-29 20:33:55
932
原创 数据结构与算法-基础(十三)红黑树(1)概述
红黑树是数据结构中重要的一种结构,其本质是通过定义一些性质,让二叉树分布结构变的相对合理,并在动态添加或者删除的过程中去修复结构。红黑树在搜索、添加、删除这 3 种操作的效率相对比较均衡,所以有很多实际的应用场景。
2021-12-24 20:34:59
593
原创 数据结构与算法-基础(十二)B 树
B 树是一种平衡的多路搜索树,在添加、删除和搜索等一些操作上和二叉搜索树是同样的逻辑,除此之外 4 阶 B 树在结构上和红黑树也是相似的。所以了解 B 树,可以更好的切入学习红黑树。
2021-12-21 20:27:30
502
原创 iOS-启动项目(二)引入第三方库
项目中很大几率会用到第三方库,通过 Pod 方式引入第三方库是效率很高的方式,这里介绍一个新的项目搭建 Pod 方式的环境,方便项目中引入第三方库文件。
2021-12-16 21:32:09
907
原创 iOS-启动项目(一)设置 rootViewController(22年4月22日更新可用)
刚创建一个新的项目,在 `AppDelegate` 中设置 `rootViewController` 来确定应用的首页是一个最基本的处理,因为是不常操作的处理,所以容易忽略其中的某个步骤,导致无法设置成功。所以记录下来,以备快速查找。
2021-12-15 21:25:44
4070
原创 Alamofire-5.0.0 以上报错
Alamofire 更新到新版本时,遇到了两个错误❌和一个警告⚠️,所以记录下来它们,以及如何解决它们。给其他出现类似问题的同道一些解决的方向。
2021-12-09 18:07:02
2593
3
原创 Swift-技巧(十一)重写运算符
基础数据的运算可以直接使用四则运算符。在 Swift 中也可以通过重写四则运算符的方式,让 struct 或者 class 创建的结构体或者对象也能像基础数据那样直接使用四则运算符。
2021-12-07 20:55:56
1679
原创 Swift-技巧(十) Protocol 的灵活使用
`Protocol` 是 Swift 中实现面向协议编程思想的重要部分。在使用过程中有遇到协议中声明的部分,但是在遵守部分不需要实现的,那么就需要使用 `extension` 参与进来,让 `Protocol` 使用的更加灵活,得心应手。
2021-12-03 20:51:09
578
原创 Swift-技巧(九)CGImage To CVPixelBuffer
iOS 中图像的表现形式不只是 Image,还有更加底层的方式,比如 `CVPixelBuffer` 像素缓存形式,那么 CGImage 就可以转换为像素缓存的方式也是需要了解的。
2021-11-30 20:59:33
1817
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人