- 博客(81)
- 收藏
- 关注
原创 【计算机系统】数据类型、表示、运算
1. 整型1.1 数据大小数据类型64位程序大小(字节)char1int8_t1short2int4int32_t4long8int64_t81.2 有符号数的补码表示补码编码(有符号整数的表示方法):将数据的最高位解释为负权。例如[11111111]用于表示无符号数为255255255,但是用于表示有符号数(补码)则表示为−1=−128+64+32+16+8+4+2+1-1=-128+64+32+16+8+4+2+1−1=
2021-04-13 20:16:33 212
原创 【动态规划】最长公共子序列
题目描述:给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。示例 1:输入:text1 = "abcde", text2 = "ac.
2021-04-04 08:20:00 245
原创 C++ 基类和派生类的构造函数
派生类不能继承基类的构造函数;派生类执行构造函数时,会调用基类的构造函数,一般来说,需要在派生类构造函数中指明基类构造函数,且必须在函数头指明,例如:#include<iostream>using namespace std;//基类Peopleclass People{protected: char *m_name; int m_age;public: People(char*, int);};People::People(char *name,.
2021-04-01 21:16:48 806
转载 C++ 指针或引用作为函数参数
C++ 指针或引用作为函数参数例子:#include <iostream>using namespace std;void swap1(int a, int b);void swap2(int *p1, int *p2);void swap3(int &r1, int &r2);int main() { int num1, num2; cout << "Input two integers: "; cin >>
2021-03-31 20:20:44 325
原创 编译问题 Python.h no such file or directory
编译问题 Python.h no such file or directory 解决方法一:网上大部分人的方法:sudo apt-get install python-devsudo apt-get install python3-dev该方法对我并不适用,因为已安装,locate Python.h后可以看到路径:/usr/include/python2.7/Python.h/usr/include/python3.5m/Python.h/usr/include/vtk-6.2/vtkP
2020-08-14 10:08:38 1680
原创 卡尔曼滤波:高斯过程 + 贝叶斯推断
前言PRML中提到,卡尔曼滤波是高斯过程的一种应用,本文便从高斯过程的角度来总结一下卡尔曼滤波;首先明确卡尔曼滤波包括两部分:预测和更新。预测就是根据系统上一时刻的状态x^t−1\hat{x}^{t-1}x^t−1预测当前时刻的状态xtx^{t}xt;更新就是通过当前时刻的观察值ztz^tzt更新当前时刻的状态预测值xtx^{t}xt,作为当前时刻的最优估计x^t\hat{x}^{t}x^t。以此方法迭代。其次明确系统的真实状态是确定的、唯一的,但是!!我们得到的所有估计值都是不确定的,是一个随机变
2020-05-10 16:25:04 1644 2
原创 高斯回归(Gaussian Processes)
1 前言1.1 怎么理解高斯过程?高斯过程和随机过程的关系是什么?高斯分布:随机变量服从高斯分布,意味着在当前时刻,该随机变量可能取的值服从高斯分布,但它只能从分布中取一个!随机过程:在一条时间线上,或一个数据集中,随机变量在每个位置上服从一定的分布,但在每一个位置只能取一个值,假设共有m个时间点(或数据集容量为m),则一共会产生m个取值结果,这m个取值结果便称为一个过程,因为在每一个点的取值是随机的,因此称为随机过程。我们用联合概率分布来描述随机过程:p(x1=t1,x2=t2,...,xm=t
2020-05-09 21:16:30 3351 1
原创 如何理解协方差和协方差矩阵
协方差两个一维随机变量X,YX,YX,Y之间的协方差:cov(X,Y)=∑i=1n(Xi−Xˉ)(Yi−Yˉ)n−1cov(X,Y)=\frac{\sum_{i=1}^n(X_i-\bar{X})(Y_i-\bar{Y})}{n-1}cov(X,Y)=n−1∑i=1n(Xi−Xˉ)(Yi−Yˉ)协方差的意义:协方差为正,说明两个随机变量呈正相关;协方差为负,说明两个随机...
2020-05-07 17:31:30 671
原创 贝叶斯线性回归(贝叶斯学派)
前言极大似然线性回归中,我们使用线性高斯判别模型,似然函数为:p(Y∣X,θ,β)=∏i=1nN(yi∣θTΦ(xi),β−1)p(Y|X,\theta,\beta)=\prod_{i=1}^n\mathcal{N}(y_i|\theta^T\Phi (x_i),\beta^{-1})p(Y∣X,θ,β)=i=1∏nN(yi∣θTΦ(xi),β−1)其中Φ(xi)\Phi (x_i)...
2020-05-06 01:42:16 2256
原创 极大似然估计解决线性回归问题(频率学派)
1 前言线性回归问题中,我们使用LSE最小二乘损失函数;而在逻辑回归问题中,我们不能使用LSE损失函数,应该使用交叉熵损失函数,而交叉熵损失函数是由极大似然估计推导而来,推导过程见LR推导;本文讲解如何从极大似然估计的角度解决线性回归问题。本文参考自PRML2 问题定义给定数据集{x1,x2,...,xm}\{x_1,x_2, ...,x_m\}{x1,x2,...,xm...
2020-05-03 17:19:41 3863 3
原创 逻辑回归LR推导
1 问题定义:给定数据集{x1,x2,...,xm}\{x_1,x_2, ...,x_m\}{x1,x2,...,xm}和标签{y1,y2,...,ym}\{y_1,y_2, ...,y_m\}{y1,y2,...,ym},训练一个模型,使得输入新的 xxx,输出对应的标签值。这里数据集 xi∈Rnx_i\in R^nxi∈Rn,标签 yi∈{0,1}y_i\in\{0,1\}y...
2020-05-03 15:47:24 298
原创 浅谈DP、MC、TD方法的区别与联系
引言Dynamic Programming, Monte Carlo, Temporal Difference是强化学习过程中最基础的三种算法,本文主要总结一下这三种方法的区别与联系;强化学习模型本质上是一个随机过程,可以用概率图模型来描述,就像 HMM 可以使用有向图来描述,马尔可夫网可以使用无向图来描述,强化学习对应的图模型是Finite Markov Decision Process(...
2020-05-01 00:51:45 4617
原创 单调栈及其应用
单调栈数据结构顾名思义,单调栈就是说栈中的元素是单调的,递增或者递减。单调栈的构造:对于一个非单调的数据序列arr,如何构造单调递增栈:stack = []for a in arr: if not stack or stack[-1]<=a:# 如果栈空,或者元素比栈中最后一个元素大,则入栈 stack.append(a) else: # 如果栈非空,且元素比栈中最...
2020-04-30 12:16:29 410
原创 隐马尔可夫模型HMM整理
概率图模型:描述随机过程的一个工具节点表示随机变量,边表示变量之间的概率关系;分类:马尔可夫模型每个结点的随机变量是可观测的;给定一个随机序列:S:s1,s2,s3...sTS:s_1,s_2,s_3...s_TS:s1,s2,s3...sT,其联合概率分布为:P(s1,s2,s3...sT)=P(s1)⋅P(s2∣s1)⋅P(s3∣s2)⋅⋅⋅⋅P(sT∣sT−1)P...
2020-04-29 11:11:54 130
原创 理解判别式模型和生成式模型
1. 我们要做什么:以分类问题为例:给定数据集XXX、数据标签CCC,学习一个模型。我们的目标是给出新的xxx,判断xxx所属的类别。用数学语言来描述,就是求p(c∣x)p(c|x)p(c∣x)的大小。2. 判别式模型:直接对 p(c∣x)p(c|x)p(c∣x) 建模2.1 建立一个xxx到p(c∣x)p(c|x)p(c∣x)的映射例如在逻辑回归问题中,我们使用了sigmoid函数...
2020-04-21 15:36:10 403
原创 对dijkstra算法和A*算法的理解
dijkstra算法算法原理不再详述,给出两篇参考文章,看完就懂:自动驾驶路径规划-Dijkstra算法数据结构–Dijkstra算法最清楚的讲解自己的理解:dijkstra算法得到的结果是单源的,即必须设定一个起点A,等到遍历完所有点之后,得到的结果是点A到所有剩余点的最短距离和最短路径。如果起点换成B,那就要重新设定B为起点,然后运行一遍算法;dijkstra算法采用...
2020-04-17 14:29:41 1388
原创 字符串数组的打印
普通数组的打印: int vec[]={1,2,3,4,5,6,7,8}; int *ip=vec;//注意,vec是常量指针,不能进行++操作 ip+=5; cout<<sizeof(vec)<<endl;//32 8*4 cout<<vec<<endl; // 0x7ffcf1535db0 指针地址 ...
2020-04-09 01:19:46 4489
原创 C++ 类的访问控制和继承 及三种继承方式的理解
1. 类中的访问说明符class Parent{public: ...private: ...protected: ...};访问说明符publicprivateprotected类外用户√××类内成员√√√派生类成员√×√友元√√√2. 派生类的继承方式说明符class Child : public P...
2020-04-09 00:53:20 783
原创 一表看懂准确率、精确率、召回率、AUC
准确率、精确率、召回率实际值\预测值01080(TN)20(FP)120(FN)80(TP)理解TN,FP,FN,TPTN:正确地True预测成了NegativeFP:错误地False预测成了PositiveFN:错误第False预测成了NegativeTP:正确地True预测成了Positive准确率:提取的正确信息数/样本中的总信息数...
2020-04-08 14:12:43 758
原创 C++ 面向对象程序设计OOP【学习笔记】
1. 概述OOP核心思想:数据抽象、继承、动态绑定C++核心思想:封装、继承、多态(与OOP一一对应)2. 定义基类和派生类基类通过在成员函数声明前加上virtual关键字使得该函数执行动态绑定,派生类需要对这些基类的成员函数重新定义以覆盖其旧定义,方法是在该函数的参数列表后面、或const关键字后面加上override关键字。 ——《C++ Primer》...
2020-04-07 17:25:56 220
原创 C++ 右值引用和对象移动
1. 左值和右值左值:能对表达式取地址,例如(有名字的)变量、类对象等;右值:不能对表达式取地址,例如非引用的函数返回值、表达式计算的临时变量、字面常量等;一个左值表达式表达的是对象的身份,一个右值表达式表达的是对象的值,左值可以当做右值使用,但右值不能当做左值使用。——《C++ Primer》2. 左值引用和右值引用声明:左值引用: &右值引用:&&a...
2020-04-06 22:26:54 185
转载 C++ 用sizeof求struct的大小
原文链接:https://blog.csdn.net/RadianceBlau/article/details/60867307原则每个结构体成员的起始地址为该成员大小的整数倍,即int型成员的起始地址只能为0、4、8,short类型成员起始地址只能为0,2,4…结构体的大小为其中最大成员大小的整数倍struct A{ char a; int b; short c;};s...
2020-04-05 22:40:19 253
原创 C++ 智能指针【学习笔记】
头文件memoryshared_ptr类允许多个指针指向同一个对象;创建和初始化shared_ptr<string> p1;shared_ptr<int> p2 = make_shared<int>(42);shared_ptr<string> p3 = make_shared<string>(10,'9');sha...
2020-04-05 14:39:31 101
原创 C++ 中的四种cast类型转换
const_cast用于将const变量转为非conststatic_cast用于各种隐式转换,比如非const转const,void*转指针等, static_cast能用于多态向上转化,如果向下转能成功但是不安全,结果未知;dynamic_cast用于动态类型转换。只能用于含有虚函数的类,用于类层次间的向上和向下转化。只能转指针或引用。向下转化时,如果是非法的对于指针返回NULL,对...
2020-04-04 22:43:59 172
原创 C++ static关键字的作用总结
全局静态变量定义:在全局变量前加上关键字static,全局变量就定义成一个全局静态变量.存储:静态存储区,在整个程序运行期间一直存在。初始化:未经初始化的全局静态变量会被自动初始化为0(自动对象的值是任意的,除非他被显式初始化);作用域:全局静态变量在声明他的文件之外是不可见的,准确地说是从定义之处开始,到文件结尾。局部静态变量定义:在局部变量之前加上关键字st...
2020-04-03 22:12:09 85
原创 C++ 拷贝控制 【学习笔记】
类的5种特殊成员函数拷贝构造函数拷贝赋值运算符移动构造函数移动赋值运算符析构函数1. 拷贝、赋值和销毁拷贝构造函数Sales_data::Sales_data(const Sales_data &orig): bookNo(orig.bookNo), units_sold(orig.units_sold), revenue(orig.revenue) {}...
2020-04-03 00:22:42 148
原创 C++类 const成员变量和const成员函数
深入理解为什么要有const成员函数1. 首先复习一下指针和const一个指向常量的指针(底层const)不能改变所指对象的值;因此将一个普通指针(不是指向常量的指针)指向一个常量是错误的,因为只能使用指向常量的指针来存放常量的地址:const double pi = 3.14;double *ptr = &pi //错误,ptr是一个普通指针,不能存放常量对象的地址但...
2020-04-03 00:04:29 625 1
原创 C++数组 strlen()和sizeof()的区别
sizeof()返回的是数组的大小,包含空字符char a1[]={'C','+','+'};//无空字符char a2[]={'C','+','+','\0'};//显式添加空字符char a3[]="C++"; //隐式添加了空字符cout<<sizeof(a1)<<endl;//3cout<<sizeof(a2)<<endl;//4...
2020-04-02 22:25:43 231
原创 C++ 动态内存【学习笔记】
内存分布静态内存:局部static对象、类static数据成员、定义在任何函数之外的变量;使用之前分配内存,程序结束时销毁;栈内存:函数内的非static对象;仅在程序块运行时才存在;堆:存储动态分配对象;...
2020-04-02 20:27:23 113
原创 C++ 指针和数组【易错题】
1. 解引用操作检查下面代码的问题:swap( int* p1,int* p2 ){ int *p; *p = *p1; *p1 = *p2; *p2 = *p;}问题:没有初始化指针p,不能对其进行解引用操作。解引用操作仅适用于那些确实指向了某个对象的有效指针 --《C++ Primer》改正:swap( int* p1,int* p2 ){ ...
2020-04-01 17:26:00 546
原创 C++ lambda表达式【学习笔记】
C++ lambda表达式lambda表达式组成[捕获列表](参数列表)->返回类型{函数体}参数列表和返回类型可以省略,但捕获列表和函数体必须包含;捕获列表通常为空,返回类型必须使用尾置返回;例:auto f = []{return 42;};捕获列表只用于局部非static变量值捕获:捕获的变量值是在lambda表达式创建时变量的拷贝,而不是调用时的拷贝vo...
2020-04-01 14:55:03 203
原创 C++参数传递【易错题】
代码的问题:GetMemory以拷贝的形式传入实参,即将实参str指针的值赋值给了形参p,在函数内部对形参进行的更改,不会影响实参的变化,因此str仍然为NULL;没有释放内存;void GetMemory( char *p ){ p = (char *) malloc( 100 );}void Test( void ) { char *str = NULL; ...
2020-04-01 10:07:38 152 1
原创 C++基本算术类型
C++基本算术类型算术类型Bytebool1char1short2int4long8long long8float4double8long double16
2020-03-31 17:58:03 190
原创 cin>>循环结束问题
cin>>循环跳出问题1.循环输入数值cin>>numint num;vector<int> vec;while(cin>>num){ vec.push_back(num);}for(auto a:vec) cout<<a<<" "<<endl;以非空格作为num的开始,以遇到...
2020-03-31 11:28:29 676
原创 C++ 顺序容器 【学习笔记】
顺序容器特点对比:容器类型是否可变访问速度插入删除速度相对空间开销vector数组√快速随机访问尾部插入删除很快,其他位置慢小deque双端队列√快速随机访问头尾插入删除很快,其他位置慢小list 双向链表√双向顺序访问任何位置插入删除速度都很快大forward_list 单向链表√单向顺序访问任何位置插入删除速度都很快...
2020-03-30 13:37:28 129
原创 C++ 迭代器【学习笔记】
迭代器迭代器类似于指针,但是不是通过取址运算符&获得的,而是通过容器的begin()或end()成员函数返回的。begin()返回指向头元素的迭代器,end()返回指向尾元素下一位置的迭代器;所有标准库容器都可以使用迭代器。使用迭代器遍历容器:#include <string>#include <iostream>#include <vector...
2020-03-29 11:13:46 536
原创 C++ 标准库vector 二维数组的创建和打印
C++ 标准库vector 二维数组的创建和打印#include <vector>#include <iostream>using namespace std;int main(){ // 二维数组的建立和初始化 int m=5,n=5; vector<vector<int>> matrix(m); fo...
2020-03-29 01:14:55 2863
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人