- 博客(8)
- 资源 (1)
- 收藏
- 关注

原创 【超详细】支持向量机(SVM)数学推导
SVM是一种无监督机器学习方法,常用于二分类问题。其相较于逻辑回归,引入了核函数的概念,对非线性关系有更好的分类效果;同时由于对偶问题的引入,使得计算的复杂性由维度的大小转变为样本的数量,避免了维度爆炸。但是由于SVM的本质是二次规划问题,样本数量大的时候,需要占用大量的存储空间和时间,不容易实现;同时SVM解决多分类问题存在一定困难。一、硬间隔SVM(Hard Margin SVM)硬间隔SVM是一个二次凸规划问题,其形式为:其推导过程为:(1)列出原始目标函数和约束条件。目标函数
2022-04-12 23:54:51
8866
2
原创 KMP算法及其实现
KMP算法是一种字符串匹配算法,它通过next数组的定义,优化了暴力匹配的时间复杂度。KMP算法的时间复杂度是O(M+N).目录一、算法原理1. 计算next数组2. 字符匹配过程二、算法实现三、算法复杂度分析一、算法原理1. 计算next数组next[j]的计算方式为next[1~j]中的非平凡前缀和非平凡后缀元素一致的长度。next数组的实现过程为:i指针从1开始,j指针从0开始。每次索引元素时,用s[i]和s[j+1],这样做的好处是降低写代码的
2022-05-13 13:28:02
638
原创 Acwing802.区间和问题
题目描述假定有一个无限长的数轴,数轴上每个坐标上的数都是 00。现在,我们首先进行 nn 次操作,每次操作将某一位置 xx 上的数加 cc。接下来,进行 mm 次询问,每个询问包含两个整数 ll 和 rr,你需要求出在区间 [l,r][l,r] 之间的所有数的和。输入格式第一行包含两个整数 nn 和 mm。接下来 nn 行,每行包含两个整数 xx 和 cc。再接下来 mm 行,每行包含两个整数 ll 和 rr。输出格式共 mm 行,每行输出一个询问中所求的区间内数字和。
2022-04-13 20:39:46
658
原创 前缀和算法+实现
目录1.前缀和算法2.前缀和实现Leetcode 303:区域和检索 - 数组不可变Leetcode 304:二维区间和检索 - 数组不可变Leetcode 560:和为K的子数组3.总结1.前缀和算法前缀和的定义:数组从开始至某特定位置处的总和。通过前缀和问题,我们可以计算数组的在某个区间的数值总和。其步骤如下:(1)建立vector,用于存储前缀,并通过一定计算方式(如何计算见后续例题)计算每个位置处的前缀和。(2)通过一定计算方式(如何计算见后续例题)计
2022-03-30 20:37:46
3810
原创 高精度运算原理+实现(加减乘除)
高精度运算指的是进行运算的数据过大,超出了存储范围。这时就需要使用高精度运算目录1.高精度加法2.高精度减法3.高精度乘法4.高精度除法总结1.高精度加法题目要求:给定两个整数,输出他们的和算法:(1)扫描a,b;将a,b逆序放入vector中(逆序是为了更方便的进行运算)(2)进行求和运算①从末位向前位逐位求和,注意进位。即结果 = (a[i]+b[i]+进位)%10;进位 = 结果/10. 只有i小于对应数组的长度的时候才能取该位进行加法运算。
2022-03-23 23:18:52
800
原创 随机网格搜索的原理和实现【极简】
基本原理相较于枚举网格搜索,随机网格搜索的计算量更低。随机网格搜索放弃原本的搜索中的全域超参数空间,改为挑选出部分参数组合,构造超参数子空间,并只在子空间中搜索。以下图的二维空间为例,假设n_estimator的取值为[50,100,150,200,250,300],max_depth的取值为[2,3,4,5,6],则枚举网格搜索必须对30种参数组合都进行搜索;而随机网格搜索只需要抽样橙色的点作为参数组合进行搜索。这样,整体搜索的计算量就大大下降了。枚举网络搜索需要30次,而随机网格搜索仅需要8次。
2022-03-19 19:45:28
2066
原创 桶排序算法及其实现
桶排序算法在leetcode中,桶排序经常被使用以对元素出现的频率进行排序。其过程为:(1)创建一个unordered_map,key为元素,value为出现次数。遍历所有元素,每遍历一个元素,该元素的value++,同时比较当前元素的value和当前最大的value,以得到最大出现次数n。(2)根据最大出现次数n,创建有n+1个元素的vector(vector的下标是元素出现的次数),vector中的每个value也是一个vector,用于记录特定出现次数的元素。遍历(1)中创建的unorde
2022-03-16 00:01:24
1654
原创 Leetcode215 第K大的元素
本题是快速排序的变形题目。题目描述如下:本题的基本思想如下:在快排每次划分区间的过程中,计算比枢轴元素大的元素个数sr,即sr = nums.size()-j-1. 然后将sr与k作对比:若k<=sr,则取右半边进行递归;否则取左半边进行递归。注意边界条件是left==right,此时返回nums[left].class Solution {public: int findKthLargest(vector<int>...
2022-03-14 23:17:16
687
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人