算法学习笔记

2023-05-16

最近无意中看到一个算法的网站,看着感觉介绍得挺系统的,虽然做算法以及指导学生开发各种算法这么些年了,却没有真正系统的学习过(几年前啃过算法导论,但是苦于那蹩脚的中文翻译,也没有去看英文原文)。为此决定好好学习一下,本博文为本人学习下面网站的资料的学习记录,本博文仅为本人学习记录用,随着学习的过程也会不断更新此间内容。

https://labuladong.github.io/algo/https://labuladong.github.io/algo/

目录

Chrome 刷题插件安装

学习算法和刷题的框架思维

基于图像像素强度来提取其四叉树结构

参考资料


Chrome 刷题插件安装

 正所谓工欲善其事,必先利其器,首先下载Chrome浏览器及其插件:

https://chrome.google.com/webstore/detail/leetcode-helper-by-labula/elafhogmnaapleckojedgipgmidneccghttps://chrome.google.com/webstore/detail/leetcode-helper-by-labula/elafhogmnaapleckojedgipgmidneccg

安装成功后,可以在插件列表看到插件图标:

 点击插件图标可以弹出插件弹窗,包含刷新数据的按钮和很多有用的链接:

 建议在 Chrome/商店安装的,这样会在新版本发布后自动更新。

LeetCode 版可以通过点击链接进入:https://leetcode.com/list/9zwo3ww5/

随便点进去一个

感觉确实是很不错,还有一些小的功能可以看下面。此处先不介绍,后面涉及再补上。

Chrome 刷题插件安装使用手册

学习算法和刷题的框架思维

首先给出B站视频,建议看着视频来学习会更加直观。

【labuladong】学习数据结构和算法的框架思维

数据结构的存储方式只有两种:数组(顺序存储)和链表(链式存储)

所谓的数组应该就是跟cpp里的差不多(连续的,顺序存储)。链表则是,数据+指向下一个数据的指针(非连续的,离散的存储)。

二者的优缺点如下

数组由于是紧凑连续存储,可以随机访问,通过索引快速找到对应元素,而且相对节约存储空间。但正因为连续存储,内存空间必须一次性分配够,所以说数组如果要扩容,需要重新分配一块更大的空间,再把数据全部复制过去,时间复杂度 O(N);而且你如果想在数组中间进行插入和删除,每次必须搬移后面的所有数据以保持连续,时间复杂度 O(N)。

链表因为元素不连续,而是靠指针指向下一个元素的位置,所以不存在数组的扩容问题;如果知道某一元素的前驱和后驱,操作指针即可删除该元素或者插入新元素,时间复杂度 O(1)。但是正因为存储空间不连续,你无法根据一个索引算出对应元素的地址,所以不能随机访问;而且由于每个元素必须存储指向前后元素位置的指针,会消耗相对更多的储存空间。

数据结构的基本操作:遍历 + 访问(就是存储与修改数据,即增删查改)

数据结构种类很多,但它们存在的目的都是在不同的应用场景,尽可能高效地增删查改

典型的通过迭代,进行遍历访问:

void traverse(int[] arr) {
    for (int i = 0; i < arr.length; i++) {
        // 迭代访问 arr[i]
    }
}

链表遍历框架,兼具迭代和递归结构:

/* 基本的单链表节点 */
class ListNode {
    int val;
    ListNode next;
}

void traverse(ListNode head) {
    for (ListNode p = head; p != null; p = p.next) {
        // 迭代访问 p.val
    }
}

void traverse(ListNode head) {
    // 递归访问 head.val
    traverse(head.next);
}

基本的N叉树结构(更下一个section中实现的四叉树非常的像):

/* 基本的 N 叉树节点 */
class TreeNode {
    int val;
    TreeNode[] children;
}

void traverse(TreeNode root) {
    for (TreeNode child : root.children)
        traverse(child);
}

基于图像像素强度来提取其四叉树结构

虽然整个系列还没学习完,但是正好最近项目需要用到提取图像的四叉树结构。

如下图所示。左图为图像,右图为其对应的深度图。根据对应的像素值或深度值获取对应的四叉树结构。

In most of the cases, pixels that share the same quadtree block in the intensity image also belongs to the same block in the depth map, but not vice versa. This means that pixels that are within the same quadtree block of the intensity image share similar intensity values and depth values.

 此处尝试实现图(a)的效果。

