自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 收藏
  • 关注

原创 为什么梯度是函数值上升最快的方向

文章目录导数偏导数方向导数梯度导数在说梯度之前,我们先得到先知道导数->偏导->方向导数,然后才能了解梯度和为什么梯度方向是函数值上升最快的方向对于导数,我们要明确,导数除了代表函数在某点的切线的斜率外,还表示函数在该点的变化率f(x0)′=limΔx→0ΔyΔx=limΔx→0f(x0+Δx)−f(x0)Δxf(x_0)' = lim_{\Delta x\rightarrow 0}\frac{\Delta y}{\Delta x} = lim_{\Delta x\rightarrow

2021-05-29 11:02:41 1099 1

原创 【算法】堆排序与优先队列——傻瓜式教学

q

2020-12-06 17:55:17 451 2

原创 【算法】最小生成树——Prim和Kruskal算法

一.概述 给定一个图G=(V,E),我们用(u, v)表示一条边,w(u, v)表示边(u, v)的权重,如果存在图T为G的子集,且T里面没有环,如果使得w(T)最小,则T为G的最小生成树(Minimum Spanning Tree(MST) ) 在对图G的最小生成树的求解中,我们通常会接触到两个算法,一个是Kruskal,一个是Prim算法,下面我们就来了解下这两个算法的原理和孰优孰劣吧!二.Prim Algorithm(Prim算法) Prim算法是采用从点方面考虑来构建MST的一种算法,Pri

2020-12-04 13:57:32 26148 3

原创 【算法】线段树详解

一.线段树概述

2020-12-02 14:09:09 1411 2

原创 【算法】单源最短路径——dijkstra算法

一,概念单源最短路径给定一个带权有向图G=(V,E),其中每条边的权是一个实数。另外,还给定V中的一个顶点,称为源。要计算从源到其他所有各顶点的最短路径长度。这里的长度就是指路上各边权之和。这个问题通常称为单源最短路径问题。dijkstra算法简介迪杰斯特拉算法(Dijkstra),是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。迪杰斯特拉算法主要特点是从起始点开始,采用贪心算法的策略,每次遍历到始点距离最近且未访问过的顶点的邻接节点,直到扩展到终点为止。需要注意的是,dij

2020-11-29 13:29:53 28724 7

原创 【算法】ST表——静态RMQ问题的求法

一.概念

2020-11-28 14:33:22 214

原创 【算法】分块初步详解

一.概念    分块算法,顾名思义,就是把问题分成多个块,然后按块来解决问题。适用的范围很广,通常是用在单点查询和某一区间的加减乘除。说白了,就是另类的一种暴力算法罢了二.分块的编写通过例题来讲解会更容易理解点,也便于我写编写的思路例子很简单,给定一组数据num[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16},求在[2,9]范围内都加上一个数 2,然后查询num[5]的值1.块的长度在分块算法中,我们通常都是设每一个块

2020-11-27 00:07:09 3027 3

原创 【算法基础】并查集(傻瓜式教学)

一.概念       并查集(Disjoint Set),在一些有N个元素的集合应用问题中,通常应用于判断一个图里是否有环或者两个结点是否在同一个集合里。二.图解首先对于这么一个图,我们可以随机遍历图的每一条边我们可以设 parent[i] = x 表示结点 i 的父节点为 x并且初始化 parent [ i ] = i这样一开始parent数组为然后就遍历每条边,记录每个结点的父节点但是要注意的是,当我们随机遍历的时

2020-11-26 00:18:58 1055 3

原创 C++实现 蓝桥杯 后缀表达式

题目描述简单来说给你一串数字,这串数字可以是负数,n个加号和m个减号,问你怎么搭配能得到最大的值解题思路前略: 这题在我搞清楚前我觉得有点难的,然后我看了很多题解然后弄明白后发现是真的简单...再说之前我们必须要先明确一件事 后缀表达式是可以带括号的 即一般的后缀表达式23+1-其实是((2+3)-1)简单来说题目有两种情况没有负号的情况这个情况最简单,直接全部加起来就行了有负号的情况这个时候我们需要想想,给你一串数字,怎么减才能得到最大的值呢?很简单,就是 {大的值} - {小的值}

2020-10-11 15:20:24 582 1

原创 C++实现 蓝桥杯 剪邮票

