自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Summit的专栏

加油加油

  • 博客(49)
  • 资源 (1)
  • 收藏
  • 关注

原创 阿里巴巴自动驾驶三维点云分割PointNet实现

阿里巴巴点云分割(PointNet)项目地址:https://github.com/Summit11/PointNet_AliData本项目是点云分割模型PointNet在DataFountain平台上阿里巴巴自动驾驶三维点云分割比赛 https://www.datafountain.cn/competitions/314/details/rule 数据集上实现的代码。模型和代码结构基本跟Po...

2019-12-24 22:41:55 1436 2

原创 机器学习中的L0、L1与L2范数

机器学习中的L0、L1和L2范数一般来说,监督学习一般可以看作最小化下面的目标函数。 ω∗=argminω∑iL(yi,f(xi;ω))+λΩ(ω)ω∗=arg⁡minω⁡∑iL(yi,f(xi;ω))+λΩ(ω)\boldsymbol{\omega} ^* = \mathop{\arg\min}_{\omega} \mathrm{\sum_{i}}L(y_i,f(\textbf{x}_i...

2018-02-22 17:30:22 849

原创 JavaScript作用域与作用域链

变量作用域一个变量的作用域是变量被定义的这个区域。全局变量具有全局作用域,在JavaScript代码中的任何地方都是有定义的。在函数内部定义的变量具有局部作用域,,同名的局部变量比全局变量具有更高的优先级。var scope = "global";function checkscope() { var scope = "local"; return scope;}console.

2017-10-31 09:40:49 368

原创 JavaScript事件对象

DOM中的事件对象触发DOM某个事件时,浏览器会将一个event对象传入到事件处理程序中,这个对象中包含了所有与事件有关的信息。如下显示事件类型的代码所示:<body><input id="myBtn" type="button" value="Click me"><script> var btn = document.getElementById('myBtn'); btn.o

2017-10-31 09:36:59 653

原创 JavaScript的绑定方法bind

bind语法fun.bind(this,arg1,arg2,…) JavaScript函数调用bind方法会返回一个新的方法,新方法的this会绑定传入对象。bind应用实例创建绑定函数a = 1;var module = { a : 2, getA : function () { return this.a; }}console.log(module

2017-10-31 09:36:34 723

原创 Java实现二叉搜索树

Java实现二叉搜索树具体细节不再介绍,原理以及性能分析直接参见《算法》,个人感觉精髓之处在于递归返回过程中向上更新结点的步骤。打个比方,要删除一个结点,发现要删的结点小于当前结点,于是需要进入当前结点左子树进行递归删除,删除结束则返回一个新的左子树给当前结点,在修正该结点的子树结点数。代码如下:package main;public class BSTree<Key extends Compar

2017-10-31 09:35:33 546

原创 TopK---返回第K小(大)的数字

TopK—返回第K小(大)的数字给定一个数组,返回数组中第K小(或者第K大)的数字,比较经典的TopK问题。快排选择基于快排的思想,partition函数每次将切分元素放置到正确位置pos:当我们需要的K>pos时,代表我们需要再从(pos,right]中查找;当K最小(大)堆基于堆排序的思想,当我们需要查找第K小(大)的数字时,我们将数组前K个元素构建成最大(小)堆,则堆顶元素是前K个数字中最大的

2017-10-29 15:12:31 969

原创 g++命令用法介绍

g++命令用法介绍首先,要编译运行一个C++源文件,g++的编译流程是这样的:预处理 —> 编译 —> 汇编 —> 链接1.预处理命令:g++ -E 仅做预处理,不进行编译、汇编和链接。得到.l格式文件如: g++ -E main.cpp -o main.l2.编译命令:g++ -s 编译到汇编语言,不进行汇编和链接。得到.s格式文件如:g++ -s main.l -o main.s3.汇编命令:g

2017-10-29 15:11:28 2492

原创 cmake基本用法

cmake基本用法我们编写一个C++单例类,使用cmake构建项目,主要是为了记录一下cmake的基本用法。 首先项目文件夹为DemoProject,我们创建一个main.cpp作为我们的主文件,创建一个子文件夹Singleton,在Singleton中创建Singleton.h和Singleton.cpp作为我们的单例类。代码如下,很简单,就是获取一个单例然后调用它的函数:main.cpp#in

2017-10-29 15:11:02 1400

原创 C++ this指针与const成员函数

C++ this指针与const成员函数this指针每个对象拥有一个this指针,通过this指针来访问自己的地址。this指针并不是对象的一部分,this指针所占的内存大小是不会反应在sizeof操作符上的。this指针只能在成员函数中使用,全局函数、静态函数都不能使用this指针**在普通成员函数中,this是一个指向非const对象的const指针(如类类型为Student,那么thi

2017-10-29 15:09:54 5651 2

原创 C++ KMP算法

C++ KMP算法差不多把《算法》这本书看完了,最后一章字符串比较常见的重要的东西应该是子串匹配的KMP方法。讲道理书上讲的比较复杂,也可能KMP本来理解就不容易,从网上找了几篇博文介绍的比较清晰,包括配图,可以参考。 http://www.cnblogs.com/c-cloud/p/3224788.html (这篇参考了阮一峰的) http://www.cnblogs.com/c-cloud

2017-10-29 15:09:23 7076 1

原创 C++ const char\*与char\* const

C++ const char*与char* constC++里的const char*和char* const一直很容易混,其实只要理解了const到底修饰的哪个,就会豁然开朗。或者就按书中所写的,倒着读来记忆。 const char *p —> p是一个指针,指向const char char* const p —> p是一个常量,指向char的指针常量 代码示例:char a = 'a'

2017-10-29 15:08:34 2690 1

原创 C++中的i++与++i

C++中的i++与++iC++中的++i与i++主要有两个区别: 1. i++返回的是原来的值,++i返回的是i+1后的值 2. i++不能作为左值,而++i可以作为左值 第一条比较容易理解,我们重点来看一下第二条,为什么i++不能作为左值,而++i可以。 看了它们各自的实现其实也就一目了然:// 前缀形式:int& int::operator++() //这里返回的是一个引用形式,就是说

2017-10-29 15:08:09 1153

原创 C++有向带权图单源最短路径

C++有向带权图单源最短路径参考《算法》最短路径章节编写实现代码,包括无负权边无环的Dijkstra算法,也包括可以处理一般性问题的Bellman-Ford算法。同时采用泛型编程,图节点可以实现任意类型,具体原理参见《算法》最短路径章节,实现代码如下所示:#include<iostream>#include<algorithm>#include<queue>using namespace st

2017-10-29 15:07:28 2895

原创 cublasSgemm详解

cublasSgemm函数详解cublasSgemm是CUDA的cublas库的矩阵相乘函数,由于cublas中矩阵的存储是列优先,所以cublasSgemm函数的参数容易让人误解,防止忘记,留笔记如下。首先,在一般的C/C++程序中,我们开辟一段连续的内存,放入1,2,3,4,5,6,7,8,9,指定矩阵行和列均为3,则可表示矩阵[1,2,3 ; 4,5,6 ; 7,8,9],然而,在使用cubl

2017-10-28 19:39:06 15872 4

原创 C++无向带权图与最小生成树

C++无向带权图与最小生成树参考《算法》一书,C++语言基于邻接表实现了无向带权图以及Prim算法得到图的最小生成树。图的实现在无向图的基础上增加权重即可,可参考《C++邻接表与图》。Prim算法简要说来,可写成如下伪代码:for(int i=0;i<V;i++){ PrimVisit(i); //插入点并更新权重,同时得到更新后距离图最近的点}具体原理不再详述,可参考《算法》的讲解,此处记

2017-10-27 19:55:20 5332

原创 C++位运算

C++位运算总结一下C++中位运算的用法。&amp;(与运算)举例 11&amp;3 = 3 00001011&amp; 00000011= 00000011= 3常用例子 我们判断是否被2整除,一般写成if(n%2==0),使用位运算符也可写作if(n&amp;1==0)|(或运算)举例 11|3 = 11 0000...

2017-10-27 19:54:56 333

原创 自顶向下以及自底向上排序

自顶向下以及自底向上排序具体原理不再介绍,参考《算法》,书上使用Java实现,此处写一下C++版本,代码如下://// main.cpp// algrithom//// Created by 岳wenlong on 2017/6/4.// Copyright © 2017年 岳wenlong. All rights reserved.//#include <iostream>#

2017-10-27 19:54:33 1254

原创 堆排序

堆排序C++实现的堆排序,分为三个函数实现:堆调整函数:保持最大/最小堆堆构建函数:利用堆调整函数创建一个最大/最小堆堆排序函数:每次取堆顶元素交换至数组最后,并将size减一,然后调整堆顶保持最大/最小堆堆调整函数://调整堆为数组a,需要调整的结点序号为i,堆大小为sizevoid HeapAdjust(int* a, int i, int size){ int left =

2017-10-27 19:54:10 176

原创 C++内存空间

C++内存空间一个C++程序编译后占用的内存分为如下几个部分: 栈:由编译器自动分配释放,存放函数的参数值,局部变量的值。在一个进程中,位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数的调用。 堆:由程序员分配和释放,若程序员不释放,则程序结束时被OS回收。存放由new,malloc分配的内存,可动态扩展和收缩。 全局区(静态区):全局变量和静态变量的存储是放在一起的,初始化的全局变量

2017-10-27 19:53:37 4321

原创 C++模板类与模板函数

C++模板类与模板函数C++中的泛型编程,模板类与模板函数用法,包括模板类外定义成员函数用法如下代码所示。#include<iostream>#include<vector>#include<string>using namespace std;template <class T1,class T2>class Student { //模版类,具有两个类型T1,T2

2017-10-27 19:53:16 403

原创 C++邻接表与有向图

C++邻接表与有向图参照《算法》实现了C++邻接表表示的有向图,实现了书中有向图的各种算法,包括判断有向图可达性,寻找有向图中的环,顶点的先序、后序和逆后序排列以及Kosaraju算法寻找强连通域。具体算法不再记录,直接参考《算法》有向图一章,C++代码及注释如下:#include<iostream>#include<queue>#include<algorithm>#include<map>

2017-10-27 19:52:43 2773

原创 C++邻接表与无向图

C++邻接表与无向图参考《算法》,采用邻接表实现图结构,实现DFS以及BFS等算法。具体原理参考书本,此处给出C++版本实现。#include<iostream>#include<queue>#include<algorithm>#include<map>using namespace std;/* 顶点 中间节点 VNode ENode 0 | A --> 2(C)

2017-10-27 19:52:13 2618 1

原创 C++拷贝控制与资源管理

C++拷贝控制与资源管理参考《C++ Primer》P452 拷贝控制与资源管理当一个类需要自定义析构函数,那么它几乎肯定也需要定义拷贝构造函数和拷贝复制运算符。 如下例子:class HasPtr {public: HasPtr(const std::string &s = std::string()): ps(new std::string(s)),i(0) {} ~HasPt

2017-10-27 19:51:44 323

原创 优先队列

优先队列优秀队列是一种数据结构,用数组保存元素并按照一定条件排序,以高效地(对数级别)实现删除最大元素和插入元素的操作。适用于输入量可能巨大,甚至被认为输入是无限的时候。堆数据结构二叉堆能够很好地实现优先队列地基本操作。优先队列由一个基于堆的完全二叉树表示。 当一棵二叉树地每个结点都大于等于它地两个子结点时,它被称为堆有序。 插入元素:我们将新元素加到数组末尾,增加堆地大小让这个新元素上浮到合适

2017-10-27 19:50:57 163

原创 判断n以内所有素数

判断n以内所有素数偶尔会碰到跟素数相关的题目,需要我们快速找到n以内的所有素数,这里记录一种效率比较高的方法。 所有大于2的偶数都不是素数,因此我们从3开始找,每次步进2。 判断一个数是否为素数的方法是:判断是否存在小于等于根号n的数能整除n,存在则不是素数,不存在则确定是素数。代码如下:#include<iostream>#include<vector>#include<cmath>us

2017-10-26 15:49:29 973

原创 模板实参推断和引用以及move和forward详解

模板实参推断和引用以及move和forward详解从左值引用函数参数推断类型当一个函数的参数是一个左值引用时,我们只能传递给它一个左值,实参可以是const类型或非const类型,实参是const,则T被推断为const。 例如:template&lt;typename T&gt; void f1(T&amp;);f1(i); //实参为int,则T推断为intf1(c...

2017-10-26 15:49:09 613

原创 快速排序

快速排序最常用的排序算法,时间复杂度最好为O(nlogn),最差为平方级。具体的原理不再此介绍。此处记录一下代码实现以及提升快排性能的方法。切换插入排序对于小数组来说,插入排序速度很快,因此可以根据数组大小选择排序算法,长度小于定值时选择插入排序,大于时选择快排。if(hi<lo+M) {Insertion.sort(a,lo,hi); return;}三取样切分当数组中重复元素较多时,实际上进行了

2017-10-26 15:48:43 235

原创 剑指Offer-栈

剑指Offer-栈此处两道题为《剑指Offer》中举例让抽象问题具体化的21和22题,记录一下实现思路。题1,包含min函数的栈:定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数思路:除了正常存入数据的普通栈外,定义一个辅助栈,辅助栈中每次压入当前最小值。例如压入3、4、2、1,首先普通栈压入3,当前最小值为3,压入辅助栈;普通栈压入4,当前最小值还为3,压入辅助栈;普通栈压入2

2017-10-26 15:43:55 192

原创 剑指Offer-旋转数组的最小数字

旋转数组的最小数字参见《剑指Offer》P66 题目描述: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。思路: 根据题意,将一个数组旋转之后,变成了两个独立的非降

2017-10-26 15:43:28 146

原创 剑指Offer-斐波那契数列以及跳台阶问题

剑指Offer-斐波那契数列以及跳台阶问题斐波那契数列:1,1,2,3,5…… 规律:f(n) = f(n-1) + f(n-2) 题目描述: 输入一个整数n,请你输出斐波那契数列的第n项。 n<=39分析:题目很简答,递归也行非递归也行,代码如下:#include<iostream>#include<algorithm>using namespace std;/*int Fibonacc

2017-10-26 15:43:11 218

原创 剑指Offer--二维数组的查找

剑指Offer–二维数组的查找题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 思路: 题目给定二维数组按行递增,按列递增。 1. (错误)有一种很自然的想法就是分别按行和列定位,细想一下这是不行的:例如按行定位时,目标元素大于第5行行首元素,小于第6行行首元素,仅仅

2017-10-26 15:42:50 177

原创 重新构建树

重新构建树题目: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路: 首先要知道树的前序、中序和后序遍历,前中后都是对于根结点来说的。前序遍历:先访问根结点,再访问左子树,最后访问右子树中序遍历:先访问左子

2017-10-26 15:42:27 443

原创 剑指Offer-替换空格

剑指Offer-替换空格题目: 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。思路: 双指针法(此处是记录索引),首先遍历数组获取空格个数,每一个空格都要被替换成“%20”,则一个空格代表数组长度加2,首先计算数组需要增加的长度为2*空格个数。 一个索引p1指向数组尾部,另外一个p2为p

2017-10-26 15:42:05 151

原创 返回数组指针

返回数组指针因为数组不能被拷贝,所以函数不能返回数组。不过,函数可以返回数组的指针或者引用。其中最直接的方法就是使用类型别名。typedef int arrT[10]; //arrT是一个类型别名,表示含有10个整型数的类型using arrT = int[10]; //同上的等价声明arrT* func(int i); //函数func返回一个指针,指针指向一个含有10个整型数的数组声明

2017-10-26 15:41:10 1663

原创 基础排序算法

基础排序算法本章学习并介绍三种基础排序算法,选择排序、插入排序以及希尔排序选择排序选择排序的思想很简单,首先从数组的第一个数开始,将第一个数与其后的所有数字比较,找到最小的一个数,放到第一个位置。然后再从数组的第二个数开始,与其后所有数字比较,找到最小的一个,放到第二个位置,以此类推…… 代码如下:void selectSort(int r[],int n) //选择排序{ for

2017-04-21 00:07:51 254

原创 Dijkstra算法学习

Dijkstra算法Dijkstra算法是求解有向图最短路径的经典算法,计算从一个指定的初始结点到其他各个结点最短路径。它的理论基础就是一条最短路径的子路径也一定是最短的。实现如下:将所有结点分为两个集合,一个命名为S集,一个命名为U集。S集中的点是我们已知其最短路径的点,U集中的点是我们还未知其最短路径的点。因此初始时刻,S集中只有一个我们选定的起始点,U集中是除了起始点意外的所有点;而最终时刻

2017-04-19 23:19:07 569

原创 Mac下Laravel的Homestead环境配置

Mac下Laravel的Homestead环境配置准备开始学PHP后端,在看完PHP语法以及PHP的MVC设计模式以后,准备开始学习PHP的主流框架Laravel,Laravel准备了一个万事俱备的虚拟环境Homestead,配置一下用起来。安装virtualbox和vagrant以及ssh-key这个不多说,下载完安装就是了,没什么特别的。ssh-key自行百度搞一下就好了。 测试一下看看装成功

2017-04-06 22:58:32 3202

原创 .dat文件三维点云可视化

我们做点云重建,很多情况下激光扫描仪回传的点云数据是保存为.txt或者.dat的,而并非PCL所支持的PCD格式,这个时候就需要我们自行写代码进行读取.dat文件读取我们的点云数据文件如下所示,为二进制.dat文件,其中每一行是二维扫描仪线扫的数据,这么多行是因为云台转动得到的三维扫描数据。其中每一行的前52个字节是一些校验码等无效数据,我们需要自己写代码进行读取。 C++读取.dat文件没什

2017-03-16 21:21:23 5648 1

原创 Python中lambda表达式的应用

lambda表达式Python中定义了一个匿名函数叫做lambda表达式,个人理解实现的作用就是代替一些简单的函数,使得代码看上去更简洁并且可读性高。举个例子,我们有一个元组列表[(‘a’,1),(‘b’,2),(‘c’,3)],我想在想把里边每个元组的第一项,即字母项提取出来构成一个新的列表。此时我们可以定义一个函数,函数参数是元组,返回值是元组的第一项,然后将函数循环作用于列表的每一个元组。很简

2016-12-19 19:49:56 24922

XS128_PIT介绍

XS128的PIT定时器模块介绍。。很不错的应用,比较方便。。值得学习

2015-02-01

空空如也

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

TA关注的人

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