实现的代码如下:

Tree.hpp


#ifndef _TREE_HPP_
#define _TREE_HPP_

#include <opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <queue>

// GLM Mathemtics
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <glm/gtc/type_ptr.hpp>
#include "glm/ext.hpp"

// Struct data of TreeNode
template <class T,int Child_num>
struct TreeNode
{
	glm::vec3 _data;//color(像素值)
	T _min;//left top node 
	T _max;//right bottom node

	TreeNode<T, Child_num>* _children[Child_num]; //0 1 2 3 . the 4 children node in this Parent's node

	TreeNode()
	{
		_data = glm::vec3(0, 0, 0);
		for (auto i = 0; i < Child_num; i++)
		{
			_children[i] = NULL;
		}
	}

	~TreeNode()
	{
		for (int i = 0; i < Child_num; i++)
		{
			delete _children[i];
		}
	}
};

//Class of the Tree
template <class T, int Child_num>
class Tree
{
public:
	Tree() : _root(nullptr)
	{
	}

	~Tree()
	{
		delete _root;
	}


	//Build the Tree
	TreeNode<T, Child_num>* BuildTree(int depth, const T min, const T max, const int _minwidth, const int _minheight, const double _threshold)//输入为深度,(0,0)与(列、行)
	{
		depth = depth - 1;

		//返回空指针
		if (depth < 0) return nullptr;//返回空指针,当前构建的子树为空

		//否则,先将此子树新建一个root元素,根据四个子树来更新root
		TreeNode<T, Child_num>* root = new TreeNode<T, Child_num>;//初始化时_children为空的
		T mid = T((min.x + max.x) / 2, (min.y + max.y) / 2);//获取中值

		//更新max min(每次进入,当前的就会成为root,再有childern就是root,没有children就是leaf。而对于root需要更新_data,_min,_max)
		root->_max = max;
		root->_min = min;

		// 看看是否满足一定的条件。只有满足的情况下才会进行子树的更新
		cv::Mat tempMean, tempStddv;
		double MEAN, STDDV;// mean and standard deviation of the flame region
		//获得此时root对应的区域
		cv::Mat flameRectRegion(image_data, cv::Rect(int(min.x), int(min.y), int(max.x) - int(min.x), int(max.y) - int(min.y)));
		cv::cvtColor(flameRectRegion, flameRectRegion, cv::COLOR_RGB2GRAY);//转换为黑白
		cv::meanStdDev(flameRectRegion, tempMean, tempStddv);
		MEAN = tempMean.at<double>(0, 0);//均值
		STDDV = tempStddv.at<double>(0, 0);//方差
		// std::cout<<"STDDV="<<STDDV<<std::endl;

		double STDDV_threshold=_threshold;//方差就是数据的分散程度(偏离均值)
		if(STDDV>STDDV_threshold && (max.x-min.x>=2*_minwidth || max.y-min.y>=2*_minheight))
		{
			//更新四个子树
			root->_children[0] = BuildTree(depth, min, mid,_minwidth, _minheight,_threshold);
			root->_children[1] = BuildTree(depth, T(mid.x, min.y), T(max.x, mid.y),_minwidth, _minheight,_threshold);
			root->_children[2] = BuildTree(depth, T(min.x, mid.y), T(mid.x, max.y),_minwidth, _minheight,_threshold);
			root->_children[3] = BuildTree(depth, mid, max,_minwidth, _minheight,_threshold);

		}	

		// //更新data
		if (root->_children[0] != NULL)//当子树不为空,就是当前为root
		{
			//the root data is the average num of the 4 children's data.
			root->_data.x = (root->_children[0]->_data.x + root->_children[1]->_data.x + root->_children[2]->_data.x + root->_children[3]->_data.x) / 4;
			root->_data.y = (root->_children[0]->_data.y + root->_children[1]->_data.y + root->_children[2]->_data.y + root->_children[3]->_data.y) / 4;
			root->_data.z = (root->_children[0]->_data.z + root->_children[1]->_data.z + root->_children[2]->_data.z + root->_children[3]->_data.z) / 4;
		}
		else//如果为空,就是没有进一步延伸了,那么就用原图赋值
		{
			cv::Mat my_mat(image_data, cv::Rect(int(min.x), int(min.y), int(max.x) - int(min.x), int(max.y) - int(min.y)));//(beginx beginy lenx leny)

			cv::Mat channels[3];
			split(my_mat, channels);//get the 3 channels of the Rect and RGB is the mean of the different channels of the Rect
			root->_data.x = cv::mean(channels[0]).val[0];//求取算术平均值
			root->_data.y = cv::mean(channels[1]).val[0];
			root->_data.z = cv::mean(channels[2]).val[0];
			//cout << glm::to_string(root->_data) << endl<<endl;
		}

		return root;
	}

