C/C++
文章平均质量分 65
极客范儿
技术决定下限,审美决定上限
展开
-
旅行商问题(回溯算法)
回溯问题适合于解由向量的形式来构成的,这个向量空间中使用搜索的方法进行搜索,搜索使用宽度优先的方法。货郎问题又名旅行商问题,但其实更多教科书中更通用的叫法叫旅行商问题,下面来对旅行商问题使用回溯算法证明。文章目录一、问题描述二、数学建模三、实例1、传统经典做法2、回溯算法四、总结一、问题描述有n个城市,已知任两个城市之间的距离,求一条每个城市恰好经过一次的回路,使得总长度最小 。分析:有n个城市,城市与城市之前有距离的,任意两个城市之间的距离是已知的,现在需要找一条回路,经过每一个城市1次,使得总原创 2022-05-18 15:21:19 · 16991 阅读 · 0 评论 -
0-1背包问题(回溯法)
0-1背包问题是动态规划、贪心策略的一个子问题。回溯算法同样可以适用于0-1背包问题。下面使用回溯算法解0-1背包问题。文章目录一、问题描述二、算法设计三、实例1、输入:2、2个可行解:3、最优解:<0,1,1,1>四、搜索空间1、子集树的运行2、实例:V={12,11,9,8}, W={8,6,4,3}, B=133、搜索空间:子集树,2^n片树叶4、可行解50、最优解五、代码实现一、问题描述有n种物品,每种物品只有1个。 第i种物品价值为vi , 重量为wi, i=1,2,…, n。问原创 2022-05-15 16:19:51 · 20012 阅读 · 9 评论 -
ORB-SLAM3的Local&MapMerging线程详解
ORB-SLAM3的Local&MapMerging线程的代码主要集中于LocalClosing.cc的run()函数中,主要执行五个函数分别是:CheckNewKeyFrames() 函数、NewDetectCommonRegions()函数、MergeLocal()函数、MergeLocal2()函数、CorrectLoop() 函数。如果新进入的关键帧,在闭环检测的过程中,如果是当前地图下的,不用进入MergeLocal()函数和MergeLocal2()函数,直接做闭环校正;在非当前地图下,先做地图原创 2023-12-27 10:54:15 · 951 阅读 · 0 评论 -
ORB-SLAM3的Local Mapping线程详解
Local Mapping线程是ORB-SLAM3的三大线程之一。关键帧是通过根据经验去添加一些约束给帧,然后输出关键帧,如果能被观测到更多特征点的话,那么我们就能把其作为关键帧。第一部分是插入关键帧;第二部分是去除地图点,不是所有的地图点都是好的,对地图点进行一个筛选;第三部分,为了结果更优,生成一些新点;第四部分,局部BA做优化;第五部分,IMU初始化,IMU好的初值,测量数据对结果来说会有很大的促进左右;第六部分,去除关键帧,前面冗余的关键帧进行筛选;第七部分,对IMU尺度进行优化,优原创 2023-12-26 10:57:32 · 721 阅读 · 0 评论 -
Vulkan入门指南
图形学这个学说国内研究的还是少,现存的资料英文居多,现在的图形学API都是基于光栅化,写完软渲染之后就知道光栅化的底如何实现的,学会软渲染和软光线追踪这两门,图形学就算入门了。OpenGL是黑盒子,它能提供好用的API,没有办法进行一个深入的优化,所有东西都包装在一起没有办法看到底层变化的实现逻辑。Vulkan的底层全部铺出来,每一步都需要自己去实现,很麻烦,但与之同时可以做更多的优化。如果你的性能瓶颈在CPU和GPU的一个数据交互上,这个时候可以使用Vulkan,Vulkan会为CPU减轻非常多的负担。原创 2023-12-21 21:19:40 · 948 阅读 · 0 评论 -
C++实现通讯录管理系统
通讯录是一个可以记录亲人、好友信息的工具,本博客借助黑马程序员的项目进行修改,利用C++实现一个通讯录管理系统,旨在复习C++的语法。原创 2023-03-21 11:02:04 · 861 阅读 · 3 评论 -
视觉SLAM学习路线
导师让我了解SLAM,SLAM原本是比较小众的方向,最近自动驾驶火起来,做这个SLAM的人也多了,反过来也会推动机器人感知的发展。希望未来学成的时候,能赶上机器人大规模普及,就业一片蓝海。关于视觉SLAM我感觉学习成本高、科研选题难和行业壁垒高,但是充满挑战不是很有意思嘛。学SLAM方向跟motion planning科研都不好做,而且都很吃数学基础。学习难度的话,planning可能教程更多一点,SLAM相较于planning要小众一些,教程也相对较少,所以在学习《视觉SLAM十四讲》整理一些自己的理解原创 2023-01-01 15:19:29 · 3738 阅读 · 0 评论 -
管道修建问题的算法思考
问题:某区域有n口油井,需要修建输油管道. 根据设计要求,水平方向有一条主管道,每口油井修一条垂直方向的支管道通向主管道. 如何选择主管道的位置,以使得支管道长度的总和最小?一、最优解:Y 坐标的中位数主管道最优的位置其实就是这些油井的纵坐标排起来后的中位数的位置,然后我们做了说明,如果不是这个位置,不管是这个位置是往下还是往上移动,移动之后都会导致总的直管线向主管道的距离增加。二、简单的算法实现1、算法一:调用 k 次选最小算法时间复杂度为 O (k n)2、算法二:先排序,然后输出原创 2022-04-06 16:47:23 · 574 阅读 · 0 评论 -
VC实现BMP图像文件的读取、显示与存储
一、创建工程1、创建AppWizard文件2、选择基本对话框3、新建一个按钮4、设置Button属性ID设置为ID_OPEN,标题是“打开图像”5、依次设置其他4个按钮函数名称,0nc2g()明:将P格式的彩色图像转化为256级灰度图像。uold CColor2Gr ayD1g: :0nC2g()11 T0D0: dd your control notification handler code here1/如果图像数据的指针为空则返回if (1p8itnap–0) ret原创 2022-04-04 22:26:46 · 1317 阅读 · 0 评论 -
二分查找算法分析
二分查找法实质上是不断地将有序数据集进行对半分割,并检查每个分区的中间元素。二分查找的时间复杂度取决于查找过程中分区数可能的最大值。对于一个有n个元素的数据集来说,最多可以进行lg n次分区。对于二分查找,这表示最终可能在最坏的情况下执行的检查的次数:例如,在没有找到目标时。所以二分查找的时间复杂度为O(lg n)。二分查找算法实例 (假定c是A的最后一元)function b-search(c) { L:=1; U:=n; //2a原创 2022-03-22 22:45:37 · 608 阅读 · 0 评论 -
OpenCV中VideoCapture类的使用详解
OpenCV中从视频文件或摄像机中捕获视频的类是VideoCapture。该类提供 C++ API 用于从摄像机捕获视频或读取视频文件。关于视频的读操作是通过VideoCapture类来完成的;视频的写操作是通过VideoWriter类来实现的。VideoCapture既支持从视频文件读取,也支持直接从摄像机(比如计算机自带摄像头)中读取。要想获取视频需要先创建一个VideoCapture对象,VideoCapture对象的创建方式有以下三种:一、创建一个捕获对象,通过成员函数open()来设定打开的原创 2022-03-12 22:38:43 · 12063 阅读 · 0 评论 -
手把手教你用VS2017配置OpenCV
最近学习增强现实技术时需要opencv,早在本科毕设使用过OpenCV 2.4.11做过城市交通指示识别,现在导师要求用OpenCV 3,所以从一个新入坑的角度来讲解一下完整的配置一个OpenCV的过程。原创 2022-03-11 17:21:29 · 6417 阅读 · 0 评论 -
C#的装箱和拆箱
一、装箱和拆箱概念装箱:将值类型转换为引用类型称为装箱拆箱:将引用类型转换为值类型称为拆箱1、在C#中,值类型的数据被保存在栈(stack)上,而引用类型的数据被保存在堆(heap)上,在栈上只是保存了这些数据在堆内存中的首地址using Ststem.Collections;using System.Collections.Generic;using UnityEngine;class Animal{ public int age; public Animal(int age)原创 2022-02-12 16:13:52 · 7434 阅读 · 0 评论 -
2021年度学习总结
2021年是迎来蜕变的一年,充实而不平凡。在这一年我的身份发生了许多变化,我做过前端开发工程师,当过运维,干过自媒体,但我感觉作为一个热爱技术的人,只有了解底层的知识才能让走的更远,毕业后摸爬滚打让我感觉,眼界打开了,可是能力没有跟上。所以毅然离开稳定的央企,抱着对本专业的热爱,我要读研究生。一、关键技术回顾年初回顾了Java的语法,重新捡起学到的第一门面向对象的语言,使用MyBatis三剑客实现一个简单的电商信息管理系统。Java中抽象类和接口在使用上如此相似,在高级开发中两者的使用和区别作了小结。原创 2021-12-31 22:34:13 · 4102 阅读 · 0 评论 -
共享存储与消息传递机制编程计算π值实践
MPI ( Message Passing Interface) 是消息传递函数库的标准规范,是一种消息传递模型,主要应用于分布式数据存储环境下的进程之间的通信,它不是一种语言,在 Fortran 和C 中都可以对它的接口函数进行调用。MPI 的优势体现在高可移植性,使用 MPI 作消息传递的 C 或 Fortran 并行程序可不加改变地运行在IBM PC、MS Windows、Unix 工作站、以及各种并行机上。所以在消息传递机制MPI 环境下通过数值计算方法计算π的值来观察运行时间一、代码实现#原创 2021-12-19 22:07:39 · 589 阅读 · 0 评论 -
在共享存储OpenMP 环境下使用 SPMD并行计算π
为了进一步掌握 OpenMP 编程、了解共享存储与消息传递机制编程的区别,掌握 OpenMP、MPI 的基本功能、构成方式、句法、Visual Studio 集成开发环境的使用,并配置环境变量;OpenMP、MPI 并行程序设计方法,了解并行程序的过程及优越性,本文采用 MPI 消息传递机制编程的基本使用和调试方法、性能优化及多核技术的基本概念一、 目标在共享存储OpenMP 环境下使用 SPMD(单程序多数据) 并行计算π 的值二、运行结果(1)代码实现:#include <stdio.h原创 2021-12-18 10:43:28 · 811 阅读 · 1 评论 -
多线程编程计算 π 的值
一、实验内容使用 For 循环制导语句计算π 的值二、运行结果1、代码实现:#include <stdio.h>#include <omp.h>#include <cmath>#include <iostream>#include <stdlib.h>#include <time.h>#include "PrecisionNum.cpp"#include "stdint.h"void calculatePi3原创 2021-12-17 20:00:03 · 1508 阅读 · 0 评论 -
VS 2019 VC++项目出现 LNK1104 无法打开文件“libcmtd.lib“ 的解决方法
VS 2019编译VC++动态库项目,出现了一个链接器问题:LNK1104 无法打开文件"libcmtd.lib"操作系统版本:Windows 10 18363.592VS版本:VS 2019 16.11.51、在项目上点击右键,选择【属性】→【链接器】→【常规】,找到【附加库目录】,然后在VS的安装目录中找到libcmtd.lib所在目录,有两个目录,一个是x86,一个是x64,选择合适操作系统位数的目录【D:\Software\Microsoft Visual Studio\2019\原创 2021-12-11 16:28:43 · 8244 阅读 · 0 评论 -
C语言面试题目指针详解
C语言的指针是个神奇的存在,让你充分感受到算法之美。c语言是靠数据结构、算法的分析和设计过程中的一门基础课,所以从问题出发能更加深入了解指针。原创 2021-05-09 16:48:25 · 456 阅读 · 0 评论 -
二进制感悟
给我印象最深的一道编程题就是关于二进制的问题,题目是这样的:获取一个整数二进制序列中所有的的奇数位和偶数位,分别打印出二进制序列。这样一道二进制序列的题目需要对二进制补码十分熟悉,是在《计算机科学概论》里面最难的一道题目了。假设一个整数的二进制序列有三十位,然后让每一位奇数位按位与1,第一个奇数位向右移动0位,第二个奇数位向右移动2位,第三个奇数位向右移动4位,以此类推,只要移动的合适,就可以把所有的奇数位移动到最低位,移动到最低位求出是几打印出来,偶数位同理。原创 2014-10-05 11:33:45 · 1412 阅读 · 0 评论 -
内部排序算法的比较
最近对内部排序进行复习,深入掌握各种排序算法的思想、排序过程和特征,对一些常用排序算法的关键代码进行比较,最终为了在工作中看到特定序列有选择最优排序算法的能力。一、直接插入排序这种排序的思想是,在待排序的数组中,设置一段排序区间让他始终保持有序并不断增大,直到覆盖整个数组,就完成了对数组的排序。这就是最简单的直接插入排序,它的时间复杂度 是 O(N)~O(N^2)当待排序集合本身接近有序时,它的时间复杂度最小,当待排序集合本身时逆序集合时,它的时间复杂度最大具体代码如下:void Direct原创 2020-10-08 14:55:04 · 996 阅读 · 0 评论 -
再战C语言
现在开始学习数据结构,真的抽象的很,老师使用的给我们用C和类C讲解的,数据结构的学习反过来可以加强理解C,所以有必要在重温一下C语言。 以前一直奇怪各类编程软件盛行,为什么还有一部分代码要求我们在纸上书写,其实直到现在我才明白老师的用心。大牛告诉我就连面试都是纸上谈代码,还有什么理由不好好书写呢? 虽然库已经完全封装了很多底层实现,方便使用,促进了开发效率,但这并不能代表我们不需要去了解算法本身的作用。所以这原创 2016-09-28 07:33:15 · 736 阅读 · 0 评论 -
关于DB存储过程剖析与设计的一些感受
关系型数据库管理系统最重要的一个目标就是,确保表或者索引中的数据是随时可以用的。那么为了尽可能的实现这个目标,会使用内存中的缓冲池来最小化磁盘活动。通过具体的项目了解关于DB存储过程剖析与设计,以项目驱动,提升理解数据的读取和存储方式。 一、音乐播放器设计 (1) 外观:图片和图标 (2) 最小化-&gt;实现窗体的最小化 (3) 关闭-&gt;托盘-&gt;菜单-&gt;播放音乐或者是直...原创 2018-08-09 07:18:48 · 496 阅读 · 0 评论