- 博客(38)
- 资源 (32)
- 收藏
- 关注
原创 error: passing ‘const xxx’ as ‘this’ argument discards qualifiers [-fpermissive]的解决方案
先上错误:../include/rectangle.h:Ininstantiationof'R_START_TREE::Rectangle<dimensions>&R_START_TREE::Rectangle<dimensions>::operator=(constR_START_TREE::Rectangle<dimensions>&)[withlonglongunsignedintdimensions=3]':r...
2021-04-28 00:59:01 4915
原创 C++ 类的构造函数报错 error: no matching function for call to 的原因
这几天在写R*树,使用模板类遇到一堆问题。直接上代码:rectangle.h#ifndef __H_RECTANGLE_H__#define __H_RECTANGLE_H__#include "point.h"using namespace std;namespace R_START_TREE{ template <std::size_t dimensions> class Rectangle { private: Point
2021-04-27 23:26:36 21140 1
原创 空间数据索引RTree(R树)完全解析及Java实现
第一部分 空间数据的背景介绍空间数据的建模基于实体的模型(基于对象)Entity-based models (or object based)0-dimensional objects: 一般使用点point来表示那些对于不需要使用到形状信息的实体。 1-dimensional objects or linear objects: 用于表示一些路网的边,一般用于表示道路road。 (polyline) 2-dimensional objects or surfacic objects: 用.
2021-04-26 08:25:47 7219 5
原创 图解R树的内部结构及操作
本文是在https://blog.csdn.net/baimafujinji/article/details/89810217基础上增加了自己的理解和解释形成的。R树的基本情况R树(R-tree)是一种将B树(B+树和B树统称B树)扩展到多维情况下得到的数据结构,它最初由Antonin Guttman于1984年提出。B树的结点中会存储一个键的集合,这些键把线分成片段,沿着那条线的点仅属于一个片段(B+树中只有叶子节点才存储具体的key和内容,相当于叶子节点把数轴划分的更碎,而内部节点是把这些碎的偏
2021-04-22 21:30:49 5767 1
转载 ROS自带的多传感器同步
1、解决的问题多传感器数据融合的时候,由于各个传感器采集数据的频率的不同,例如odom 50Hz、Imu 100Hz、camera 25Hz,需要将传感器数据进行时间同步后才能进行融合。融合的原理:分别订阅不同的需要融合的传感器的主题,通过TimeSynchronizer 统一接收多个主题,并产生一个同步结果的回调函数,在回调函数里处理同步时间后的数据。注意只有多个主题都有数据的时候才可以触发回调函数。如果其中一个主题的发布节点崩溃了,则整个回调函数永远无法触发回调。当多个主题频率一致的时候
2021-04-22 11:15:05 1241
原创 模板结构体与重载operator()运算符
模板的意义是用一套代码解决多个类型的问题,也就是说提出一套公共代码实现同一个功能,在使用不同的参数时,对应的函数功能相同;重载是改变原有运算符的含义,让其有新的用途。模板函数和模板结构体的区别是,模板函数只能单独调用;模板结构体/类可以生成对象,然后通过对象来调用,同时里面可以封装更多的重载的或者普通函数,功能相对会更强大一些。#include <iostream>using namespace std;//模板结构体,里面有一个私有变量a和一个重载运算符()的函数,该函数.
2021-04-19 09:35:16 1267
原创 operator重载与函数对象
C++的operator有两种用法,一种是operator overloading(操作符重载),一种是operator casting(操作隐式转换)。1.operator overloadingC++可以通过operator 重载操作符,格式如下:类型T operator 操作符 (),如比重载+,如下所示template<typename T> class A{public: const T operator + (const T& rhs) {
2021-04-18 11:40:14 454
转载 A* 寻路算法
原文地址:http://www.gamedev.net/reference/articles/article2003.asp概述虽然掌握了A*算法的人认为它容易,但是对于初学者来说,A*算法还是很复杂的。搜索区域(The Search Area)我们假设某人要从 绿色A点移动到 红色B点,但是这两点之间被一堵蓝色墙隔开。你应该注意到了,我们把要搜寻的区域划分成了正方形的格子。这是寻路的第一步,简化搜索区域,就像我们这里做的一样。这个特殊的方法把我们的搜索区域简化为了2维数组...
2021-04-17 11:42:49 457
转载 图解B树和B+树
B树B树是为了磁盘或其它存储设备而设计的一种多叉平衡查找树,多叉就是多个分支的意思,二叉树就是最多只有两个分支的树。如下图所示,即是一棵B树。 一棵m阶的B树必须满足如下条件: 1)每个结点最多含有m个分支,也就是说:每个节点最多m−1个关键字。 2)根节点最少可以有1个关键字,其它节点最少有⌈m2⌉−1个关键字。 3)每个节点的内部结构为:n为节点中关键字的个数,Ki,i=1,2,...,n 为关键字,从小到大排列,Pi,i=0...
2021-04-17 10:01:22 1382
转载 最佳优先搜索和A*搜索算法
BFS算法算法原理最佳优先搜索算法是一种启发式搜索算法(Heuristic Algorithm),其基于广度优先搜索算法,不同点是其依赖于估价函数对将要遍历的节点进行估价,选择代价小的节点进行遍历,直到找到目标点为止。BFS算法不能保证找到的路径是一条最短路径,但是其计算过程相对于Dijkstra算法会快很多。算法流程算法实现需要有两个优先队列Open和Closed,Open队列用来存放未遍历并将要被遍历的节点;Closed队列用来存放已经遍历过的节点。 初始时将根节点放入Open队列中
2021-04-16 15:17:58 5706 1
转载 图解数据库skyline查询
假设一个数据库存储每个酒店的以下信息:它的价格(夜间价格)、离海滩的距离。用户希望检索“最佳”酒店,如何比较两个酒店的质量呢? a比b好吗?是的,a酒店比b酒店更便宜,而且离海滩更近,我们说a支配b。 a是不是比i好呢?它们是不可比的。一些用户可能更喜欢a(因为它离海滩更近),而另一些用户可能更喜欢i(因为它更便宜)。skyline 包含了所有不受其它酒店支配的酒店。skyline ={a,i,k},而非 skyline 酒店在...
2021-04-16 14:59:59 3219 4
转载 时空数据库中的轨迹数据压缩
时空数据库管理移动对象,比如:汽车、飞机、地貌变化等。空间数据库是时空数据库的特例,即时刻固定。轨迹压缩每秒钟都会从 GPS 获取大量(x,y,t)格式的数据,如何在不降低物体轨迹精度的前提下减小数据量呢(也就是数据都完全采集到了,但是数据量太大了,所以我们想少存一些数据,但又不能造成数据失效,也就是存入的那些少量点连起来的轨迹和原始轨迹不能偏差太大)?主要有三个指标:处理时间、压缩率、误差测量。误差:原始轨迹位置与估计轨迹位置之间的距离。主要有两种误差测量指标:垂直欧式距离、时间同步欧式距..
2021-04-15 22:01:46 3285
转载 使用内核提供的container_of()函数获取结构体成员在结构体中的位置
本文介绍Linux 4.4内核容器container_of()。文件:include/linux/kernel.h,定义如下:/** * container_of - cast a member of a structure out to the containing structure * @ptr: the pointer to the member. * @type: the type of the container struct this is embedded in.
2021-04-15 20:15:37 763
转载 spatialite扩展的编译和安装
spatialite作为一个sqlite3数据库的extension,使得sqlite3具有地理空间数据的处理能力。spatialite在linux上的编译,中文资料太少了。在此记录一下编译及使用过程。开始编译依赖库!没错,spatialite依赖了很多很多库。列举如下(直接粘贴了我cmakelist的内容):#libproj.afind_library(Proj_LIBRARY NAMES libproj.a)link_libraries(${Proj_LIBRARY})MESSAG
2021-04-15 17:26:24 3064
转载 SpatiaLite 使用指南
SpatiaLite是一个用来扩展SQLite的内核的开源库,支持完全成熟的空间SQL功能。其特点有:一个实现完整的SQL引擎的轻量级库 标准的SQL执行:几乎完全的SQL-92标准 没有复杂的客户端/服务器结构 整个数据库简单地对应于单个文件,且文件大小没有限制 跨平台 无需安装,无需配置Spatialite提供一个完整而强大的空间数据库管理系统(主要是与OGC-SFS兼容),而且由于其跨平台及轻量级的特点,常被用于涉及LBS功能的移动端应用开发中。空间索引使用SpatiaLite
2021-04-15 17:13:54 3454
原创 SQLite的table和index 的组织形式B+树和B 树
本文主要基于https://blog.csdn.net/daliaojie/article/details/8230544进行修改。网上一些帖子说Sqlite中组织管理数据库文件存储的机制为B-树。实际上根据《the definitive guide to sqlite》SECOND EDITON中的描述发现,SQLite是把B树和B+树统称为B树,但两者在SQLite中都使用到了(也有一说是用了B*树和B树)。B+树用于组织table及其内容,叶子节点中存放的是数据记录record,内部节点不存放
2021-04-15 16:10:18 900
转载 图解R树的原理及相关操作
B树的搜索本质上是一维区间的划分过程,每次搜索节点所找到的子节点其实就是一个子区间。R树是把B树的思想扩展到了多维空间,采用了B树分割空间的思想,是一棵用来存储高维数据的平衡树。 对于一棵R树,叶子节点所在层次称为 Level1,根节点所在层次称为Level-h。一棵R树满足如下性质: 1)除根结点之外,所有非根结点包含有m至M个记录索引(条目)。根结点的记录个数可以少于m。通常m=M/2。 2)每一个非叶子结点的分支数和该节...
2021-04-15 14:20:23 7710 1
原创 linux C下的结构体大小和如何使用计算结构体成员相对于结构体头的偏移量
在linux下进行C编程,有时候会绵连结构体的大小问题。结构体大小并不等于其内部所有成员大小之和,这个主要是由于结构体需要内部对齐造成的,比如struct a{ int a; long b}它的大小可能就是16,而不是12,因为long为8个字节,int为4个字节,这里面需要8字节对齐。而struct a{ int a; int b; long c;}同样是16个字节,这是因为前面2个int刚好8字节,和后面的long一样。所有如果想在程序中基于偏移量来获取结构体成员的值时,靠人工计算该成员相对于结构体首地
2021-04-15 11:19:01 729
原创 R树与空间索引
B树或者B+树可以非常好的处理一维空间存储的问题。B树是一棵平衡树,它是把一维直线分为若干段线段,当我们查找满足某个要求的点的时候,只要去查找它所属的线段即可。依我看来,这种思想其实就是先找一个大的空间,再逐步缩小所要查找的空间,最终在一个自己设定的最小不可分空间内找出满足要求的解。一个典型的B树查找如下:要查找某一满足条件的点,先去找到满足条件的线段,然后遍历所在线段上的点,即可找到答案。B树是一种相对来说比较复杂的数据结构,尤其是在它的删除与插入操作过程中,因为它涉及到了叶子结点的分解.
2021-04-13 15:20:49 2049
转载 B树B+树B*树
在大规模数据存储中,实现索引查询这样一个实际背景下,树节点存储的元素数量是有限的(如果元素数量非常多的话,查找就退化成节点内部的线性查找了),这样导致二叉查找树结构由于树的深度过大而造成磁盘I/O读写过于频繁,进而导致查询效率低下(为什么会出现这种情况,待会在外部存储器-磁盘中有所解释),那么如何减少树的深度(当然是不能减少查询的数据量),一个基本的想法就是:采用多叉树结构(由于树节点元素数量是有限的,自然该节点的子树数量也就是有限的)。也就是说,因为磁盘的操作费时费资源,如果过于频繁的多次查找势必效率
2021-04-12 22:03:29 263
转载 B树 B+树 B*树的区别和适用场合
一、B树1、B树的特性一棵m阶的B树的满足条件:(1)每个节点至多有m棵子树(2)根节点除外,其它每个分支节点至少有【m/2】棵子树(3)根节点至少有两棵子树(除非B树只包含一个节点)(4)所有叶子节点在同一层上,B树的叶子节点可以看成一种外部节点,不包含任何信息。(5)有j个孩子的非叶结点恰好有j-1个关键码,关键码按递增次序排列。B 树又叫平衡多路查找树。如图:2、B树的使用场景B树多用于做文件系统的索引。那么问题来了:为什么要用B树,红黑树不是就挺好的么?原因:B树和二叉
2021-04-09 10:06:20 2286 2
转载 redis中的跳表结构
redis的有序集合zset数据结构底层采用了跳表原理 时间复杂度O(logn)(阿里)redis使用跳表不用B+数的原因是:redis是内存数据库,而B+树纯粹是为了mysql这种IO数据库准备的。B+树的每个节点的数量都是一个mysql分区页的大小(阿里面试)敲黑板:每级遍历 3 个结点即可,而跳表的高度为 h ,所以每次查找一个结点时,需要遍历的结点数为 3*跳表高度 ,所以忽略低阶项和系数后的时间复杂度就是 ○(㏒n),空间复杂度是O(n)问题如果对以下问题感到困惑或一知半解
2021-04-09 09:55:25 404
转载 二叉树 红黑树 B树 B+树的优缺点
前言在MySQL中,无论是Innodb还是MyIsam,都使用了B+树作索引结构(这里不考虑hash等其他索引)。本文将从最普通的二叉查找树开始,逐步说明各种树解决的问题以及面临的新问题,从而说明MySQL为什么选择B+树作为索引结构。一、二叉查找树(BST):不平衡二叉查找树(BST,Binary Search Tree),也叫二叉排序树,在二叉树的基础上需要满足:任意节点的左子树上所有节点值不大于根节点的值,任意节点的右子树上所有节点值不小于根节点的值。如下是一颗BST(图片来源)。.
2021-04-09 09:48:25 7668 1
转载 随机快速搜索树RRT
机器人的规划问题的本质,是在已知或者部分已知环境的情况下,规划一条从起点到终点的无碰撞的路径。规划算法种类有很多,比如基于图的搜索算法、人工势场法、基于采样的规划方法等。今天主要介绍的就是一种典型的基于采样的规划方法:随机快速搜索树(RRT)。RRT是一种在完全已知的环境中通过采样扩展搜索的算法,相比较于基于图的搜索算法,最主要的优点就是快,因此在多自由度机器人的规划问题中发挥着较大的作用,比如机械臂的规划算法基本都是以RRT为基础的。但同时他也有比较明显的缺点,比如通常不最优、规划的路径非常不平滑等。但
2021-04-09 01:29:54 879
转载 路径规划-快速搜索随机树(Rapid-exploration Random Tree)
本节介绍机器人路径规划领域的一个重要的方法,快速搜索随机树法,这种方法在机器人规划领域,尤其是高维环境(机械臂,飞行器)的规划中,占有重要的位置,是基于采样的规划方法的一种。简介:快速搜索随机树,就是在环境中随机撒一些点,这些点经过算法运算,最终可以连接起来,变成机器人可以运行的轨迹。二 算法介绍:1.基本算法流程2.算法介绍x_init-->x_new---->x_rand如图所示,为讲述方便,我们以二维环境为例。开始:首先在环境中,我们有一个起始.
2021-04-09 01:22:42 1521
转载 局部路径规划中的人工势场法
人工势场法是局部路径规划的一种比较常用的方法。这种方法假设机器人在一种虚拟力场下运动。一、简介如图所示,机器人在一个二维环境下运动,图中指出了机器人,障碍和目标之间的相对位置。这个图比较清晰的说明了人工势场法的作用,物体的初始点在一个较高的“山头”上,要到达的目标点在“山脚”下,这就形成了一种势场,物体在这种势的引导下,避开障碍物,到达目标点。人工势场包括引力场和斥力场,其中目标点对物体产生引力,引导物体朝向其运动(这一点有点类似于A*算法中的启发函数h)。障碍物对物体产生斥..
2021-04-09 01:00:46 3002 1
原创 B+树比B树更快的原因
B+树是B-Tree的改进版本,同时也是数据库索引索引所采用的存储结构。数据都在叶子节点上,并且增加了顺序访问指针,每个叶子节点都指向相邻的叶子节点的地址。相比B-Tree来说,进行范围查找时只需要查找两个节点,进行遍历即可。而B-Tree需要获取所有节点,相比之下B+Tree效率更高。为什么官方建议使用自增长主键作为索引?结合B+Tree的特点,自增主键是连续的,在插入过程中尽量减少页分裂,即使要进行页分裂,也只会分裂很少一部分。并且能减少数据的移动,每次插入都是插入到最后。总之就是减少.
2021-04-08 09:55:46 2424
转载 为什么说索引会加速查找过程
背景我相信大家在数据库优化的时候都会说到索引,我也不例外,大家也基本上能对数据结构的优化回答个一二三,以及页缓存之类的都能扯上几句,但是有一次阿里P9的一个面试问我:你能从计算机层面开始说一下一个索引数据加载的流程么?(就是想让我聊IO)废话不多说,我们就从计算机加载数据聊起,讲一下换个角度聊索引。正文MySQL的索引本质上是一种数据结构让我们先来了解一下计算机的数据加载。磁盘IO和预读:先说一下磁盘IO,磁盘读取数据靠的是机械运动,每一次读取数据需要寻道、寻点、拷贝到内
2021-04-08 09:25:28 344
转载 基于位表示的8叉树数据存储原理
3D物体建模在计算机辅助设计系统、医疗系统、机器人以及物体自动检测中扮演了越来越重要的角色。在这其中,八叉树是一种非常有效的储存数据的方法,尤其是对于像流形物体、点云图(point cloud)、体素(voxel)这样的稀疏化(sparse)数据来说,八叉树可以更好地展示数据的结构特性。图1 八叉树结构的数据存储原理图片来源:Figure 3, Riegler, G., Ulusoy, A. O., & Geiger, A. (2017, July). Octnet: Learnin.
2021-04-07 16:27:26 1801
原创 管理minix中增加的数据索引的三级存储结构代码
这里2020年写的针对minix数据增加索引后,使用三级结构进行管理的相关代码。#ifndef _H_ITREE_INDEX_H#define _H_ITREE_INDEX_H #include <linux/buffer_head.h>#include "minix.h"static unsigned long max_size = 0x7fffffffffffffff;/* added by linbin */enum {IDXDIRECT = 7, IDXDEPTH
2021-04-07 14:15:23 152
转载 简单的linux字符设备驱动模块及测试
功能:实现简单的字符操作(从用户空间向内核空间写入一串字符;从内核空间读一个字符到内核空间)字符设备驱动的初始化流程大概如下所示:定义相关的设备文件结构体(如file_operation()中的相关成员函数的定义)->向内核申请主设备号(建议采用动态方式) ->申请成功后,调用MAJOR()获取主设备号 ->初始化cdev的结构体,调用cdev_init() ->调用cdev_add(),注册cdev到kernel ->注册设备模块:module_init()、modu
2021-04-07 11:24:34 1182
转载 通过简单的Linux字符设备驱动了解ioctl
在hellow.c中(将来编译成一个内核模块插入到内核中工作),为file_operations中加入成员函数hello_ioctl:/* file operations for hello device */static struct file_operations hello_ops = { .owner = THIS_MODULE, .unlocked_ioctl = hello_ioctl, .open = hello_open, .read = hello_...
2021-04-07 11:14:37 287
转载 IOCTL命令格式解析以及调用过程
一、IOCTL的系统调用1、应用程序中的ioctl(系统IO的内容)#include int ioctl(int d, int request, ...);应用程序向驱动程序发送命令(cmd),然后应用程序可以向驱动程序发送数据(args),也可以从驱动程序中读数据。2、驱动程序中,对应的ioctlstruct file_operations { struct module *owner; int (*ioctl) (struct inode *inode, struct f
2021-04-07 10:54:24 4360
转载 linux内核中根据inode获取文件的完整路径
1.概述构成一个操作系统最重要的部分就是进程管理和文件系统了。Linux最初采用的是minix的文件系统,minix是由Andrew S. Tanenbaum开发的用于实验性的操作系统,比如有一些局限性。后来经过一段时间的改进和发展,Linux开发出了ext2文件系统,当然后来逐渐发展除了ext3、ext4。为了使Linux支持各种不同的文件系统,Linux使用了所谓的虚拟文件系统VFS(Virtual Filesystem Switch),VFS提供一组标准的、抽象的文件操作,以系统调用的形式提供
2021-04-07 10:16:50 4018 1
转载 linux c如何判断字符串是否为空
一般而言,我们习惯用一个字符数组用来存储一个字符串。char str_array[LEN];或者malloc一段内存来存储一个字符串char * str_ptr = (char*) malloc (LEN*sizeof(char));定义了数组或字符指针之后,需要做一个初始化,否则里面将是随机值,以后将无法判断改字符串是否为空。所以,首先要保证字符串初始化为空memset(str_ptr,'\0',sizeof(LEN*sizeof(char)));对于已经初始化过的字符串,我们
2021-04-07 08:59:42 2018
转载 linux C中判断文件是否存在以及是否有相应权限的access函数
access函数功能描述: 检查调用进程是否可以对指定的文件执行某种操作。 用法: #include <unistd.h>#include <fcntl.h>int access(const char *pathname, int mode); 参数: pathname: 需要测试的文件路径名。 mode: 需要测试的操作模式,可能值是一个或多个R_OK(可读?), W_OK(可写?), X_OK(可执行?) 或 F_OK(文件存在?)组合体.
2021-04-07 08:50:04 200
转载 linux C语言删除文件或者目录的函数remove
头文件:#include <stdio.h>remove()函数用于删除指定的文件,其原型如下: int remove(char * filename);【参数】filename为要删除的文件名,可以为一目录。如果参数filename 为一文件,则调用unlink()处理;若参数filename 为一目录,则调用rmdir()来处理。【返回值】成功则返回0,失败则返回-1,错误原因存于errno。错误代码:EROFS 欲写入的文件为只读文件。 EFAULT 参数file...
2021-04-07 08:47:06 3334
sensorPluginTest0916.zip
2020-09-16
数据库存储树结构ClosureTableCateogryStore-master.zip
2020-02-27
storage_ws_jin0906.tar.gz
2019-09-06
开源内存数据库的调研与分析.doc
2019-08-30
fastdb-arm.tar.gz
2019-08-23
ubuntu 16.04 opencv auto installation
2019-03-27
自然语言处理实践者指南Practitioner's guide to NLP part I
2019-01-15
Python code for Artificial Intelligence: Foundations of Computational Agents
2019-01-15
百页教程学机器学习the hundred page machine learning book pdf原版
2019-01-02
冰点下载器--百度文库豆丁网免费下载
2018-12-26
vcForPython27解决安装pycrypto报错vcvarsall.bat找不到问题
2018-06-01
手机app脱壳虚拟机镜像
2018-06-01
jd-gui1.4+dex2jar2.0+apkdb+apktool apk反编译套装
2018-05-31
win7 基于spring boot+elasticsearch+Redis+mysql+mybatis进行搜索引擎web开发--爬取IThome热评
2018-04-27
windows下redis管理工具treeNMS
2018-04-24
《C和指针》pdf高清版和《C陷阱和缺陷》以及源代码
2018-04-12
ROS的插件库pluginLIB机制讲解
2018-04-11
51CTO 机器人操作系统ROS精品课程PPT
2018-03-06
SSM框架——使用MyBatis Generator自动创建代码
2017-09-21
metronic 4.7.5 最完整版,共318M,文件中有链接
2017-09-06
quick4j IDEA进行javaweb开发的快速框架 maven+Spring+SpringMVC+shiro +myhatis
2017-09-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人