自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 资源 (2)
  • 问答 (10)
  • 收藏
  • 关注

原创 有权图——最小生成树、最短路径

有权图文章目录有权图有权图的表示最小生成树Minimum Span Tree生成树切分定理Cut PropertyLazy PrimPrimKruskal最短路径松弛操作RelaxationDijkstra算法Bellman-Ford算法最短路径算法总结有权图的表示邻接矩阵表示有权图:邻接表表示有权图:边的表示:// 边template<typename Weight>class Edge{private: int a,b; //

2021-04-06 19:35:01 828

原创 图论基础——邻接表、邻接矩阵和图的遍历

图论基础文章目录图论基础概述图的表示邻接矩阵邻接矩阵表示无向图邻接矩阵表示有向图邻接矩阵代码邻接表邻接表表示无向图邻接表表示有向图邻接表代码两种表示的适用情况两种表示的优缺点邻边遍历图的遍历深度优先遍历广度优先遍历概述基础构成:图由节点和边构成分类:根据边的有向性分为无向图和有向图根据边的权重可分为无权图和有权图自环边:从自身节点出发指向自身的边平行边:两个节点之间存在多条边简单图:图中没有自环边和平行边图的表示邻接矩阵邻接矩阵表示无向图

2021-04-06 19:25:39 3146

原创 并查集

并查集文章目录并查集概述基本数据表示Quick FindQuick Union优化基于size的优化基于rank的优化路径压缩概述并查集用来解决连接问题对于一组数据,主要支持两个操作:union(p,q):将p和q连接起来find(p):查p具体是在哪个组中以上两个操作用来回到isConnected(p,q):判断p、q是否相连基本数据表示Quick Find用一个数组表示每个数据的连接关系,其中数组中的每个元素是该数据所属的组。如上图所示,编号为0的元素相连,编号为

2021-03-06 18:51:09 218

原创 二分搜索树

二分搜索树BST文章目录二分搜索树BST查找问题优势特点插入一个节点insert查找一个节点search深度优先遍历Morris遍历广度优先遍历(层序遍历)删除一个节点delete二分搜索树的最小值、最大值删除二分搜索树的最小值、最大值删除任意一个节点floor、ceil、rank、select局限性树相关的问题查找问题查找问题是计算机中非常重要的基础问题二分查找法:只有有序数列才能使用二分查找法时间复杂度O(logN)// 非递归版本实现int binarySearch

2021-03-05 23:28:56 194

原创 堆、索引堆与堆排序

堆文章目录堆优先队列基本实现Shift Up(向堆中插入一个元素)Shift Down(从堆中取出一个元素)Heapify堆排序索引堆堆相关的其他问题优先队列普通队列:先进先出;后进后出优先队列:出队顺序和入队顺序无关,与优先级有关适用于动态数据维护的情况N个元素中选前M个,使用普通排序算法的时间复杂度为O(NlogN),而使用堆排序的时间复杂度为O(NlogM)基本实现经典实现:二叉堆(Binary Heap)二叉堆的特点:任何一个节点都小于等

2021-03-03 14:30:41 410

原创 排序算法总结——插入、归并、快排

