
算法
文章平均质量分 59
越甲八千
置身其中,全力以赴
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
1 2 3 4 5顺序插入,形成一个红黑树
红黑树是一种自平衡的二叉搜索树,通过颜色标记和平衡性约束确保树高为O(log n)。其核心特性包括节点颜色(红或黑)、根节点和叶子节点为黑色、红色节点的子节点必须为黑色,以及从任一节点到叶子的路径包含相同数目的黑色节点。这些特性使得红黑树在插入和删除时通过颜色调整和旋转操作维持平衡,避免了普通二叉搜索树的退化问题。以顺序插入1、2、3、4、5为例,通过逐步调整和旋转,最终形成一棵符合红黑树性质的有效树结构。原创 2025-05-10 23:56:41 · 468 阅读 · 0 评论 -
为什么有了BST了,还要红黑树,红黑树有什么优点
BST(二叉搜索树)和红黑树都是常见的树形数据结构,但红黑树在某些方面对BST进行了优化,主要解决了BST在特定情况下可能出现的性能问题。虽然牺牲了一定的空间(每个节点多一个颜色位)和插入/删除时的调整开销,但在动态数据结构中表现更可靠,因此被广泛应用于各种高性能系统中。红黑树通过引入颜色标记和平衡性约束,解决了BST在特定情况下的退化问题,提供了稳定的。这种情况下,BST的效率大幅降低,无法满足高效查询的需求。,通过额外的颜色标记和平衡性约束,确保树的高度始终保持在。维持平衡,避免了BST的退化问题。原创 2025-05-10 23:52:41 · 685 阅读 · 0 评论 -
C++遍历树,前中后序,递归非递归实现
通过运行上述代码,你可以看到不同遍历方式的结果。原创 2025-03-21 08:49:22 · 359 阅读 · 0 评论 -
各种排序汇总
以下将详细介绍常见排序算法的排序过程,并给出对应的 C++ 代码实现。原创 2025-03-20 20:55:59 · 918 阅读 · 0 评论 -
C++堆排序
堆排序(Heap Sort)是一种基于二叉堆数据结构的比较排序算法,它是一种选择排序,可分为最大堆排序和最小堆排序,以下主要介绍最大堆排序。二叉堆的定义:堆排序的步骤:代码解释 函数: 函数: 函数: 函数:堆排序是一种高效的排序算法,尤其适用于处理大量数据的情况,它在性能上较为稳定,并且不需要额外的存储空间。原创 2025-01-13 19:49:53 · 1400 阅读 · 0 评论 -
二维数组附近遍历所有值
二维数组附近遍历所有值原创 2023-12-09 11:35:23 · 137 阅读 · 0 评论 -
斐波那契数列
#include<iostream>using namespace std;//递归方法int Fbnq(int val){ if(val <1) { exit(-1); } if(val==2 || val ==1) { return 1; } else { return Fbnq(原创 2016-08-08 17:20:26 · 1034 阅读 · 0 评论 -
非递归全排列
非递归全排列无非就是根据一个排列找到下一个; 以1 2 3 4 为例子; 1:先把给定的字符串排序(于小到大); 2:从后到前找到第一个相邻的递增对;例如:1 2 4 3 找到2 4 递增 于是得到4的下标2;如果没有找到,说明已经全排列好了;直接退出; 3:然后从后向前找到第一个比 2 大的值, 即 3; 4:交换2 3;—->1 3 4 2; 5:在从4(第2不的得到的4 下标)原创 2016-08-13 13:09:37 · 1222 阅读 · 0 评论 -
KMP算法
其实KMP算法最重要的是获得next[]数组的值,而next的只代表当字符不匹配时指向子串的指针应该回退到的地方, 他的值就是前缀字符串和后最字符串相等的最大的串的长度 abab前缀子串a;ab;abc;后缀子串b;ab;bab;所以到第2个b最大的相等的前后缀子串是2;以abcabaa为例子; a b c a b a a 0 0 0 1 2 1 1 然后把原创 2016-09-29 21:17:51 · 1128 阅读 · 0 评论 -
递归全排列
#include<iostream>using namespace std;void Swap(int *a, int *b){ int tep = *a; *a = *b; *b = tep;}bool Isswap(int arr[], int beg, int end){ for(int i=beg;i<end;++i) { i原创 2016-09-23 10:40:30 · 1200 阅读 · 0 评论 -
Hanoi塔递归实现
Hanoi规则不在赘述;直接上代码;#include<iostream>using namespace std;//移动最后一个void Move(char a, char b){ cout<<a<<"-->"<<b<<endl;}//a借助c放到b n个void Hanoi(int n,char a,char b,char c){ if(n<=0)//控制参数正确传入原创 2016-08-09 16:25:24 · 1117 阅读 · 0 评论