	TreeNode<T, Child_num>* _root;
	cv::Mat image_data;
};


typedef TreeNode<glm::vec2,4> QuadTreeNode;

typedef Tree<glm::vec2,4> QuadTree;


#endif /* _TREE_HPP_ */

调用代码块

void convert_quadtree_image(const cv::Mat& intensity_image, cv::Mat& quadtree_image_result)
{
    QuadTree* QuadTree_handler = new QuadTree;

    QuadTree_handler->image_data = event_intensity_image.clone();
    int iterations=_iterations;//iterations(最深可以分割为多少)

    ROS_WARN("Start build the Quadtree!");
	  QuadTreeNode* Root = QuadTree_handler->BuildTree(
                                                      iterations, 
                                                      glm::vec2(0, 0), 
                                                      glm::vec2(QuadTree_handler->image_data.cols, QuadTree_handler->image_data.rows), 
                                                      _minwidth, _minheight, _threshold);
    ROS_WARN("Build the Quadtree end!");

    //out all the data in the QuadTree
    // std::queue<QuadTreeNode*> S;
    std::deque<QuadTreeNode*> S;
	  S.push_back(Root);//在末尾插入一个元素
    while (!S.empty())
    {

      for (int i = 0; i < 4; i++)
      {
        if (S.front()->_children[i] != nullptr)//若这个children不是空的话,就会插入
        {
            S.push_back(S.front()->_children[i]);
        }
      }

      //if the node is the leaf node , update the quadtree_image_result image. 
      //using the data: _min _max _data
      if (S.front()->_children[0] == nullptr 
         && S.front()->_children[1] == nullptr
         && S.front()->_children[2] == nullptr
         && S.front()->_children[3] == nullptr)//如果它的children都是空的,就证明当前的node不是root,而是leaf,那么就对quadtree_image_result进行赋值
      {
        // for (int i = S.front()->_min.x; i < S.front()->_max.x; i++)
        // {
        //   for (int j = S.front()->_min.y; j < S.front()->_max.y; j++)
        //   {
        //     if (i >= 0 && i < event_intensity_image.cols && j >= 0 && j < event_intensity_image.rows)//保证不会越界
        //     {
        //       quadtree_image_result.at<cv::Vec3b>(j, i)[0] = S.front()->_data.x;//B
        //       quadtree_image_result.at<cv::Vec3b>(j, i)[1] = S.front()->_data.y;//G
        //       quadtree_image_result.at<cv::Vec3b>(j, i)[2] = S.front()->_data.z;//R

        //     }
        //   }
        // }

        // Add a black border around the given image quadrant.
        if(_set_border)
        {
          cv::rectangle(quadtree_image_result, cv::Point(S.front()->_min.x, S.front()->_min.y), cv::Point(S.front()->_max.x, S.front()->_max.y), cv::Scalar(0, 0, 0), 1, 1, 0);
        }

      }

      S.pop_front();//删除第一个元素
    }

    // delete QuadTree_handler;
    // delete Root;


}

效果如下:

Experimental Record——Quadtree

对于图像相似度上,目前仅仅采用了求小区域内的方差,方差小于一定的阈值则认为该区域不需要再进一步分割。但是感觉这样设置并不是很好,跪求有想法的小伙伴给些建议哈~

参考资料

《算法秘籍》和《刷题笔记》。下载链接:https://pan.baidu.com/s/1PoG0Zxy7H64aXUM-Gj0UuA?pwd=541i 提取码:541i

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

