- 博客(33)
- 收藏
- 关注
转载 C++的this指针
C++中的this指针主要作用是使得C语言翻译后的全局函数作用在结构变量上。实际上,现在的C编译器从本质上来说也是按上面的方法来处理成员函数和对成员函数的调用的,即非静态成员函数实际上的形参个数比程序员写的多一个。多出来的参数就是所谓的“this指针”。this指针指向函数作用的对象...
2022-03-26 21:36:52 97
原创 泛型编程
STL是一种泛型编程,泛型编程旨在编写独立于数据类型的代码,而在C++中,完成通用程序的工具是模板。迭代器是理解STL的关键。模板使得算法独立于存储的数据类型,而迭代器使得算法独立于使用的迭代器类型。迭代器类型:STL定义了5种迭代器,分别为输入迭代器、输出迭代器、正向迭代器、双向迭代器、随机访问迭代器输入迭代器:不会修改容器中的值,对输入迭代器解除引用将使程序能够读取容器中的值,但不一定能让程序修改值输出迭代器:输出迭代器与输入迭代器类似,只是解除引用让程序修改容器值,而不能读取。即能够写却不
2020-10-20 23:56:06 329
原创 三个具有代表性的STL函数
for_each() 该函数的前两个参数用于定义容器中的迭代器,最后一个是指向函数的参数。for each 函数将被指向的函数应用到容器区域中的各个元素,可以用for_each代替for循环random_shuffle() 两个指定区域的迭代器参数,并随机排列该区域中的元素,该函数要求容器类可以随机访问,vector类可以随机做到这一点sort() 它接收三个参数,前两个参数是指定区域的迭代器,最后一个参数是指向要使用的函数指针,该函数返回值可为bool,false表示两个参数的顺序不正确...
2020-10-20 00:01:32 149
原创 Network Embedding 与 Graph Embedding
网络嵌入与图嵌入在目标和假设上具有实质性的差异。网络嵌入有两个目标:重建原始网络和支持网络推断。图嵌入的目标主要为图重建。图嵌入可以看作是网络嵌入的一种特例。此外,图嵌入算法经常作用在特征表示数据集所构建的图上,在这种图中,由边的权重决定了节点之间的距离,而边的权重在原始的特征空间中已经定义好了。相反,网络嵌入算法通常作用在自然形成的网络上,在这些网络中节点之间的距离并不明确或者也没有给出直接的定义。节点之间的距离依赖于具体的分析目标和应用场景...
2020-09-20 17:03:44 329
转载 GBDT与XGBOOST
GBDT回归算法构建初始分类器,其中为根节点的标签 对迭代轮数对样本,计算残差 利用样本拟合CART回归树得到第棵树,其叶节点共包含个样本 对叶节点进行最佳拟合 更新分类器得到强学习器XGboostXGBoost的目标函数由训练损失和正则化项两部分组成,目标函数定义如下:当我们学习第棵树时有,代入我们的目标函数得到:根据泰勒展开式,重新定义一棵树,叶子节点的权重为,实例到叶子节点的映射关系为树的复杂度叶子节点归组令,得到:这个式子是关于的一元二次函数
2020-09-13 16:30:06 202 1
转载 PCA推导
是行向量,是列向量两个矩阵相乘的意义是将右边矩阵中的每一列向量变换到左边矩阵中以每一行行向量为基所表示的空间中去。也就是说矩阵可以表示一种线性变换现在的问题是如何选择基才是最优的,我们应如何选择基才能最大程度地保留原始信息。我们希望投影后的数据尽可能分散,因为重叠就会有样本消息方差方差表示数值地分散程度,方差地定义为:当我们将每个变量的均值化为0时,方差变为:协方差协方差表示两个变量之间相关性,为了让两个变量尽可能表示更多的原始信息,我们希望它们之间不存在线性相关性,因为相关
2020-09-11 10:28:48 98
原创 最长字符串
给定一个数组arr,返回arr的最长无的重复子串的长度(无重复指的是所有数字都不相同)。哈希表的使用class Solution {public: /** * * @param arr int整型vector the array * @return int整型 */ int maxLength(vector<int>& arr) { // write code here con..
2020-09-10 20:43:49 190
原创 求平方根
实现函数int sqrt(int x).计算并返回x的平方根要注意两点:第一right要取x/2+1 这个还不是最重要的,其实只是影响速度 第二:要用x/middle>middle 来表示x>middle*middle 不然会溢出 第三:判断相等时用x/middle>=middle && x/(middle+1)<(middle+1) 使用二分查找 int sqrt(int x) { // write code h...
2020-09-10 09:49:09 137
原创 朴素贝叶斯分类器
朴素贝叶斯采取了属性条件独立的假设,即我们所说的特征,相互之间是独立的。朴素贝叶斯的目标函数:若每个样本的风险都最小化,那么整体的风险也将最小化,即在每个样本上选择能使最小的类别标记,误判损失 此时条件风险为: ,故最小化分类错误率的贝叶斯最优分类器为判别式模型:给定,可通过直接建模来预测生成模型:先对联合概率分布建模,然后由此获得对贝叶斯定理可写为:贝叶斯学派认为参数是未观察到的随机变量,其本身也有分布,因此可以假设参数服从先验分布,然后基于观察到的数...
2020-09-08 14:52:43 270
转载 Network Embedding中方法回顾
网络嵌入方法(Network Embedding)旨在学习网络中节点的低维度潜在表示,所学习到的特征表示可以用作基于图的各种任务的特征,例如分类,聚类,链路预测和可视化。传统意义上的 Graph Embedding 被看成是一个降维的过程,而主要的方法包括主成分分析(PCA)和多维缩放(MDS)。所有的方法都可以理解成运用一个 n × k 的矩阵来表示原始的 n × m 矩阵,其中 k << n。在 2000 年代早期,又提出了其他方法,如 IsoMap 和 LLE,以保持非线性流形的整
2020-09-07 20:05:49 516
原创 C++的继承知识点重温
派生类声明形式:class 派生类名: 继承方式 基类名1,继承方式 基类名2,...继承中的访问控制:公有继承:公用基类成员 在派生类中的访问属性 public public protected protected private 不可访问 私有继承:私有基类成员 在派生类中的访问属性 public private protected private private 不可访问 保护继承保护基类成员
2020-09-07 15:51:11 153
原创 二叉树的三种遍历方式
前序遍历void pre(TreeNode* root,vector<int>&pre_order ){ TreeNode* pcur=root; stack<TreeNode*> sta; while(!sta.empty()||pcur){ while(pcur){ sta.push(pcur); pre_order.push_ba...
2020-09-07 14:26:06 85
转载 C++面试问题整理
静态库与动态库的区别:静态(函数)库 一般扩展名为(.a或.lib),这类的函数库通常扩展名为libxxx.a或xxx.lib 。 这类库在编译的时候会直接整合到目标程序中,所以利用静态函数库编译成的文件会比较大,这类函数库最大的优点就是编译成功的可执行文件可以独立运行,而不再需要向外部要求读取函数库的内容;但是从升级难易度来看明显没有优势,如果函数库更新,需要重新编译。 动态函数库 动态函数库的扩展名一般为(.so或.dll),这类函数库通常名为libxxx.so或xxx.dll 。
2020-09-06 16:44:53 177
原创 最大的路径的节点值之和
question:给定一个二叉树,请计算节点值之和最大的路径的节点值之和是多少。 这个路径的开始节点和结束节点可以是二叉树中的任意节点例如:示例1 输入 {-2,1} 输出 1 示例2 输入 {-2,#,-3} 输出 -2在这个问题中,我纠结的问题是如何保存目前以及找到的最大值,最后发现使用全局变量就可以了。算法的思路如下:1. 对于每一个节点,我们首先找到在以该节点的左孩子节点为根节点的部分中包含该节点左孩子的路径之和的最大值,记为left。同...
2020-08-28 17:37:43 392
转载 C++中map与unordered_map, set与unordered_set
散列表和红黑树哈希函数和散列表很普遍,在此就不介绍了。下面介绍一下红黑树的概念(代码太难了 溜了溜了 等我成为大佬再钻研)红黑树的定义:每个节点非红即黑 根节点是黑的; 每个叶节点(叶节点即树尾端NULL指针或NULL节点)都是黑的; 如图所示,如果一个节点是红的,那么它的两儿子都是黑的; 对于任意节点而言,其到叶子点树NULL指针的每条路径都包含相同数目的黑节点; 每条路径都包含相同的黑节点;mapmap是通过红黑树实现的,红黑树内的数据时有序的,在红黑树上查找的时间复杂度是O
2020-08-27 19:54:32 278
转载 分割字符串s使得每个子串都是回文串
question:给出一个字符串s,分割s使得分割出的每一个子串都是回文串计算将字符串s分割成回文分割结果的最小切割数例如:给定字符串s="aab",返回1,因为回文分割结果["aa","b"]是切割一次生成的。如果要求输出所有可能的解,往往都是要用深度优先搜索。如果是要求找出最优的解,或者解的数量,往往可以使用动态规划。https://blog.csdn.net/ibelieve8013/article/details/103279661...
2020-08-26 23:02:47 795
原创 机器学习模型的可解释性
昨日答辩被老师完虐,问到了机器学习的可解释性,发现这方面资料比较少,而这个概念在我答辩之前的理解都是停留在字面意思的错误理解待我明日阅读文献后填充
2020-08-23 23:12:32 1576
原创 s can be segmented into a sequence of one or more dictionary words?
question:Given a stringsand a dictionary of wordsdict, determine ifscan be segmented into a space-separated sequence of one or more dictionary words.For example, givens="leetcode",dict=["leet", "code"].Return true because"leetcode"can be se...
2020-08-23 12:37:43 171
原创 寻找链表中环的入口
问题:对于一个给定的链表,返回环的入口节点,如果没有环,返回null拓展:你能给出不利用额外空间的解法么?思路:速度较慢的节点走过的路径为:速度快的节点走过的路径为:,这里表示速度快的节点多走的圈数由上述两式可得:化简可得:,这里为环的长度也就是说,当有两个节点,一个节点位于起始点,另一个位于相遇点。这两个节点以相同的速度前进时,当一个指针走完距离时,另一个指针恰好走出 绕环圈加上的距离。代码:class Solution {public: ListNo.
2020-08-21 18:15:46 209
原创 集成学习——机器学习面试
boosting和bagging的问题Bagging即套袋法,其算法过程如下: 从原始样本集中抽取训练集。每轮从原始样本集中使用有放回的抽样的方法抽取n个训练样本(在训练集中,有些样本可能被多次抽取到,而有些样本可能一次都没有被抽中)。共进行k轮抽取,得到k个训练集。(k个训练集之间是相互独立的) 每次使用一个训练集得到一个模型,k个训练集共得到k个模型。(注:这里并没有具体的分类算法或回归方法,我们可以根据具体问题采用不同的分类或回归方法,如决策树、感知器等) 对分类问题:将
2020-08-19 23:03:02 198
转载 树模型——机器学习面试
决策树处理连续值的方法CART采用的是二分法:对于连续属性a,我们可考察包括 n-1 个元素的候选划分集合(n个属性值可形成n-1 个候选点): 利用每个中的候选点对数据进行划分,得到两个子集,计算信息增益,取最大的信息增益对应作为该属性的信息增益。决策树如何防止过拟合提前结束限制树的深度:当达到设置好的最大深度的时候结束; 当继续展开后节点混乱程度的减小值比较小...
2020-08-19 19:28:29 196 1
转载 SVM — 机器学习面试
LR和SVM有什么区别,libsvm和liblinear有什么区别。LR与SVM的区别:相同点:LR和SVM都是分类算法 如果不考虑核函数,LR和SVM都是线性分类算法,也就是说他们的分类决策面都是线性的。 LR和SVM都是监督学习算法。 LR和SVM都是判别模型。不同点:本质上是其loss function不同。 支持向量机只考虑局部的边界线附近的点,而逻辑回归考虑全局(远离的点对边界线的确定也起作用)。 LR可以给出每个点属于每一类的概率,而SVM是非概率的,然后一个是基于统
2020-08-19 18:08:20 180
转载 LR逻辑斯蒂回归 — 机器学习面试
LR为什么用sigmoid函数, 为什么不用其他函数?逻辑回归的条件分布是伯努利分布,而线性回归的是高斯分布。 逻辑回归要预测的值是概率,因此要通过sigmoid函数约束到(0,1)区间,从而输出因为逻辑回归预测的是某个输出值(0或1)的概率。sigmoid函数有什么优点和缺点?优点输入范围是−∞→+∞−∞→+∞ ,输出范围为(0,1),正好满足概率分布为(0,1)的要求。我们用概率去描述分类器,自然比单纯的某个阈值要方便很多; 单调上升的函数,具有良好的连续性,不存在不连续点并且可导。
2020-08-19 16:32:58 137
转载 2020-08-07
1、如何在字符串中删除一个字符:字符串的内存是连续分配的,当我们删除其中一个字符时,就需要把后面所有的字符向前移动一个字节的位置。因此,对于一个长度为n的字符串,删除一个字符的时间复杂度为O(n)。对于本题而言,假设第二个字符串的长度为m,有可能要删除的字符个数是m,因此删除的时间复杂度为O(m*n),即O(n^2)。我们换一种思路。采用在原字符串基础上重新构造删除后的字符串的思路。定义两个指针,一个slow用来构造新的字符串,一个fast用来遍历原字符串。初始两个指针均指向原字符串的第一个位置。如
2020-08-07 21:34:48 193
原创 2020-08-07
void delete_repeate_char(char* str){ int* haxi=new int[256]; int i=0, k=0, len=strlen(str); char* temp=str, *start=str; //char* temp=new char[len]; memset(haxi,0,sizeof(int)*256); while(*str!='\0'){ if(haxi[*str]==0){ ...
2020-08-07 21:29:25 86
转载 c++中的运算符异或^,与&,或|
&:只有2个都为1,那么结果是1,否则为0;例如:1&1=1,1&0=0,0&0=0,0&1=0;11 & 3 = 3 00001011& 00000011= 00000011 = 3|:只要有一个是1,那么结果为1,否则为0;例如:1&1=1,1&0=1,0&0=0,0&1=1;11 | 3 = 11 00001011| 00000011= 00001011 = 11..
2020-05-20 09:11:22 3790
原创 int取值范围的注意问题
int类型的取值范围是到,也就是说我们需要注意负数-2,147,483,648属于int但是2,147,483,648不属于int,这个问题有考察
2020-05-19 22:45:30 532
原创 连续子串的最大乘机
题目描述:解法一:动态规划设dpMax[i]为当前找到的最大值,dpMin[i]为当前找到的最小值求dpMax的方法:nums[i]>0 dpMax[i-1]>0 则dpMax[i]=dpMax[i-1]*nums[i]nums[i]>0 dpMax[i-1]<0 则dpMax[i]=nums[i]nums[i]<0 dpMin[i-1]<0 则dpMax[i]=dpMin[i-1]*nums[i]nums[i]<0 dpMin[i-
2020-05-15 11:21:08 178
原创 VMware pro 15 ubuntu简易安装虚拟机黑屏
VMware pro 15我选择了典型安装Ubuntu(14、16版本的都试了)系统不知道为什么一直黑屏,我在网上看说是版本不兼容于是去下载了VMware pro 12,但此时却总是卸载不干净无法安装VMware12,我在网上疯狂百度,除了卸载软件之外我们还需要修改注册表并重启电脑,之后使用链接:https://pan.baidu.com/s/1njcfDhRhXZJhd3pKWb5KEg提取...
2020-03-26 20:21:22 548
原创 Isomap算法推导
Isomap算法步骤:建立一个邻居图:对于每个点,选择最近的K个点作为邻居,并将每个点和它的邻居相连,我们将两个点之间的相似度作为边的长度。 计算每两个点之间的最短距离并存储在N*N的矩阵 在最短距离矩阵中使用MDS算法来获得降维表示MDS算法步骤:1、计算相似性矩阵的平方矩阵:2、每行都减掉均值:得到一个近似矩阵:3、选出M的d个最大特征值和它们的特征向量是...
2019-03-04 09:59:52 1981
原创 关于栈的链式存储结构
之前在创建栈的链式存储结构时,想当然误以为栈的top指针会指向链表的尾结点,在创建链表结构时的写法误写为: for(j=0;j<i;j++){ temp=(struct Node*)malloc(sizeof(struct Node)); printf("Input:"); scanf("%c",&a); getchar(); ...
2018-05-28 21:15:58 218
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人