排序文章目录排序选择排序插入排序归并排序快速排序排序算法衍生出的问题排序算法总结选择排序void selectionSort(int arr[], int n){ int times=0; while(times<n){// 循环n次,每次找第n小的元素 int minIdx=times;// 最小元素的索引 for(int i=times;i<n;i++){ if(arr[i]<arr[minIdx]){ min

2021-02-06 16:50:09 120

原创 正则表达式入门

文章目录基本模式匹配字符簇限定符定位符非打印字符特殊字符选择、分组、引用基本模式匹配表达式含义举例world与任何包含该模式的字符串匹配hello world!^once位于开头处的onceonce upon a timeday$位于结尾处的bucketkeep happy everyday^bucket$只匹配字符串bucketbucket字符簇表达式含义举例[ABC]匹配[…]中的所有字符APPLE BANAN

2021-02-05 19:37:04 161

原创 算法经典面试题(8)——贪心算法

*题目编号为Leetcode中对应的题号。某位大佬的Leetcode题解参考链接贪心算法贪心算法的难点在于判断一个问题是否能用贪心算法解决。贪心算法离不开排序。(455 分发饼干) 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,都有一个尺寸 sj 。如果 sj >= gi ,我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标

2021-02-05 11:25:13 373

原创 算法经典面试题(7)——动态规划

*题目编号为Leetcode中对应的题号。某位大佬的Leetcode题解参考链接动态规划斐波那契数列F(0)=1, F(1)=1, F(n)=F(n-1)+F(n-2)// 基础版递归实现int calcFib(int n){ assert(n>=0); if(n==0) return 1; if(n==1) return 1; return calcFib(n-1)+calcFib(n-2);}

2021-02-04 14:49:43 493

原创 算法经典面试题(6)——回溯法

*题目编号为Leetcode中对应的题号。某位大佬的Leetcode题解参考链接回溯法(17 电话号码的字母组合) 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:"23" 输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].说明:尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。 class So

2021-02-04 14:25:44 288

原创 算法经典面试题(5)——二叉树

*题目编号为Leetcode中对应的题号。某位大佬的Leetcode题解参考链接二叉树完全二叉树:除了最后一层,所有层的节点数达到最大,最后一层的所有节点在最左侧。(堆就是二叉树)满二叉树:所有层的节点数达到最大。平衡二叉树:没一个节点的左右子树的高度差不超过1.二分搜索树:每个节点的键值大于左孩子、小于右孩子,以左右孩子为根的子树仍然为二分搜索树。二分搜索树中的一个节点大于其右子树中的所有节点,小于其左子树中的所有节点。具有天然递归条件 // 前序遍历

2021-02-04 14:00:00 165

原创 算法经典面试题(4)——栈和队列

某位大佬的Leetcode题解参考链接栈(20有效的括号) 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 :输入: "()[]{}"输出: true示例 :输入: "([)]"输出: false bool isValid(string s) { stack<char> reco

2021-02-04 11:26:21 229 1

原创 算法经典面试题(3)——链表

Leetcode题解参考链接链表给一个节点需要注意:如果是头节点、尾节点或者空节点等特殊情况该如何处理(206反转链表) 反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL/** * Definition for singly-linked list. * struct ListNode { * int val;

2021-02-04 11:12:24 258

原创 算法经典面试题(2)——查找表

*题目编号为Leetcode中对应的题号。查找问题概述查找有无元素‘a’是否存在:set——几集合查找对应关系(键值对应)元素‘a’出现了几次:map——字典常见操作insertfinderasechange(map)(349两个数组的交集) 给定两个数组,编写一个函数来计算它们的交集。示例 :输入: nums1 = [1,2,2,1], nums2 = [2,2]输出: [2]// set版 // 时间复杂度O(nlogn) //

2021-02-02 17:25:38 150

原创 算法经典面试题(1)——数组

*题目编号为Leetcode中对应的题号。数组二分查找 template<typename T> int binarySearch(int arr[], int n, T target){ int l = 0, r = n - 1;// 在[l...r]范围内查找target while(l <= r){// 当l==r时,[l...r]依然是有效的 int mid = l + (r - l) / 2;

2021-02-02 16:54:39 166

原创 C++多线程(4)——条件变量、异步任务、原子atomic

目录条件变量std::condition_variable注意std::async, std::futurestd::launch::async和std::launch::deferred参数与std::thread的区别std::packaged_task, std::promisestd::packaged_taskstd::promise原子操作std::atomic条件变量std::condition_variable在前面使用互斥量实现从消息队列中读写数据的代码中,从消息队列读取元素(消费者

2021-01-31 15:44:52 734

原创 C++多线程(3)——互斥量、unique_lock()、单例类设计

目录互斥量mutex死锁std::lock()函数模板std::adopt_lock参数std::unique_lock()与lock_gard()的区别std::try_to_lock参数std::defer_lock参数成员函数lock()、unlock()、try_lock()、release()粒度所有权传递单例设计模式共享数据单例类多线程中创建单例类std::call_once互斥量mutexclass A{public: // 向消息队列中插入元素 void inMsgRecvQue

2021-01-31 15:35:08 460

原创 C++多线程(2)——创建线程、线程传参

目录创建线程线程传参传递临时对象作为线程参数总结传递类对象、智能指针创建线程#include<iostream>#include<thread>using namespace std;void myPrint(){ cout<<"myPrint()线程开始执行"<<endl; cout<<"myPrint()线程执行完毕"<<endl; return;}class TA{public:

2021-01-31 10:54:57 650

原创 C++多线程(1)——线程、进程

目录进程与线程区别进程间通信方式线程间通信方式进程与线程并发:一个程序同时执行多个独立的任务。多个任务之间的切换(上下文切换)是要有时间开销的,比如操作系统要保存切换时的状态、执行进度等信息,切换回来后要复原这些信息。使用并发的原因主要是能够同时处理不同的任务,提高性能。可执行程序:磁盘上的一个文件,windows上以.exe为后缀名的文件。Linux上rwxrwxrwx中x代表执行权限。进程:就是一个可执行程序运行起来了,就创建了一个进程。进程是对运行时程序的封装,是系统进行资

2021-01-31 10:50:21 380

原创 C++面试基础知识整理(8)

目录标准模板库STL基本组成动态数组实现原理vector和listvector迭代器失效dequesetmapmap和set的区别map和unordered_map的区别allocator分配器作用使用标准模板库STL基本组成容器、迭代器、仿函数、算法、分配器、配接器他们之间的关系:分配器给容器分配存储空间,算法通过迭代器获取容器中的内容,仿函数可以协助算法完成各种操作,配接器用来套接适配仿函数组件描述容器(Containers)容器是用来管理某一类对象的集合。C++ 提

2021-01-30 15:01:39 203

原创 C++面试基础知识整理(7)

目录运算符重载问题函数模板与类模板使用问题可调用对象左值与右值运算符重载包括友元函数重载和成员函数重载一元运算符重载-(负号)++(自增)二元运算符重载+(加号):第一个参数是*this<<(输出):只能通过友元函数重载,因为第一个参数只能是ostream&,不能是*this[](索引):只能通过成员函数重载,因为第一个参数只能是*this指针。class Coordinate{ // 输出重载 friend ostream& op

2021-01-30 13:31:02 77

原创 C++面试基础知识整理(6)

目录隐藏与覆盖重载与重写抽象类、接口类使用运行时类型识别RTTI作用使用异常处理使用友元函数与友元类友元函数使用友元类使用隐藏与覆盖隐藏:父子关系、成员同名 class Person { public: void play(); void work(); } class Soldier:public Person { public: void play(); // 隐藏 void wor

2021-01-30 12:17:36 104

原创 C++面试基础知识整理(5)

目录虚继承与虚基类作用使用虚函数特征使用纯虚函数作用使用问题虚函数指针、虚函数表虚析构函数作用原理虚继承与虚基类作用虚继承用于解决多继承条件下的菱形继承问题(浪费存储空间、存在二义性)。假如类 A 有一个成员变量 a,那么在类 D 中直接访问 a 就会产生歧义,编译器不知道它究竟来自 A -->B–>D 这条路径,还是来自 A–>C–>D 这条路径。//间接基类A class A{ protected: int m_a; }

2021-01-30 12:08:10 102

原创 C++面试基础知识整理(4)

目录面向对象封装问题继承多态构造函数问题对象成员与对象成员指针使用this指针使用深拷贝与浅拷贝面向对象封装public 成员:可以被任意实体访问protected 成员:只允许被子类及本类的成员函数访问private 成员:只允许被本类的成员函数访问问题如何定义一个只能在堆上(栈上)生成对象的类?只能在堆上:方法:将析构函数设置为私有原因:C++ 是静态绑定语言,编译器管理栈上对象的生命周期,编译器在为类对象分配栈空间时,会先检查类的析构函数的访问性。若析构函数不可访问,

2021-01-30 11:50:20 133

原创 C++面试基础知识整理(3)

目录inline内联函数使用问题explicit作用使用sizeof问题memcpy与memmove字符串相关strlenstrcpylambda表达式函数指针智能指针作用inline内联函数使用// 类内定义,隐式内联class A { int doA() { return 0; } // 隐式内联}// 类外定义,需要显式内联class A { int doA();}inline int A::doA() { return 0; } // 需要显式

2021-01-30 11:34:37 169

原创 C++面试基础知识整理(2)

目录引用和指针的区别new/delete问题const作用使用问题static作用使用问题强制类型转换符const_cast使用static_castdynamic_cast引用和指针的区别指针是一个实体,需要分配内存空间;引用只是变量的别名,不需要分配内存空间。引用在定义的时候必须进行初始化,并且不能够改变。指针在定义的时候不一定要初始化,并且指向的空间可变。指针和引用的自增运算结果不一样。(指针是指向下一个空间,引用时引用的变量值加1)sizeof 引用得到的是所指向的变量(对象)的大小,而

2021-01-30 11:28:54 117

原创 C++面试基础知识整理(1)

目录参考链接基础知识源文件从文本到可执行文件经历的过程C++11的新特性gcc不同优化等级的区别C++的内存管理问题文件重定义条件编译作用使用参考链接GitHub:C++面试基础知识总结基础知识源文件从文本到可执行文件经历的过程预处理,根据文件中的预处理指令来修改源文件的内容。如#include指令,作用是把头文件的内容添加到.cpp文件中,产生.ii文件,编译,将其翻译成等价的中间代码或汇编代码,产生汇编文件(.s文件)汇编,把汇编语言翻译成目标机器指令,产生目标文件(.o或

2021-01-30 10:59:05 372

原创 自编Shell脚本实现Typora+Gitee图床配置

文章目录一、搭建Gitee图床新建Gitee仓库安装Git生成/添加SSH公钥新建本地仓库测试图片推送二、编写图片上传Shell脚本三、Typora设置图片上传一、搭建Gitee图床新建Gitee仓库注册Gitee账号Gitee新建仓库注意“是否开源”选择公开:安装Git去git官网上下载相应版本的git安装时一般一直点Next就好安装完成后,注意配置环境变量:打开cmd,输入git --version,若出现如下提示则表明git安装成功:输入bash或s

2021-01-28 14:16:06 485

原创 Linux下C++调用Python的简单实现

参考链接:https://blog.csdn.net/u012983289/article/details/55194714Python脚本如下:def printHelloWold(): print('hello world')def add(a, b): c = a+b return cC++代码如下:#include <iostream&...

2019-11-22 19:28:03 2195

原创 upper_bound和lower_bound的区别

这两个算法默认用于升序序列,若要用于降序序列必须指定比较函数!!!!对于升序序列:lower_bound返回第一个大于等于val的元素的迭代器upper_bound返回第一个大于val的元素的迭代器对于降序序列:必须指定比较函数:static bool weightComp(int a, int b){ return a > b;}lower_bo...

2019-06-29 22:05:00 510

原创 IMU预积分公式汇总

本文中全部公式来自论文:On-Manifold Preintegration for Real-Time Visual-Inertial Odometry为了查看公式时更加方便,现把文中的有关IMU预积分的公式汇总如下:IMU观测模型Bω~WB(t)_{\mathrm{B}} \tilde{\omega}_{\mathrm{WB}}(t)B​ω~WB​(t)是陀螺仪观测值,Ba~(t)_{...

2019-05-09 17:17:14 2959

原创 Linux下使用VScode编译调试C/C++

总体上来说还是可以的,除了一些很奇怪的小bug外,整体上调试起来还是不错的,主要是颜值高啊,界面分割的合理啊,简洁明了啊,不像有些IDE看着就累,更别说调试了。估计大部分人在linux上组织工程项目是用cmake吧,那就装下面这个插件,这样就能让cmakelists有语法高亮功能,要不然看上去全是清一色,不好看。写好CMakeLists.txt后,就可以编译了注意要想能够调试代码要将...

2019-02-21 17:29:44 2590

3D computer vision_Efficient methods and application (Second edition) 英文版

3D computer vision_efficient methods and application (Second edition) 英文版

2018-12-20

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

TA关注的人

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