题目有12张连在一起的12生肖的邮票。现在你要从中剪下5张来,要求必须是连着的。(仅仅连接一个角不算相连)请你计算,一共有多少种不同的剪取方法。我的思路其实一开始看这题的时候我理所当然的认为这题用dfs搜的完事了,写好代码往上就往上提交了,然后就错了然后我就发现事情没那么简单,因为邮票的图形可以是这样的这样用搜索可搜不出来,所以我转变思路,可以先找出5个小邮票,如果能拼成一个大的邮票,则答案加1.于是代码就出来了,其他说明我都放在代码上了(#include <iostream>#

2020-10-07 14:23:24 453

原创 C++实现 蓝桥杯 k倍区间

这里是题目链接k倍区间题目大意简单来说,给你一个数组和一个数k,让你满足数组中连续区间和为k的倍数的区间有几个思路看到题目的连续区间的时候,就知道这题使用前缀和来写的,然后我喜闻乐见的TLE了 ,咳咳,看了题目100000组数据,那n2数据妥妥的过不了了,只能是看看怎么画了,于是想到一个定理,(A+B)mod k = A mod k + B mod k。 (A-B)mod k= A mod k - B mod k这样就有思路了为了说明方便,我们设这个数组有{1,2,3,4,5},k为2首先

2020-10-04 15:03:14 772

原创 C++实现 蓝桥杯 油漆面积

这里是原题链接油漆面积这题其实非常简单的,但是我发现怎么做都会报错,结果查了下才知道有两个坑1.作为判断用的数组不能用int,不然会报内存超限制错误2.第一组数据是有误的,需要改下,具体看代码#include <iostream>#include <cstring>using namespace std;const int MAX = 10000+5;bool g[MAX][MAX];int main() { memset(g,0,sizeof(g));

2020-10-03 14:11:35 342 1

原创 C++实现 蓝桥杯包子凑数

这里是原题链接包子凑数解题思路1.如果所有包子的最大公约数不为1的时候,不能凑出的数有无限多个2.如果最大公约数为1,则对于互素的两个数p,q,px+qy不能凑出的最大值为pq-p-q,这样知道不能凑出的最大值,接下来就是在一个范围内找不能凑出的数了,就成了最大背包问题了#include <iostream>using namespace std;const int MAXN = 100+5;const int MAXV = 10000+5;int a[MAXN],n,dp[

2020-10-02 14:08:16 468

原创 C++实现 蓝桥杯的正则问题

这里是原题链接正则问题这个问题简单来说就是让你算x的最大的个数,对于这种表达式的题目(我觉得都很像),要么用stack来写,要么用递归。#include <iostream>#include <algorithm>using namespace std;int dfs(){ char ch; int ans=0,cnt=0;//cnt是当前x的数目 while(1){ ch=getchar(); if(ch=='('){ cnt+=dfs();

2020-10-02 12:53:25 136

原创 洛谷 P1596 Lake Counting S

P1596题解题目链接这道题的难度不大,输入一个n*m大小的图,输入为W代表这里有一滩水,‘.‘表示沙子,水的周围8个格子都算一个水坑,求总共有几个水坑,简单的来说就是求这张图的连通块的个数。思路面对这类求连通块个数的问题,我们可以对一个找到的W进行搜索,如果周围8个格子又有一个W,则递归搜索,虽然不知道为什么这潭水要在周围8个格子才能算一个水坑,我一开始以为是两个水坑有重叠就算一个然后我们把搜索到的用‘ . ’覆盖掉,这样被算进一个水坑的W就不会重复计算。以下是代码,上面说清楚了应该不需要注

2020-09-27 20:07:36 466

原创 洛谷 P2036 PERKET

这里是原题链接P2036这道题难度不大,大概意思就是输入一个数n,让你输入n个配料,每个配料有两种属性分别为酸和苦,配料的使用中酸是累乘的,而苦是累加的,让你在这n个配料选出几个使得酸和苦的差值最小首先想到的是使用搜索算法,数据范围不大,n最多也就取10。然后注意到,我们的搜索的层数是不确定的,我们可以选择一个配料,也可以选择n个配料,但最后要找出差值最小的那一个数,所有我们可以使用IDA*算法,搜索的过程中每个结点的信息应该有当前的总酸度,总苦度,还有当前选择了几个配料=以下是代码,具体含义都在代

2020-09-27 13:20:03 440 2

原创 排序算法之快速排序

快速排序首先我们来看看百度百科上是怎么说快速排序的:快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列简单的来说,就是先确定一个key,然后分别把比key大和比key小的数分配到两边,然后递归求解,这样得到的结果一定是一个有序列。看图理解快一点假设一开始的序列是这样的,我们假设要排

2020-09-21 22:34:24 147 2

原创 排序算法之归并排序

归并排序归并排序,是一种基于分治思想的一种有效的,稳定的排序算法。它的时间复杂度为O(nlogn),空间复杂度为T(n),这里主要讲述一下二路归并排序对于归并排序,简单的分为三步走划分问题:把序列分成左右两边元素尽量相等的两个序列递归求解:把分出的两个序列分别排序合并问题:把两个已经排序好的序列合并成一个下面是图解自己画的,可能丑了不要打我首先是划分的过程,这一部分直接通过递归就能做到了划分过程的代码void MergeSort(int arr[],int left,int right

2020-09-20 19:49:46 2358 3

原创 对于KMP算法的一些自我理解

说明KMP算法要说难不难,说简单也不简单,不懂的时候完全不懂。看了好多博客说理解后又发现是如此简单,在KMP算法中最重要的也就是关于next数组的求解了,这也是最主要的难点,所以便打算把我自己的理解写出来用于加深自己的印象首先对于一个算法,首先我们要明确KMP做什么?还有怎么实现的问题?KMP算法是由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,用于字符串模式匹配的算法。例如在一个字符串里找另一个字符串出现的位置。我们设有两个字符串变量p和t,我们要在p中找到t在p出现的所有位

2020-09-11 11:49:47 256 1

空空如也

空空如也

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

TA关注的人

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