算法学习笔记 的相关文章

  • UC/OS-III 消息队列

    消息队列 一 消息队列基本概念讲解1 消息队列基本概念2 消息池2 1 消息池概念2 2 消息池初始化2 3 消息队列的运作机制2 4 消息队列的阻塞机制2 5 消息队列的应用场景 二 消息队列创建步骤1 定义消息队列2 创建消息队列 三
  • Altium Designer绘制stm32f103c8t6最小系统原理图

    文章目录 前言芯片封装自定义封装原理图绘制总结 前言 本文提供了初学者绘制stm32最小系统 xff0c 同时初学者的同学可以跟着小白学习绘制原理图哦 芯片封装 提示 xff1a 下载安装好Altium Designer之后才能进行以下操作
  • Jetson Xavier NX安装opencv3.x以及踩过的坑

    Jetson Xavier NX默认安装的是opencv4 x xff0c 在很多项目中其与opencv3 x xff0c 其中opencv3与opencv4中有部分函数是完全不同的 xff08 例如点一些Point的定义 xff0c Cv
  • 【导航算法】无人机路径跟踪L1导航算法

    L1导航算法是非常经典的非线性无人机路径跟随算法 xff0c 最早由MIT于2004年提出 xff0c 论文为 A New Nonlinear Guidance Logic for Trajectory Tracking xff0c 其导航
  • 【人工智能】1.问题求解:状态空间图和盲目搜索

    什么是问题求解 xff1f 问题求解可以理解为利用知识 xff0c 尽可能有效的找到问题的解 xff0c 或者最优解的过程 xff0c 主要包括 xff1a 1 xff09 问题描述方法 xff1a 状态空间法 xff0c 与或树表示法 x
  • 【路径规划】A*三维全局路径规划(附Python实现源码)

    1 A 启发式搜索 A 算法介绍 xff1a 启发式搜索算法 xff0c 除了wiki之外比较全的一个参考资料 xff1a A 启发式搜索算法详解 人工智能 这里是用Python写了一个简单的路径规划例子供参考 2 Matplotlib库
  • 【数据结构】3.图、最小生成树

    一 图的基本概念 1 什么是图 图表示一种多对多的关系 图包括 xff1a 1 xff09 一组顶点 xff1a 通常用 V Vertex 表示顶点集合 2 xff09 一组边 xff1a 通常用 E Edge 表示边的集合 3 xff09
  • 【NLP】主题模型文本分类

    自然语言处理之主题模型文本分类 LDA主题模型 1 主题模型 xff08 Topic Model xff09 主题模型是以非监督学习的方式对文集的隐含语义结构进行聚类的统计模型 主题模型主要被用于自然语言处理中的语义分析和文本挖掘问题 xf
  • 【NLP】Word2Vec模型文本分类

    自然语言处理之词向量模型聚类分析 Word Embedding 词嵌入向量 Word Embedding 是NLP里面一个重要的概念 xff0c 我们可以利用Word Embedding一个单词固定长度向量的表示一种表示形式 Word Em
  • (6.1)Kubernetes的Sevice服务间调用

    1 场景1 选择器 xff08 selector xff09 在k8s上运行了两个pod replicas 2 我们通过Service来整合这两个pod 在创建 Service 时 xff0c 就要通过选择器 xff08 selector
  • 【飞控算法】四旋翼飞行器控制原理与设计入门

    从动力学建模和几个四旋翼核心算法角度分析半自主飞控系统的建立 xff0c 即实现传统四旋翼的姿态控制和高度控制的过程 xff0c 文章主要借鉴了北航多旋翼设计课程 正点原子minifly微型四旋翼的资料 四旋翼无人飞行器设计 清华出版社 x
  • 【开源飞控】匿名飞控TI版解析(1)

    准备电赛的飞控题 xff0c 买来了匿名的飞控学习一下 xff0c 这里整理了一下匿名飞控中比较关键的几部分 xff0c 学习了一下原理 xff0c 然后代码解读都写注释里了 xff0c 篇幅较长 目录 一 遥控器信号接收 1 代码解读 2
  • 【开源飞控】匿名飞控TI版解析(2)

    因为电赛 xff0c 买来匿名飞控研究一下 xff0c 感觉相比其他的一下开源飞控 xff0c 易开发性和稳定性都是比较好的 xff0c 但就是比较贵 匿名TI版飞控是从32版改过来的 xff0c 硬件上就换了个芯片 xff0c 程序里也有
  • ROS中机器人与电脑的网络配置

    打开网络连接菜单 xff1a 选择网络 xff0c 输密码 并连接 xff08 以350502为例 xff0c 这里我就不连进去这个WiFi了 xff0c 还是连回402 xff0c 意思到了就行 xff09 查看连接信息 xff08 GU
  • ROS学习笔记之——gazebo仿真

    本博文是本人学习gazebo的学习记录 Gazebo是一款3D仿真器 xff0c 支持机器人开发所需的机器人 传感器和环境模型 xff0c 并且通过搭载的物理引擎可以得到逼真的仿真结果 Gazebo是近年来最受欢迎的三维仿真器之一 xff0
  • ROS学习笔记之——gazebo模型(URDF)

    最近在学习gazebo仿真 在之前博文里面 学习笔记之 gazebo仿真 xff0c 在介绍深度相机的ROS插件的时候 xff0c 涉及到了gazebo里面的一些模型文件架构的定义 本博文主要是对模型文件的定义做学习记录 目录 Model
  • ROS学习笔记之——ROS与gazebo之间的控制关系

    之前博客 学习笔记之 gazebo仿真 有采用用ricz来监控gazebo中的机器人 本博文对其进行深入的介绍 本文以 ROS学习笔记之 gazebo模型 xff08 URDF xff09 中的RRBot为例 目录 ros control
  • ROS学习笔记之——移动机器人的导航

    之前博客 ROS学习笔记之 激光雷达SLAM建图 已经介绍过如何通过激光雷达SLAM建图了 xff0c 本博文讲一下ROS机器人的导航相关 目录 导航相关理论介绍 导航的概述 costmap AMCL Dynamic Window Appr
  • ROS学习笔记之——EKF (Extended Kalman Filter) node 扩展卡尔曼滤波

    最近正好准备想试试利用EKF实现多传感器的融合 但没想到本身ROS里面就已经有EKF的功能包了 这个包用于评估机器人的3D位姿 xff0c 使用了来自不同源的位姿测量信息 xff0c 它使用带有6D xff08 3D position an
  • ROS学习笔记之——路径规划及avoid obstacles

    之前博客 ROS学习笔记之 Navigation Stack及路径规划 介绍了navigation stack xff0c 其中涉及到的amcl 路径规划以及避障还没有详细的展开 目录 AMCL 路径规划 全局路径规划中的地图 栅格地图 x

