![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法和数据结构
J___code
这个作者很懒,什么都没留下…
展开
-
算法和数据结构-前缀树
介绍前缀树的概念以及代码实现原创 2022-02-01 23:07:46 · 661 阅读 · 0 评论 -
算法和数据结构-最短路径算法Dijsktra
介绍最短路径算法Dijsktra的实现细节原创 2022-01-28 22:33:32 · 520 阅读 · 0 评论 -
算法和数据结构-最小生成树之Prime
介绍最小生成树算法之一的Prime算法原创 2022-01-28 22:29:56 · 700 阅读 · 0 评论 -
算法和数据结构-最小生成树之Kruskal
介绍最小生成树算法之一的Kruskal算法原创 2022-01-27 23:04:13 · 298 阅读 · 0 评论 -
算法和数据结构-图
介绍图的实现、宽度/深度优先遍历以及拓扑排序原创 2022-01-27 22:59:58 · 942 阅读 · 0 评论 -
算法与数据结构-满二叉树(FBT)
满二叉树的特性以及使用套路方法去判断满二叉树原创 2022-01-22 16:04:54 · 234 阅读 · 0 评论 -
算法与数据结构-平衡二叉树(BBT)
平衡二叉树的特性以及使用套路方法去判断平衡二叉树原创 2022-01-22 16:02:56 · 503 阅读 · 0 评论 -
算法与数据结构-搜索二叉树(BST)
介绍搜索二叉树以及如何判断二叉树是否为搜索二叉树原创 2021-12-10 22:42:47 · 407 阅读 · 0 评论 -
算法与数据结构-二叉树
从二叉树的遍历初步了解二叉树的性质和结构原创 2021-12-06 21:45:52 · 471 阅读 · 0 评论 -
算法与数据结构-链表
什么是链表?单链表的节点结构:Class Node<V>{ V value; Node next;}由以上结构的节点依次连接起来形成的链叫单链表结构双链表的节点结构:Class Node<V>{ V value; Node next; Node last;}由以上结构的节点依次连接起来形成的链叫双链表结构链表操作:反转单向和双向链表,如果链表长度为N,时间复杂度要求为O(N),额外空间复杂度要求为O(1原创 2021-11-27 21:23:26 · 186 阅读 · 0 评论 -
算法与数据结构-哈希表和有序表
哈希表:(1)哈希表在使用层面可以理解为一种集合结构(2)如果只有key,没有伴随数据value,可以使用HashSet结构(C++中叫UnOrderSet)(3)如果既有key,又伴随数据value,可以使用HashMap结构(C++中叫UnOrderMap)(4)有无伴随数据value,是HashMap和HashSet的唯一区别,底层结构是一样的(HashSet是通过HashMap实现的,只不过Value始终是PRESENT)(5)哈希表的增/删/改/查可以认为时间复杂度为O(1),但是常数原创 2021-11-23 22:46:44 · 533 阅读 · 1 评论 -
算法与数据结构-排序算法总结
什么是稳定性:同样值的个体间,如果不因为排序而改变相对次序,则这个排序就有稳定性,否则就没有稳定性的意义:对于基本类型而言,排序算法的稳定性作用不大。但是对于非基础类型,是存在一定的价值的。比如对于学生信息先按age进行由小到大的排序,排好后再按班级进行排序。此时如果排序算法是稳定的,则在按班级分好班后,相同年龄的学生不会相对顺序不会改变。不具备稳定性的排序:选择排序、快速排序、堆排序具备稳定性的排序:冒泡排序、插入排序、归并排序、一切桶排序思想下的排序为什么具备/不具备稳定原创 2021-11-19 22:46:32 · 799 阅读 · 0 评论 -
算法与数据结构-桶排序
桶排序:在桶排序思想下的排序都是不基于比较的排序,运用范围有限,需要样本的数据状况满足桶的划分。下面介绍桶排序思想下的两个排序(1)计数排序 (2)基数排序时间复杂度 :O(N)...原创 2021-11-17 23:16:03 · 423 阅读 · 0 评论 -
算法与数据结构-比较器
什么是比较器?在C++中是重载比较运算符,可以在数组,堆等结构中使用如何实现比较器?原创 2021-11-15 10:31:21 · 92 阅读 · 0 评论 -
算法与数据结构-堆排序
堆排序:时间复杂度 :O(NlogN),可以从下面过程部分和heapSort代码中得知空间复杂度 :O(1),这也是相较于快排(O(logN)),归并排序(O(N))等其他排序方法的优势过程:要实现堆排序,就了解堆结构和下面的操作过程:堆结构是用数组实现的完全二叉树结构,完全二叉树如果每一棵子树的最大值都在顶部就是大根堆下面是对堆结构的一些操作:1.形成大根堆:将每次插入的数不断和父节点进行比较,大于父节点的值就向上移动, 假设当前节点的下标为index,则父节点的下标为(i原创 2021-11-13 20:54:39 · 610 阅读 · 0 评论 -
算法与数据结构-快排
快排:时间复杂度 :方式1.将数组最右边的数作为划分值进行划分, 划分为 (<=num) | (>num) 两个区域,然后将(>num)的第一个数和划分值进行交换,再将其左侧和右侧重复该行为。该方式每次确定一个数,时间复杂度O(N^2)方式2.将数组最右边的数作为划分值进行划分,划分为 (<num) | (=num) | (>num) 三个区域,然后将(<num)和(>num)继续同样的操作,速度较方式1稍快,因为每次可以确定一组数。时间复杂度O(N^2)原创 2021-11-10 09:23:31 · 256 阅读 · 0 评论 -
算法与数据结构-归并排序
归并排序:时间复杂度 :采用master公式,T(N)=2T(N/2)+O(N),其中O(N)为merge操作的时间复杂度;T(N)符合log_b^a=d=1, 时间复杂度为O(NlogN)。空间复杂度为O(N), 因为每次申请完空间后会自动释放。过程:1.让左半部分和右半部分都有序2.合并排好序的两个部分:2.1 申请一个额外数组用于储存排序后的数, 大小为R-L+12.2 申请两个指针分别指向左右两部分,比较两个指针指向的数,谁大就将其填入额外数组2.3 最后将左/右半部分剩余的元原创 2021-11-10 09:15:04 · 56 阅读 · 0 评论 -
算法与数据结构-冒泡/插入/选择排序
1.冒泡排序:时间复杂度 :O(N^2), 与数据原始排列状态无关(即使原始数组已经排列好了,也是需要进行相同次数的操作)。过程:依次找出最大, 次大…放在arr[arr.length-1],arr[arr.length-2]…代码实现:public static void bubbleSort(int[] arr) { if (arr == null || arr.length < 2) { return; }原创 2021-10-31 20:24:40 · 107 阅读 · 0 评论 -
算法与数据结构-对数器
什么是对数器?参考资料: https://www.bilibili.com/video/BV13g41157hK?p=2有一个你想要测的方法a;实现一个绝对正确但是复杂度不好的方法b;实现一个随机样本产生器;实现对比算法a和b的方法;把方法a和方法b比对多次来验证方法a是否正确;如果有一个样本使得比对出错,打印样本分析是哪个方法出错;当样本数量很多时比对测试依然正确,可以确定方法a已经正确。如何实现对数器? // 用于比较的方法, 比如想要验证实现的冒泡排序是否正确, 就选原创 2021-10-31 19:37:25 · 64 阅读 · 0 评论