自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 【简明清晰】各种内部排序算法的比较及应用归纳

排序算法的性质 算法种类 时间复杂度 空间复杂度 是否稳定 最好情况 平均情况 最坏情况 直接插入排序 O(n) O(n²) O(n²) O(1) 是 冒泡排序 O(n) O(n²) O(n²) O(1) 是 简单选择排序 O(n²) O(n²) O(n²) O(1) 否 快速排序 O(nlog2n) O(nlog2n) O(n²) O(nlo

2021-08-15 17:24:32 270

原创 线索二叉树中序线索化以及构造

传统的二叉链表存储仅能体现一种父子关系,不能直接得到结点在遍历中的前驱或者后继。线索二叉树的存储结构:typedef struct ThreadNode{ ElemType data; struct ThreadNode *lchild, *rchild; //左右孩子指针 int ltag, rtag; //左右线索标志}THreadNode, *ThreadTree;ltag=0:lchild域指向结点的

2021-08-13 16:56:24 521

原创 更好用的冒泡排序、双向冒泡排序,拓展荷兰国旗问题

冒泡排序基本思想:从后往前(或者从前往后)两两比较相邻元素的值,若为逆序,则交换他们,直到序列比较完。当一整趟下来都没有元素被移动,代表算法可以提前结束。好比于关键字小的元素逐渐往上漂浮直到冒出水面,关键字打的元素如石头一般下沉到水底。void BubbleSort(ElemType A[], int n){ for(int i=0; i<n-1; i++) { flag = false; //表示本趟冒泡是否发生交换的标志 for(int j=n-1; j&gt

2021-08-12 16:37:33 223

原创 简单易懂插入排序算法大全:直接插入、折半插入、希尔Shell排序

直接插入排序直接插入排序的思想最简单也最直观步骤:1、查找出L(i)在[1…i-1]中的插入位置k; 2、将L[k…i-1]中所有元素依次后移一个位置;3、将L(i)复制到L(k)思想:每次将一个待排序的记录,按key大小插入到前面已排好序的子序列中void Directly_InsertSort(ElemType A[], int n){ int i, j; for(int i=2; i<=n; i++) { //依次将A[2]~A[N]插入到前面已排序

2021-08-11 18:01:33 183

原创 C++知识点汇总:内存分配、面向对象

C++ 内存的分配方式有几种? 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量。 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由我们决定,使用非常灵活,

2021-08-11 17:40:09 105

原创 C++知识点汇总:引用、指针、virtual、inline、new、delete

C++ 引用和指针的区别 指针一般指的是某块内存的地址,通过这个地址,我们可以寻址到这块内存;而引用是一个变量的别名,例如我们给小明起了个外号 指针可以为空,引用不能为空 引用 引用被称为变量的别名,它不能脱离被引用对象独立存在 引用变量在功能上等于一个指针常量,即一旦指向某一个单元就不能在指向别处 在底层,引用变量由指针按照指针常量的方式实现 引用看做是通过一个常量指针来实现的,它只能绑定到初始化它的对象上 指针 指针p也是对象,它同样有地址&p和存储

2021-08-08 17:25:12 156

原创 C++知识点汇总:const、纯虚函数、析构、内敛、extern

C++ const 指针 const指针是指针变量的值一经初始化,就不可以改变指向,初始化是必要的。 当成员函数被声明为const时,如果试图修改对象的数据,编译器将视为错误。 如果声明了一个指向const对象的指针,则通过该指针只能调用const方法(成员函数)。 C++ 指向const的指针 指针指向的内容是不能被修改的 C++ 纯虚函数 抽象类的特点 不能构建对象,可以构建对象指针 一般拿来充当中间访问层 C++ 虚析构函数

2021-08-08 17:23:57 346

原创 C++知识点汇总:多态、转换、指针、引用、重载、模板

C++多态性 一个接口,多种方法 不同继承关系的类对象,去调用同一函数,产生的不同的行为 继承中构成的条件 调用函数的对象必须是指针或者引用 被调用的函数必须是虚函数,且完成了虚函数的重写 虚函数的重写(覆盖) 派生类中有一个跟基类完全相同的虚函数 不同作用域(分别在基类和派生类) 函数名、参数、返回值都相同 基类函数必须有virtual关键字 静态多态 编译器在编译期间完成多态的构建 实现方式 函数

2021-08-08 17:22:31 149

原创 OpenCV 360度行车辅助系统——增强型倒车辅助

这个算法是我自己学习到的,和卓跃的级联分类器方法不大一样。光流分析的灵感来自于视频拼接。1、因为这种算法会将每一帧画面的运动结构进行一个函数解析,通过泰勒公式将目标兴趣点连接,甚至可以达到一个预判的效果3、我们这种光线捕捉的方法,只需要有光线就可以识别到,很适合夜间模式行车5、我们的核心就是:在第一帧图像中检测Shi-Tomasi角点, - 使用LK算法来迭代的跟踪这些特征点,如果在当前帧找到了上一帧中的点,那么这个点的状态就是1,否则就是0...

2021-08-08 17:18:51 1262 1

原创 OpenCV 360度行车辅助系统——红绿灯智能预判

AI学习红绿灯此功能仅限前置摄像头。当视频刚开始播放时,通过自研AI算法学习红绿像素高频出现的位置,学习结束后根据学习结果判断是否使用AI红绿灯 区域,并在接下来的视频部分针对区域进行红绿灯识别。检测到红灯则在视频底端显示“Red”字样,检测到绿灯则在视频底端显示“Green”字样。1、收集前5%帧的红绿色素点2、按照坐标大小排序,删掉前后10%,删掉异常大、小的值3、筛选后判断结果数量是否充足,充足则开始使用,不足则用系统默认的区域4、在应用的过程中持...

2021-08-08 17:06:15 1654

原创 STM32串口通信如何实现

在系统开机完成后,可以往串口发送指定格式的指令,系统接收到指令后会执行该指令,并将指令执行结果返回到串口和系统主界面上的系统信息区通过串口发送<GetTime>指令给系统,系统返回当前的时间至串口,返回的时间格式YYYY/MM/DD hh:mm, OK 结束,同时系统底部信息区显示 USART:<GetTime>。通过串口发送<SetTime,2019-08-03,05:40:38>指令给系统,系统设置当前系统时间,串口返回 OK,在系统主..

2021-08-08 16:58:56 582

原创 使用STM32安装接线和软件初始化

设备: STM32 开发板、语音模块、音频解码模块、温湿度感应器模块、拓展电路板拓展电路板接线(此步骤注意焊点,请误伤手)对应每个模块,将每个模块上对应的 3.3V/GND 端接入对应推展电路板端口。语音模块: 3V3-3.3V GND-GND温湿度感应器模块: 3V3-3.3V Data-DATA GND-GND音频解码模块: GND-GND其中四根直连线对应开发板 GPIO 口:红-PA7褐-PA6黑-PA5白-PE6正确接线情况软件初...

2021-08-08 16:54:51 1076

原创 创建你的第一个OpenCV项目

1.1.Mat类的所有内容 Mat这个类名是由矩阵借用而来的,是一个n维的数组,能够在单个或多个通道中存储和处理不同的数学数据类型。计算机视觉中的图像就是像素矩形(因此是二维数组),具有指定的宽度(矩阵中的列数)和高度(矩阵中的行数)。此外,灰度图中的一个像素可以用单个数字来表示(因此是单通道),最小值(通常是0)表示黑色,最大值(通常是255,即一个字节能表示的最大的数字),表示白色,最大与最小值之间的所有值相应地对应于不同的灰度。同样地,在标准RGB彩色图像中一个像素有三个...

2021-08-08 16:51:12 1038 1

原创 如何使用Qt配置运行使用OpenCV

0.5.开始Qt配置OpenCV首先先用Qt5创建一个新工程,可以选择Non-Qt-Project,不调用Qt的库文件:也可以使用常规Qt开发环境:【注】如果没有出现MSVC2015 32bit这种编译器,说明Qt版本过高(如Qt5.12及以上就会淘汰掉低版本,其他版本笔者未使用过)。在pro文件底端加上两行代码,以引入OpenCV构建好的库:待pro文件完成了OpenCV包的导入之后,我们还需要在qt头文件里面引用库函数。此时检查...

2021-08-08 16:49:21 2310 2

原创 OpenCV安装步骤,手把手教你解决一切问题

0.1.关于OpenCVOpenCV(Open Source Computer Vision Library)是一个开源的机器视觉和机器学习软件库。OpenCV为计算机视觉提供框架,产品受BSD授权。OpenCV库含有超过2500种优化的算法,其中包括全面经典的和当今世界最先进的机器视觉学习算法,可以用来检测和识别人脸,识别对象、人类行动的视频分类,跟踪相机移动,跟踪物体移动,提取对象的3D模型,从立体相机产生3D点云图像缝合到一起还原一个高分辨率场景,还可以删除红眼、跟随眼球运动、识别景物,提供增强现

2021-08-08 16:46:38 2253

原创 深度优先算法DFS实现图的遍历

与广度优先搜索不同,深度优先搜索DFS类似于树的先序遍历。伪代码如下:bool visited[MAX_NUM]; //访问标记数组void DFS_Traverse(Graph G){ for(v=0; v<G.vex_num; ++v) visited[v] = false; for(v=0; v<G.vex_num; ++v) { if(visised[v] == false) DFS(G, v); //防止漏掉非连通图 }}void D

2021-08-04 17:38:40 197 2

原创 广度优先算法BFS遍历图

广度优先搜索BFS类似于二叉树的层序遍历算法以V0为源点,按距离由近至远依次访问和V有路径相同且路径长度为1,2,3...的顶点。广度优先搜索是一种分层的查找过程,每向前走一步可能访问一批顶点,依一个辅助队列的帮助,记忆正在访问的顶点的下一层顶点伪代码如下:bool visited[MAX_NUM]; //访问标记数组void BFS_Traverse(Graph G){ for(int i=0; i<G.vex_num; ++i;) { visited[i] = f

2021-08-04 17:17:25 127

原创 难难难!如何求图的某一顶点到其他顶点最短距离?迪杰斯特拉Dijkstra和弗洛伊德Floyd要上场了

对于无权图来说,可以使用广度优先遍历算法BFS,实现求单源路径最短。但是,如果图带了权值,求这种最短路径可以通过经典的Dijkstra(迪杰斯特拉)算法或者是Floyd(弗洛伊德)算法来求解。当然,这两种算法也是不容易理解的。这里以简单直白的描述方式来介绍以上两种经典算法。一、Dijkstra算法求单源最短路径问题算法的核心是:循环遍历所有结点,找到还没有确定的最短路径,且dist最小的顶点Vi,令Final[i] = true,以此来判断是否已找到最短路径。dist[]:记录从源点V0

2021-08-04 16:55:55 1684

原创 常见树的存储结构,及如何求以孩子兄弟法存储的森林的叶子结点数

树的存储方式有很多种,既可以采用顺序存储结构,也可以采用链式存储结构,只要能唯一地反映树中的各结点之间的逻辑关系就可以首先介绍第一种,双亲表示法双亲表示法:用一片连续空间(数组)来存储每个结点,同时在每个结点中增设一个伪指针(指明其双亲结点在数组中的位置)。因为根结点没有双亲,所以他的伪指针域规定为-1。#define MAX_TREE_SIZE 100 //树中结点数typedef struct{ ElemType data; int parent; //双亲在数组

2021-07-31 16:32:05 2161 1

原创 如何将表达式二叉树输出为中缀表达式(带括号)

中缀表达式是最符合我们人类阅读的一种方式,因为它和我们日常的数学表达式很接近算法思想:基于二叉树的中序遍历,但是我们要给关键位置加上左括号和右括号。除了根结点和叶子结点,遍历到其他结点的时候,在遍历左子树之前加左括号,遍历完右子树后加上右括号。void Ready2Btree2Exp(BTree *root){ Btree2Expression(root, 1); //根结点的高度为1}void Btree2Expression(BTree *root, int deep){

2021-07-30 16:45:56 4483 2

原创 如何寻找二叉树任意处p、q的公共祖先

算法思想:使用非递归的后序遍历,假设p在q的左边用栈保存二叉树的指针,栈 S 中全部元素都是当前指针 p 的祖先们。判断方法:先将栈复制到一个辅助栈 tempS 中,继续遍历到结点 q 的时候,将栈中元素从栈顶开始逐个和辅助栈 tempS 去匹配,第一个相等的元素就是结点p q的公共祖先。算法实现如下:typedef struct{ BiTree T; int tag; //0表示左孩子被访问过了,1表示左孩子早已被访问,右孩子刚被访问}stack s, tempS; //假

2021-07-30 16:26:47 1002 4

原创 如何使用非递归的方式后序遍历二叉树

首先,后序遍历是按照左右根(LRN)的顺序遍历的。如果要求以递归的方式遍历二叉树,还是蛮简单的。只需要在树非空的情况下,依次递归调用传参(左子树),(右子树),再访问结点(或者是进行一些具体的操作,比如删除、修改等)但是,非递归的后序遍历就要考虑很多了。后序遍历的非递归实现是四种遍历方法中最难的。因为在后序遍历中,要保证做孩子和右孩子都被访问了,才能访问根节点(即LRN)。基本算法思路分析:从根节点开始,将结点入栈,然后沿着左子树一直往下搜索,直到搜索到没有左孩子的结点;接着判断还有没有右孩

2021-07-30 16:01:14 1354

原创 经典操作之快速排序算法

void QuickSort(ElemType A[], int low, int high({ if(low < high) //递归跳出的条件 { Partition(); int pivotpos = Partition(A, low, high); //划分 //依次对两个子表进行递归排序 QuickSort(A, low, pivotpos-1); QuickSort(A, pivotpos+1, high); }}int Partition(EleTyp.

2021-07-27 18:04:25 143

原创 原地将带头节点的单链表逆置,要求空间复杂度O(1)

思想:用一个移动的结点指针p来逐个遍历结点,每个结点都用头插法,塞到头结点的下一个位置补充:什么是头插法?List HeadInsert(List &head) //引用是为了能修改整个表{ LNode *p = head, &q; while(p->next != NULL) { q = p; //为了保存倒数第二个结点 p = p->next; } //此时p指向最后一个结点 LNode *s = head->next;

2021-07-27 17:55:02 542

原创 你可能不知道的数据结构概念之边角料

对于计算机来说,数据结构和算法有着本质的联系。有人概括了这样一个公式:程序=算法+数据结构 封装:把数据盒操纵数据的运算组合在一起的机制,使用者只能通过一组允许的运算访问其中的数据。 信息隐蔽:封装对使用者隐藏了数据结构以及程序的实现细节这样子的策略 模块:将数据和操作数据的运算 组成起来,每个模块有一个明确定义的接口...

2021-07-27 17:36:11 109

原创 Cache高速缓冲器基本工作原理

首先先熟悉一个概念,在访问速度上,Cache>>内存>>硬盘,之后我们把内存统称为主存,硬盘、磁盘等统称为外存。我们的程序默认储存在外存里,当我们点击它的时候,会从外存调用到主存里,但是我们的处理机(CPU)速度真的很快,比主存的读写速度快多了,那么,有没有和处理机速度相当的存储设备呢?答案是有的,也就是我们的Cache,一般嵌入在处理机芯片里,分为多级Cache。我们的东西假设已经转移到了主存,操作系统会让每次被访问的主存块调入Cache,而且是一定会!为了方便主存和Cac

2021-07-15 21:37:32 421

原创 操作系统的处理机调度知识点大全(贰))

高响应比优先调度算法什么是响应比?响应比Rp等于(等待时间+要求服务的时间)/要求服务时间可以理解成服务我这个进程的性价比高不高我先服务你这个进程,合不合算,能不能快点让你结束如果两个进城同时进入就绪队列,但是A 进程只需要一个T个时间,B进程却要2T个时间那么处理机就会优先服务A进程要求服务的时间相同时也就是两个进城都只需要T就可以结束那么按照谁先来谁先被服务的原则这个算法的优点在于长作业,等很久后,它的响应比会变高不会造成饥饿状态因此算是先来先服务和短作业优先的结合版##时间片

2021-07-14 21:49:21 161 1

原创 操作系统的处理机调度 知识点大全(壹)

一、首先,什么是调度?我们的计算机中,进程数量往往多于处理机的个数,不能把某个处理机专门给一个进程独享 处理机调度是对处理机进行分配,也就是从就绪队列中按照一定的算法,公平、高效地给每个进程合理分配,让计算机处理速度最大化。二、调度的层次作业调度(高级调度):是面向作业的,发生频率最低,让进程从无->创建态->就绪态 内存调度(中级调度):是面向进程的,让进程从挂起态->就绪态 进程调度(低级调度):发生频率最高,让进程从就绪态->运行态 注:作业是一个

2021-07-13 23:48:58 819 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除