算法
一朝英雄拔剑起
又是苍生十年劫
展开
-
【听说你还不会?】多层神经网络原理详细推导
1 结构第0层是输入层,输入为X,维度为(n[0],m)(n^{[0]},m)(n[0],m),其中n[0]n^{[0]}n[0]表示第0层含有的节点,也是X的特征数。mmm表示样本数。以此类推,第1层的节点数n[1]n^{[1]}n[1],第2层的节点数n[2]n^{[2]}n[2],…,第L层的节点数n[L]n^{[L]}n[L]。2 正向过程第0层输入层数据XXX,维度(n[0],m)(n^{[0]},m)(n[0],m)。n[0]n^{[0]}n[0]表示第0层含有的节点,也是X的特征数。原创 2020-12-07 22:51:58 · 741 阅读 · 0 评论 -
动态规划解0-1背包问题
1 问题描述1.1 白话描述给定n种物品和一个背包。物品 i 的重量是 wiw_iwi,其价值为 viv_ivi。背包的容量为Capacity。约束条件:对于每种物品,旅行者只有两种选择:放入或舍弃。每种物品只能放入背包一次问题:如何选择物品,使背包中物品的总价值最大?1.2 数学描述目标函数:max(∑i=1nvixi)max(\sum_{i=1}^n{v_ix_i})max(i=1∑nvixi)其中 x=(x1,x2,…,xn)x = (x_1,x_2,…,x_n原创 2020-11-16 21:08:52 · 1067 阅读 · 0 评论 -
动态规划解最大子段和问题
1 动态规划1.1 基本思想动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题。与分治法的区别在于,适用于动态规划算法求解的问题,经分解得到的子问题往往不是互相独立的;若用分治法求解,则分解得到的子问题数目太多,导致最终解决原问题需指数时间。原因在于:虽然子问题的数目常常只有多项式量级,但在用分治法求解时,有些子问题被重复计算了许多次,如果可以保存已解决的子问题的答案,就可以避免大量重复计算,从而得到多项式时间的算法。动态规划法的基本思路是:构造一张表来记录所有已解决的子问题的.原创 2020-11-16 10:58:51 · 4243 阅读 · 0 评论 -
分治算法解汉诺塔问题
1 问题描述设有A、B、C3个塔座。在塔座A上有一叠共n个圆盘。自上而下,由小到大地叠在一起,依次编号为1,2,…,n。问题:要求将塔座A上的圆盘全部移到塔座C上,仍按同样顺序叠置。在移动圆盘时遵守以下规则:每次只允许移动1个圆盘任何时刻都不允许将较大的圆盘压在较小的圆盘之上在规则1和2的前提下,可将圆盘移至任何一塔座上2 分析当n=1时,问题可以直接求解,一步完成当n>1时,分三步完成:将n-1个较小盘子设法移动到辅助塔座。构造出一个比原问题规模小1的问题。将原创 2020-11-15 17:10:47 · 362 阅读 · 0 评论 -
Strassen矩阵乘法C++实现
1 问题描述求矩阵A,B相乘的结果CCmn=AmbBbnC_{mn}=A_{mb}B_{bn}Cmn=AmbBbn2 分析2.1 传统解法直接根据矩阵乘法的定义来遍历计算。Cij=∑k=1bAik×BkjC_{ij}=\sum_{k=1}^{b}{A_{ik}\times B_{kj}}Cij=k=1∑bAik×Bkjc++语言代码:void matrixMul(int** A,int** B,int** C,int m,int b,int n){ for(in原创 2020-11-15 16:10:55 · 1909 阅读 · 0 评论 -
分治算法解大整数相乘问题
1 问题有两个n位大整数XXX,YYY,它们数值之分大,如1e10001e10001e1000。现在要计算它们的乘积XYXYXY。2 分析2.1 传统方法逐位相乘、错位相加,时间复杂度O(n2)O(n^2)O(n2)。效率太低。2.2 分治方法将n位的二进制整数X和Y各分为2段,每段的长为n/2位(为简单起见,假设n是2的幂)。此处整数用2进制表示。X=a2n2+bY=c2n2+dX=a2^{\frac{n}{2}}+b\\Y=c2^{\frac{n}{2}}+dX=a22n+bY=原创 2020-11-15 10:58:10 · 2250 阅读 · 0 评论 -
常用排序与查找算法大全
文章目录**1 选择排序****2 插入排序****3 冒泡排序****4 希尔排序****5 归并排序****6 快速排序****7 堆排序****8 基数排序****9 线性查找****10 折半查找**1 选择排序选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排原创 2020-11-14 16:42:10 · 2676 阅读 · 0 评论 -
softmax回归多分类
1 简介softmax逻辑回归模型是logistic回归模型在多分类问题上的推广。在多分类问题中,类标签y可以取两个以上的值。 Softmax回归模型对于诸如MNIST手写数字分类等问题是很有用的,该问题的目的是辨识10个不同的单个数字。2 softmax回归过程2.1 线性处理y=xwTy=xw^Ty=xwT描述:xxx大小是1×n1\times n1×n,WWW大小是m×nm\times nm×n。其中n是输入个数,m是分类个数。这里的yyy是经过onehot编码后的分类标签。2.2 s原创 2020-11-13 18:38:36 · 660 阅读 · 0 评论 -
逻辑回归推导与python实现
1 简介logistic回归又称logistic回归分析,是一种广义的线性回归分析模型,常用于数据挖掘,疾病自动诊断,经济预测等领域。2 逻辑回归过程逻辑回归大致有两个个过程:线性变化、logistic函数2.1 线性变化Y=xwTY = xw^TY=xwT2.2 logistic函数logistic函数主要是将Y映射到(0,1)之间,并且导数比较好计算g(z)=11+e−zg(z) = \frac{1}{1+e^{-z}}g(z)=1+e−z1将上一步的结果代入,gw(x)=原创 2020-11-13 15:36:58 · 124 阅读 · 0 评论 -
多元线性回归之矩阵求导推导与python实现
多元线性回归表达式其中,X=[1,x1,⋯ ,xn]X=[1,x_1,\cdots,x_n]X=[1,x1,⋯,xn]W=[w0,w1,⋯ ,wn]W=[w_0,w_1,\cdots,w_n]W=[w0,w1,⋯,wn]损失函数其中X,YX,YX,Y是矩阵。梯度下降令H=Y−XWTH=Y-XW^TH=Y−XWTL=HTHL=H^THL=HTH这里涉及到了矩阵求导的知识,具体请查看矩阵求导代码实现import numpy as npimport matpl原创 2020-11-11 20:27:30 · 2277 阅读 · 1 评论 -
3分钟带你掌握一元线性回归
一元线性回归模型:y=hθ(x)=θ0+θ1xy=h_\theta(x)=\theta _0 +\theta _1 xy=hθ(x)=θ0+θ1x输入只包含一个单独的特征。对于样本(x(i),y(i))(x^{(i)},y^{(i)})(x(i),y(i)),模型预测值为:y^(i)=θ0+θ1x(i){\hat y}^{(i)}=\theta _0 +\theta _1 x^{(i)}y^(i)=θ0+θ1x(i)误差/残差:样本真实值与预测值之差e(i)=y(i.原创 2020-11-10 17:30:10 · 483 阅读 · 2 评论 -
【必读】10分钟带你实现线程池C++版
文章目录简单线程池C++实现1 什么是线程池2 线程池分类3 线程池工作流程4 C++实现4.1 ring_buffer.cpp ring_buffer.h4.2 thread_pool.h thread_pool.cpp5 代码解析6 参考资料简单线程池C++实现最近在看如何实现自动求导,然后遇到了线程池,使用线程池对矩阵运算进行加速。1 什么是线程池线程池(thread pool):一种线程使用模式。多线程编程中,线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待原创 2020-11-08 22:24:55 · 800 阅读 · 0 评论 -
【必读】3分钟带你了解标量对矩阵求导方法
这是个人学习笔记,不是原创。来源请查看 “参考文档”文章目录标量对矩阵的求导基础推导复合函数例题参考文档标量对矩阵的求导基础推导定义标量f对矩阵X的导数,定义为 ∂f∂X=[∂f∂Xij]\frac{\partial f}{\partial X} =[\frac{\partial f}{\partial X_{ij}}]∂X∂f=[∂Xij∂f],即f对X逐元素求导排成与X尺寸相同的矩阵。将矩阵导数与微分建立联系:df=∑i=1m∑j=1n∂f∂XijdXij=tr(∂f∂XTdX).原创 2020-11-08 12:58:34 · 1132 阅读 · 0 评论 -
scala解移除元素
object Solution { def removeElement(nums: Array[Int], val0: Int): Int = { var cur=0 var p=0 for(i<-0.to(nums.size-1)){ if(nums(i)==val0){ }else{ nums(cur)=nums(i) .原创 2020-10-29 15:28:30 · 255 阅读 · 0 评论 -
scala双指针法解删除排序数组中的重复项
题目描述给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nums = [0,0,1,1,1,2,2,3,3,4],函数应该返回新的长度 5, 并原创 2020-10-28 16:00:09 · 277 阅读 · 0 评论 -
scala解两数之和问题
题目:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]代码:import scala.collection.mutable.Mapobject Solution { d原创 2020-10-28 01:34:20 · 558 阅读 · 0 评论 -
动态规划解最长公共子序列问题
1 最长公共子序列问题概述1.1 问题定义序列A={a1,a2,...,am}A=\{a_1,a_2,...,a_m\}A={a1,a2,...,am},序列B={b1,b2,...,bn}B=\{b_1,b_2,...,b_n\}B={b1,b2,...,bn}。如果存在一个序列C={c1,c2,...,ck}C=\{c_1,c_2,...,c_k\}C={c1,c2,...,ck},其中ci∈A,Bc_i \in A,Bci∈A,B (i=1,2,...,k)(i=1,2,..原创 2020-10-24 11:00:58 · 981 阅读 · 3 评论 -
多项式拟合之Arnoldi算法[个人记录用,不建议观看]
多项式拟合之Arnoldi算法文章目录多项式拟合之Arnoldi算法多项式拟合一般表达式Krylov 子空间剩余的推导代码测试之前写过一篇多项式拟合的方程法,但是之前版本,包括matlab自带的多项式拟合函数,效果都不是特别好。在这里介绍一种多项式拟合法,由于本人能力有限,所以原理的关键地方也不懂。多项式拟合一般表达式y=a0+a1x+a2x2+⋯+anxn=∑i=0naixi\begin{aligned}y&=a_0+a_1x+a_2x^2+\cdots +a_nx^n\\&原创 2020-09-20 20:18:31 · 1688 阅读 · 0 评论 -
多项式拟合一般方程法详细推导
多项式拟合之一般方程法文章目录多项式拟合之一般方程法1 什么是多项式拟合?2 怎样拟合?3 求bbb正交矩阵QR分解施密特正交化matlab测试函数之前经常会用到多项式拟合来拟合函数关系,十分好用,得出的表达式使用起来超级方便。在此对多项式拟合原理进行分析。1 什么是多项式拟合?y=a0+a1x+a2x2+⋯+anxn=∑i=0naixi\begin{aligned}y&=a_0+a_1x+a_2x^2+\cdots +a_nx^n\\&=\sum_{i=0}^{n}{a_原创 2020-09-20 16:16:24 · 20095 阅读 · 1 评论 -
最简单的超级详细的线性代数库Eigen的安装与入门,新手必看
1 什么是线性代数库简答地说,就是用来 实现 矩阵的运算,向量的运算 等线性代数操作的第三方库。2 Eigen简介Eigen是什么?Eigen 是一个线性算术的C++模板库,包括:vectors, matrices, 以及相关算法。功能强大、快速、优雅以及支持多平台。Eigen是一个开源库,从3.1.1版本开始遵从MPL2许可。除了C++标准库以外,不需要任何其他的依赖包。Eigen使用的CMake建立配置文件和单元测试,并自动安装。如果使用Eigen库,只需包特定模块的的头文件即可。Ei原创 2020-09-10 11:51:35 · 3914 阅读 · 0 评论 -
在Matlab中导入在tensorflow中训练好的模型进行预测
目前博主正在做毕业设计,使用tensorflow2.0进行。由于需要将训练好的模型交给另外一个使用Matlab的同学进行使用,所以查了一些资料,在这里记录下来。其实Matlab官网早就有完整详细的教程,奈何人类的本质就是复读机,所以在这里再次进行讲解。先说一下我的环境:python3.7 tensorflow2.0-gpu matlab 2019a第一步,获得训练好的模型第二步,下载...原创 2020-03-26 12:24:12 · 9938 阅读 · 11 评论 -
找互满数
/****************************************************************Name :CalSumOfDivisor*Fun :求所有约数的和(不包含本身)*InputParaments :a,待求对象*OutputParaments :所有约数的和******************...原创 2020-01-28 22:13:23 · 911 阅读 · 1 评论 -
字符串移位加密解密
加密:将字符串"a-z"往左循环移k位解密:将字符串"a-z"往右循环移k位/****************************************************************Name :StringEncrypt*Fun :字符串加密*InputParaments :data是待加密的数据;k代表循环往左移k...原创 2020-01-26 14:27:42 · 2116 阅读 · 0 评论 -
C语言冒泡排序并返回索引
C语言冒泡排序并返回索引/****************************************************************Name :SwapElement*Fun :交换两个数据*InputParaments :a、b是两个待交换的数据指针*OutputParaments :None***********...原创 2020-01-25 20:27:36 · 1442 阅读 · 0 评论 -
辗转相除求最小公倍数
辗转相除求最小公倍数/****************************************************************Name :MinimumCommonMultiple*Fun :求最小公倍数*InputParaments :m,n是待求的数*OutputParaments :所求的最小公倍数*****...原创 2020-01-25 20:25:32 · 276 阅读 · 0 评论 -
循环有序数组找最小值
循环有序数组找最小值int JudgeAscendingOrDescending(int* data, int len) { if (len < 4) {//无法判断 return -1; } int flag1=0, flag2=0; for (int i = 0; i < 3; i++) { if (data[i] > data[i + 1]) fla...原创 2020-01-25 20:19:44 · 507 阅读 · 0 评论 -
C语言实现字符串逆序
字符串逆序/****************************************************************Name :StringReverse*Fun :字符串逆序*InputParaments :str是待逆序的字符串*OutputParaments :None********************...原创 2020-01-25 20:17:02 · 2697 阅读 · 0 评论 -
C语言实现用快速排序求第k小的元素
用快速排序求第k小的元素/****************************************************************Name :QuickSort_K*Fun :快排找第K小 *InputParaments :data是待排序的数组;low是下限;high是上限;k是第几小*OutputParament...原创 2020-01-25 20:13:07 · 1894 阅读 · 0 评论