
数据结构和算法实战宝典
文章平均质量分 77
从事技术研发10多年,有丰富的线上项目实战和实施经验,本小博乃点滴工作及项目实战总结积累,精华知识记录, 从入门到进阶,绝对物超所值,内容通俗易懂,代码,正版工具软件,开发文档精中选精,一应俱全,微信、QQ提供在线指点和帮助。
大王算法
主要做机器人,操作系统,算法及AI方面的研发工作,有感兴趣的朋友可以私信加我好友,一起探讨交流!
展开
-
十个海量数据处理方法总结
处理海量数据是当今很多行业面临的挑战,尤其是在大数据时代。有效管理和处理海量数据对于获取洞察力、提升效率和做出更好的决策至关重要。下面是十种常用的海量数据处理方法,对海量数据的处理方法进行了一个一般性的总结,当然这些方法可能并不能完全覆盖所有的问题,但是这样的一些方法也基本可以处理绝大多数遇到的问题。尤其是高级开发的笔试面试都会涉及,下面做一个总结,希望对大家有所启发和帮助。原创 2024-03-31 16:53:46 · 505 阅读 · 0 评论 -
最优比率生成树算法
最优比率生成树是图论中的一个高级问题,解决该问题需要对图论和算法设计有深入的理解,通过结合二分搜索和最小生成树算法,我们能够找到一个满足最优比率条件的生成树。理解并实现最优比率生成树算法是一个不小的挑战,但它也为我们提供了一个强大的工具,以优化和解决现实世界中的复杂问题。随着技术的发展,在未来看到更多的创新方法来提高这一算法的效能和应用范围。原创 2024-01-20 17:52:34 · 1220 阅读 · 0 评论 -
动态规划算法--机器人到达指定位置的方法数量
例如 f(rest=4,cur=2) 时,需要调用 f(rest=3,cur=1)和f(rest=3,cur=3)这两种子情况,分析f(rest=3,cur=1)时又要调用f(rest=2,cur=2);分析f(rest=3,cur=3)时要调用f(rest=2,cur=2)和f(rest=2,cur=4)……开始时机器人在其中的 M 位置上(M 一定在 1~N 中),机器人可以往左走或者往右走,如果机器人来到 1 位置, 那么下一步只能往右来到 2 位置。从2到3,从3到2,从2到3。原创 2023-12-31 18:50:23 · 939 阅读 · 0 评论 -
算法复杂度分析
改变一个对数的底只是把对数的值改变了一个常数倍,所以当不在意这些常数因子时,我们将经常采用 "lg n"记号,就像使用 O 记号一样。我们说,log2n 的增长速度要慢于 n,因为当 n = 8 时,log2n = 3。而实际中,我们一般仅考量算法在最坏情况下的运行情况,也就是对于规模为 n 的任何输入,算法的最长运行时间。比如:T(n) = 73n3 + 29n3 + 8888 的趋势就相当于 T(n) = Θ(n3)。使用 O 记号法(Big O Notation)表示最坏运行情况的上界。原创 2023-12-31 20:45:39 · 975 阅读 · 0 评论 -
度限制最小生成树和第K最短路算法
最小生成树算法和第K最短路算法都是图论中的经典算法,它们在网络设计、路由选择等多个领域有着重要应用。这些算法在实际应用中通常需要根据具体问题的特点来选择合适的算法。MST算法着重于构造最小权重的树,而第K最短路算法侧重于寻找多条不同的路径。原创 2024-01-14 23:30:52 · 1163 阅读 · 0 评论 -
棋盘分割算法C++代码实现
将一个 8×8 的棋盘进行如下分割:将原棋盘割下一块矩形棋盘并使剩下部分也是矩形,再将剩下的部分继续如此分割,这样割了 (n−1) 次后,连同最后剩下的矩形棋盘共有 n 块矩形棋盘。具体为每次对棋盘进行一次横切或竖切,将棋盘分成两块矩形的子棋盘,分割完一次后,我们可以选择两个子棋盘中的一个再继续递归操作,直到分割次数k用完或已经不能再切割为止。以(x1, y1)为左上角,(x2, y2)为右下角的区域,分割k次的所有方案,下区间值:bot = value(x1, k+1, x2, y2)原创 2023-11-30 19:47:48 · 899 阅读 · 0 评论 -
KMP算法详解
KMP算法是一个高效的字符串匹配算法,它通过预处理模式字符串来避免不必要的比较,从而实现了线性时间复杂度的匹配过程。其核心思想是,当遇到不匹配的情况时,可以利用已知的部分匹配信息,尽可能地移动模式字符串,减少比较的次数。通过C++实现,我们可以直观地在实际应用中体会到KMP算法的强大和效率。原创 2024-01-07 19:43:23 · 999 阅读 · 0 评论 -
并查集的应用及算法详解
在并查集的高级应用中,我们不仅限于解决动态连通性问题,还可以解决一些更加复杂的问题,比如求解最小生成树(Kruskal算法)、寻找等价类的数量、处理动态图连通性问题等。动态图连通性问题指的是在一系列顶点和边不断加入图中的过程中,动态维护图的连通性信息。树中的每一个节点都包括集合的一个成员,每棵树都表示一个集合。左边的树表示集合{b,c,e,h}其c是代表。在上述代码中,我们使用了路径压缩和按秩合并的优化方法,这可以大大提升并查集的效率。每个节点指向它的父节点,根节点指向自己,代表集合的代表元素。原创 2024-01-07 19:43:00 · 428 阅读 · 0 评论 -
动态规划算法--找零方式
通过观察得知,使用枚举的方法存在大量重复计算,例如arr[ i ]=3时,dp[3][12]=dp[4][12]+dp[4][9]+dp[4][6]+dp[4][3]+dp[4][0];而dp[3][15]=dp[4][15]+dp[4][12]+dp[4][9]+dp[4][6]+dp[4][3]+dp[4][0]。我们很容易化简为dp[3][15] = dp[4][15]+dp[3][12].给定数组 arr,arr 中所有的值都为正数且不重复。枚举法,列出使用某张钞票n次的所有可能。原创 2023-12-31 18:55:09 · 570 阅读 · 0 评论 -
树状数组算法C++实现
一、问题树状数组是类似的一个数据结构,支持单点修改、查询,区间修改、查询等操作,当你用查分TLE时,你就可以用树状数组解决。二进制有很多奇妙的应用,这里介绍其中非常经典的一个,也就是 lowbit 运算,即lowbit(x)=x&(-x)。那么这个式子是什么意思呢?先来看 -x 从二进制的角度发生了什么。由计算机组成原理可以知道,整数在计算机中一般采用的是补码存储,并且把一个补码表示的整数 x 变成其相反数 -x 的过程相当于把的二进制的每一位都取反,然后末位加 1。原创 2023-11-30 20:03:13 · 1015 阅读 · 0 评论 -
双机调度问题Johnson算法C++实现
双机流水作业调度:总共有n个作业,作业i分为两个内容,需要按顺序先后在机器A和机器B上完成,分别需要时间ai,bi来完成,一台机器只能同时进行一项作业,问完成所有作业所需的最小时间。多机流水作业调度:一个作业需要在大于两台机器上先后完成,是NP-hard问题。问题就是求最佳作业序列。设前i项作业所需的时间为Ci,可以得出以下式子。原创 2023-10-31 22:36:43 · 395 阅读 · 0 评论 -
乘船问题C++算法实现
选择最轻的人i,他应该选择能和他做一艘船的最重的一个人j一起坐船。那么我们用两个下标i和j,来表示当前最轻和最重的人。有n个人,第i个人的重量为wi,每艘船的最大载重量为c;且最多只能成两个人,用最少的船装载所有的人;如果重量和超过了容量,让j一个人坐船,j --。如果没超,让i和j做一艘船。i ++,j --。乘船问题也是贪心算法的一种。所以我们采用双指针和贪心来解决这道题目。原创 2023-10-31 22:29:05 · 808 阅读 · 0 评论 -
背包问题C++算法实现
一、概念一般来说,当一个最优决策问题可以划分成规模更小的子问题,且具有最优子结构(即全局的最优解包含了子问题的最优解),则可以考虑用动态规划算法。动态规划的实质是分治思想和解决冗余,因此,动态规划是一种将问题实例分解为更小的、相似的子问题,并存储子问题的解而避免计算重复的子问题,以解决最优化问题的算法策略。由此可知,动态规划法与分治法和贪心法类似,它们都是将问题实例归纳为更小的、相似的子问题,并通过求解子问题产生一个全局最优解。原创 2023-10-31 22:29:31 · 164 阅读 · 0 评论 -
贪心算法-最优装载问题C++实现
xn)是最有装载问题的满足贪心选择性质的最优解,则x1=1,(x2,x3,…当一个问题具有最优结构性质时,可用动态规划算法,有时会有更简单有效的算法,那就是贪心算法,贪心算法是通过一系列的选择来得到问题的解,贪心算法并不从整体最优解上加以考虑,所做的选择只是在某种意义上的局部最优解。xn)是最优装载问题的最优解,设k = min{i |xi=1}(1原创 2023-10-31 22:29:18 · 1893 阅读 · 0 评论 -
顺序表(顺序存储结构)及初始化
一、定义顺序表,全名顺序存储结构,是线性表的一种。顺序表存储数据时,会提前申请一整块足够大小的物理空间,然后将数据依次存储起来,存储时做到数据元素之间不留一丝缝隙。例如,使用顺序表存储集合 {1,2,3,4,5},数据最终的存储状态如下图所示:由此我们可以得出,将“具有 '一对一' 逻辑关系的数据按照次序连续存储到一整块物理空间上”的存储结构就是。通过观察上图中数据的存储状态,我们可以发现,顺序表存储数据同数组非常接近。其实,顺序表存储数据使用的就是数组。转载 2023-10-31 22:28:49 · 227 阅读 · 0 评论 -
C++常用的拷贝和替换算法
1).copy //容器内指定范围的元素拷贝到另一容器中2).replace //将容器内指定范围的旧元素修改为新元素3).replace_if //容器内指定范围满足条件的元素替换为新元素4).swap //互换两个容器的元素1.1 copy算法1).功能描述:容器内指定范围的元素拷贝到另一容器中。2).函数原型:copy(iterator beg, iterator end, iterator dest)按值查找元素,找到返回指定位置迭代器,找不到返回结束迭代器位置beg 开始迭代器。原创 2023-09-30 19:28:58 · 225 阅读 · 0 评论 -
C++常用排序算法
1.C++常用排序算法1).sort //对容器内元素进行排序2). random_shuffle //洗牌 指定范围内的元素随机调整次序3). merge //容器元素合并,并存储到另一容器中4). reverse //反转指定范围的元素1).功能描述:对容器内元素进行排序2). 函数原型:sort(iterator beg, iterator end, _Pred);按值查找元素,找到返回指定位置迭代器,找不到返回结束位置迭代器位置beg 开始迭代器end 结束迭代器_Pred 谓词。原创 2023-09-30 19:19:44 · 110 阅读 · 0 评论 -
C++常用遍历算法
2). 函数原型:transform(iterator beg1, iterator end1, iterator beg2, _func);2).函数原型:for_each(iterator beg, iterator end, _func)。1).for_each在实际开发中是最常用遍历算法,需要熟练掌握。3).搬运的目标容器必须要提前开辟空间,否则无法正常搬运。1). 功能描述:搬运容器到另一个容器中。(2).transform遍历算法。(1).for_each遍历算法。1.C++常用遍历算法。原创 2023-09-30 19:05:06 · 307 阅读 · 0 评论 -
C++常用查找算法
(1). find //查找元素(2).find_if //按条件查找元素(3).adjacent_find //查找相邻重复元素(4).原创 2023-08-31 21:26:20 · 509 阅读 · 0 评论 -
常用的C++可视化图形库(二)
圆形图表(饼状图),圆环图,柱形图(条形图),直线图,曲线图,梯级线图,趋势线图,曲线拟合图,线间色图,区域图,散布图(散形图),泡沫图,floating box,box-whisker,瀑布图,金融类图表,甘特图表,向量图,雷达图,极线图,rose,XY轴交换(旋转图表)和3D效果等效果。广泛的图表类型- 饼图、甜甜圈、条形图、直线、样条曲线、阶梯线、趋势线、曲线拟合、线间填充、区域、带、散点、气泡、浮动框、盒须、瀑布、轮廓、热图、表面、矢量、金融、甘特图、雷达、极地、玫瑰、金字塔、锥体和漏斗。原创 2023-08-29 21:56:24 · 660 阅读 · 0 评论 -
常用的C++可视化图形库(一)
mathGL就是用来绘制一些统计图形的一个CPP的库, 实际上就是和gnuplot类似的一个C++的库,很适合科学计算的结果分析和统计,另外还有QT,python等支持的接口,只是在编译库的时候要加上相应的option,这个库用起来很好,减少了很多工作量,其核心调用方式就是使用一个函数指针。主要功能:包含了基本的 2D 图,例如:散点图、直方图、散点图,还提供了刻度、滑块、圆盘、温度计、仪表盘等。主要特点:成熟、高效,有良好的文档,并提供了大量的示例,与大量(数千、数十万)的点工作得很好。原创 2023-08-29 21:45:18 · 3261 阅读 · 0 评论 -
EGE图形库
它的使用方法与TC中的graphics.h相当接近,对新手来说,简单,友好,容易上手,免费开源,而且因为接口意义直观,即使是之前完全没有接触过图形编程的,也能迅速学会基本的绘图。★功能更多 支持拉伸贴图,支持图片旋转,支持透明半透明贴图,支持图像模糊滤镜操作,可以用对话框函数进行图形化的输入,可以方便地对帧率进行准确的控制,可以读取常见的流行的图片格式(bmp/jpg/png),可以保存图片为bmp或png格式。Xege将发展为一个强大的,开源的,跨平台的,同时也同样简单易上手的图形库。原创 2023-08-29 21:02:31 · 297 阅读 · 0 评论 -
STL之Deque使用总结
Deque是STL的标准容器之一,使用和Vector类似,在许多操作的地方可以直接替代。支持随即存取,也就是[]操作符;支持两端操作,push(pop)-back(front),在两端操作上与list效率差不多 因此在实际使用时,如何选择这三个容器中哪一个,应根据你的需要而定,一般应遵循下面的原则: (1).如果你需要高效的随即存取,而不在乎插入和删除的效率,使用ve原创 2017-05-31 21:21:34 · 765 阅读 · 0 评论 -
STL之List使用总结
STL之List使用总结原创 2017-05-31 21:20:51 · 673 阅读 · 0 评论 -
STL之Map使用总结
Map是STL的标准容器之一,和Set一样,Map是一种关联容器。他提供一对一的数据处理方式,每个Map有两个关键字,第一个关键字在Map中是唯一的,也叫做Map的键;第二个关键字用来存储该关键字的值。Map内部和层次实现是一颗红黑数,是一种非平衡二叉树。这棵树具有对数据自动排序的功能,所以Map内部所有数据均是有序的。1. Map的初始化及销毁:(1). Map()创建了一个空的 map原创 2017-05-31 21:21:17 · 1256 阅读 · 0 评论 -
TinyXML2使用总结
TinyXML2是简单实用的开源的C++XML文件解析库,可以很方便的应用到现有的项目之中。 TinyXML2解析器相对TinyXML1在代码上是完全重写,使其更适合于游戏开发中使用。它使用更少的内存,更快,并使用更少的内存分配。 xml类似数据库,一般来说对数据库有什么操作,那么对xml文件也能实现什么操作。 数据库增删查改对应xml文件就是新建xml文件...原创 2019-07-28 21:12:46 · 1527 阅读 · 0 评论 -
tinyXml生成XML文件
1.tinyXMl生成XML文件#include <stdio.h>#include <string>using namespace std; #include "../tinyxml/tinyxml.h" int test1(){ TiXmlDocument xml_doc; // 添加XML声明 xml_doc.LinkEndChild(n...原创 2019-06-30 22:03:24 · 1315 阅读 · 0 评论 -
TinyXML简单的生成和解析示例
#include <stdio.h>#include <string>using namespace std;#include "../tinyxml/tinyxml.h"int test1(){ TiXmlDocument xml_doc; /*建立*/ //<A>a</A> TiXmlElement* xmlElemA =...转载 2019-06-30 22:05:30 · 540 阅读 · 0 评论 -
tinyXml解析XML文件
TinyXML解析一个XML文档,并从该文档构建可读取、修改和保存的文档对象模型(DOM)。 XML代表“可扩展标记语言”,它允许您创建您自己的文档标记。HTML在标记方面做得很好用于浏览器的文档,XML允许您定义任何类型的文档标记,例如描述组织者应用程序。XML是一种非常结构化和方便的格式。所有为存储应用程序数据而创建的随机文件格式都可以全部替换为XML。所有内...原创 2019-06-30 22:03:11 · 3832 阅读 · 2 评论 -
Tinyxml修改xml文件、添加中文字符字段
1.修改xml文件:bool write(char *file_path, std::vector<std::string> &edit){ //读取xml文件中的参数值 TiXmlDocument* Document = new TiXmlDocument(); if (!Document->LoadFile(FILE_PATH)) { return...转载 2019-07-28 21:12:11 · 1573 阅读 · 0 评论 -
FlatBuffers使用总结(2)
一、FlatBuffers概述: Google在今年6月份发布了跨平台序列化工具FlatBuffers,提供了C++/Java/Go/C#接口支持,这是一个注重性能和资源使用的序列化类库。相较于Protocol Buffers,其更适用于移动设备,FlatBuffers提供更高的性能以及更低的资源需求。二、FlatBuffers特点:不需要打包/解包。它的结构化数据都...原创 2019-06-30 21:37:50 · 2033 阅读 · 2 评论 -
FlatBuffers与protobuf性能比较
FlatBuffers发布时,顺便也公布了它的性能数据,具体数据请见Benchmark。它的测试用例由以下数据构成"a set of about 10 objects containing an array, 4 strings, and a large variety of int/float scalar values of all sizes, meant to...转载 2019-06-30 22:02:32 · 4406 阅读 · 1 评论 -
FlatBuffers使用总结(1)
1.下载编译FlatBuffer下载地址:https://github.com/fanyun-01/flatbuffers2.编译FlatBuffer 解压flatbuffers-master.zip文件文件,使用VS2015打开flatbuffers-master\build\VS2015\FlatBuffers.sln文件进行编译。编译后生成的文件如下:(1).flat...原创 2019-06-30 21:37:20 · 3255 阅读 · 1 评论 -
FlatBuffers使用总结(3)
1、IDL测试文件// Example IDL file for our monster's schema.namespace MyGame.Sample;enum Color:byte { Red = 0, Green, Blue = 2 }union Equipment { Weapon } // Optionally add more tables.struct Vec3 {...原创 2019-06-30 21:55:52 · 3659 阅读 · 0 评论 -
STL Queue使用总结
1.STL Queue使用简介 C++ STL 之所以得到广泛使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构操作。vector封装数组,list封装了链表,map和set封装了二叉树等,在封装这些数据结构的时候,STL按照程序员的使用习惯,以成员函数方式提供的常用操作,如:插入、排序、删除、查找等。让用户在STL使用过程中,并不会感到陌生。 今天我们说说STL的Queue,Queu...原创 2020-11-29 22:21:58 · 513 阅读 · 0 评论 -
STL Set使用总结
C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构操作。vector封装数组,list封装了链表,map和set封装了二叉树等,在封装这些数据结构的时候,STL按照程序员的使用习惯,以成员函数方式提供的常用操作,如:插入、排序、删除、查找等。让用户在STL使用过程中,并不会感到陌生。 今天我们说说STL的set,必须说明的是set关联式容...原创 2020-11-29 22:22:15 · 309 阅读 · 0 评论 -
H264和X264究竟有什么区别?
X264是H264的另外一种开源编码格式,其开头的"X"意思是"software",是使用CPU软解码的一种视频格式,特征是编码速度相当快但解码很慢并相当耗费CPU处理能力,X264不支援硬件加速,是和RMVB一样的强解码类型(同一机型GeForce7300和 GeForce9600播放H264时CPU会有巨大的差异但播放RMVB和X264二者无异),X264不支持de-block(区域马赛克弱化换算) 技术。x264是基于h264的开源编码解码器,是一种采用这种标准的具体实现。原创 2022-10-24 22:17:56 · 10866 阅读 · 0 评论 -
人脸识别技术细节总结
在这里把相关经验跟大家分享一下,如有不足,敬请斧正。对于一幅人脸图像,通过定位特征点可以方便地抽取人脸的各部分特征,若以这些特征点为基准对抽取的各个特征值进行归一化,则这些特征值具有平移、旋转和尺度上的不变性,通过这样对人脸进行规范化处理,可以将不同大小、方向和水平旋转等情况的人脸统一起来,扩大人脸库的入库范围,提高人脸识别的速度。人脸对齐主要是在人脸关键点检测的基础上,利用仿射变换、相似变换等对关键点进行处理,将非正面人脸旋转成正脸来进行人脸特征提起,人脸关键点的好坏和对齐的效果影响人脸对齐的结果。原创 2022-09-30 22:45:44 · 1245 阅读 · 0 评论 -
常用的图像彩色模型
L表示明度(Luminosity),L的值域由0到100,L=50时,就相当于50%的黑a表示从洋红色至绿色的范围,a的值域由+127至-128,其中+127就是红色,渐渐过渡到-128的时候就变成绿色。面向硬件设备的彩色模型与人的视觉感知有一定的差距且使用时不太方便,如给定一个彩色图像,人眼很难判定其中的RGB分量,这是面向视觉感知的彩色模型比较方便。色调H(Hue):与光波的波长有关,它表示人的感官对不同颜色的感受,如红色、绿色、蓝色等,它也可表示一定范围的颜色,如暖色、冷色等。原创 2022-09-30 21:51:54 · 2097 阅读 · 0 评论 -
YUV各种格式的像素占用内存大小计算
假如有一幅1920×1080的图片,用yuv422来表示,那么,采样方式就是每个像素采样Y信号,U,V信号隔一个采样,这样算下来,就有1920×1080个Y,1920×540个U,1920×540个V,一幅1080×1080大小的YUV图片占的总字节数为1920×1080×2个字节,每像素2个字节,也就是16位。但这也比usb1.1的12mbps(1.5m/s)快了近10倍。其实,这是错误的,事实上“480mbps”应为“480兆比特/秒”或“480兆位/秒”,它等于“60兆字节/秒”,大家看到差距了吧。原创 2022-09-30 21:35:23 · 1001 阅读 · 0 评论