随机推荐

  • 【LeetCode】LCS最长公共子序列

    最长公共子序列 题目描述思路分析递归结构算法实现输出最长子序列算法实现 题目描述 思路分析 设A 61 a0 xff0c a1 xff0c xff0c am xff0c B 61 b0 xff0c b1 xff0c xff0c bn xff
  • ROS实验笔记之——基于ArUco Marker来估算camera的位姿

    最近在做课程的project的时候 xff0c 实现了基于Marker的3D 2D的相机位姿估计算法 写下本博文作为学习记录用 xff5e 先看看整体的实现效果 基于ArUco Marker来估算camera的位姿 目录 安装ArUco A
  • ROS实验笔记之——基于Prometheus自主无人机开源项目的学习与仿真

    最近在公众号上看到Prometheus无人机的资料 xff0c 发现里面开源了很好的无人机的仿真环境 xff0c 并且有很好的教程 而本人正好在上 Introduction to Aerial Robotics 的课程 xff0c 正好搭建
  • ROS实验笔记之——基于Prometheus的控制模块

    之前博客 ROS实验笔记之 基于Prometheus自主无人机开源项目的学习与仿真 已经介绍过Prometheus项目 本博文继续学习其中的控制模块 xff5e ROS无人机仿真之轨迹跟踪 ROS无人机仿真之航点跟踪 目录 仿真功能启动脚本
  • 学习笔记之——VIO与VINS-Mono

    本博文为本人学习VIO与VINS的学习笔记 xff0c 部分内容来源于网上的资料 xff0c 文末给出参考 本博文仅仅为本人学习记录用 xff0c 不作任何商业用途 先给出复现的demo 视觉惯导紧融合VINS Mono的复现 目录 VIO
  • ROS学习笔记之——PX4开发初入门

    PX4 是一款专业级飞控 它由来自业界和学术界的世界级开发商开发 xff0c 并得到活跃的全球社区的支持 xff0c 为从竞速和物流无人机到地面车辆和潜水艇的各种载具提供动力 目录 基本概念 QGroundControl xff08 QGC
  • ROS实验笔记之——PX4仿真

    之前博文 ROS学习笔记之 PX4开发初入门 ROS学习笔记之 PX4生态系统 已经对PX4做了一些基本的学习 xff0c 并且在mac上搭建了px4开发环境 本博文在ubuntu下对PX4进行一些基本的仿真学习 xff5e 之前在做无人机
  • ROS学习笔记之——基于QGC的PX4在线仿真调PID

    之前博客 ROS实验笔记之 PX4仿真 已经介绍了PX4编译及QGC的安装 xff0c 本博文进一步的基于QGC进行仿真控制 基于QGC的PX4在线仿真 首先运行基于px4的gazebo仿真 make px4 sitl default ga
  • ROS学习笔记之——PX4位置环PID控制

    之前博客 ROS学习笔记之 基于QGC的PX4在线仿真调PID 已经学习了如何在仿真环境下 xff0c 调节PID位置环与姿态环 本博文细细的看一下PX4位置环PID调节 如下图所示 输入的是期望的位置 xff0c 然后外环是P控制 而内环
  • ROS实验笔记之——JCV-450无人机初入门

    最近测试了阿木实验室的JCV 450无人机 本博文记录本人使用及实验的过程 目录 基本设置 注意点 飞行前调试 一 加载固件 二 加载参数 三 校准传感器 四 遥控器校准 五 飞行模式 六 电调校准 七 检查参数 QGC的使用 首先看一下飞
  • ROS学习笔记之——MSCKF

    原理 精度方面 xff0c MSCKF应该与graph optimazation差不多 xff0c 但是其对算力要求没有那么高 xff5e http www xinliang zhong vip msckf notes header n13
  • FreeRTOS调试神器分享

    在B站看到的大神的分享 xff0c 记录一下 xff1a FreeRTOS调试神器 xff01
  • ROS实验笔记之——Intel Realsense l515激光相机的使用

    最近实验室购买了Intel Realsense l515相机 本博文记录使用过程 驱动安装 先到官网安装驱动 xff1a https github com IntelRealSense realsense ros https github
  • ROS实验笔记之——VINS-Mono在l515上的实现

    之前博客 ROS实验笔记之 Intel Realsense l515激光相机的使用 实现了用l515运行RTABmap xff0c 本博文试试在l515上实现vins mono 首先需要将vins mono配置成功 xff0c 如果出现像之
  • ROS学习笔记之——EVO工具的使用

    之前博客 ROS学习笔记之 VICON的使用 用vincon获得了机器人的真实轨迹 xff0c 并且通过amcl可以获得了机器人的定位结果 xff0c 下面通过EVO包来表征performance xff08 本文不像网上大部分博客复制粘贴
  • ROS实验笔记之——无人机在VICION下试飞

    之前博 ROS实验笔记之 自主搭建四旋翼无人机 ROS实验笔记之 JCV 450无人机初入门 ROS实验笔记之 基于Prometheus自主无人机开源项目的学习与仿真 已经介绍过一些无人机的仿真 xff0c 试飞 本博文基于vicion实现
  • ROS学习笔记之——无人机PID调参过程记录

    问题描述 最近搭建了一架无人机如下 飞行demo self design Quadrotor flighting test2 但是在手飞过程 xff0c 发现陀机很烫 应该是由于pid没调 xff0c 然后机臂抖动导致的发热 接下来 xff
  • 基于可见光通信的室内定位与导航及物联网应用

    本人从2014年起从事可见光通信 xff08 Visible Light Communication VLC xff09 相关研究 xff0c 主要包括 xff1a 基于光电二极管 xff08 PD xff09 图像传感器 xff08 ca
  • ROS实验笔记之——FAST-LIVO

    最近IROS22的FAST LVIO源码开源了 xff0c 笔者赶紧测试一下 源码链接 xff1a GitHub hku mars FAST LIVO A Fast and Tightly coupled Sparse Direct LiD
  • 算法学习笔记

    最近无意中看到一个算法的网站 xff0c 看着感觉介绍得挺系统的 xff0c 虽然做算法以及指导学生开发各种算法这么些年了 xff0c 却没有真正系统的学习过 xff08 几年前啃过算法导论 xff0c 但是苦于那蹩脚的中文翻译 xff0c