
基础算法
文章平均质量分 70
jahup
gitee: https://gitee.com/jahup
展开
-
线段树(从入门到入坟)
其实网上已经有很多很好的博客了,我在写这篇文章前也看了不少(为什么说是看了不少,可能是因为这些博主对线段树的掌握已经很透彻了,他们代码的写法追求的是尽量从简,可能导致我们这些初学者不好了解,故我打算写一篇博客站在我们初学者的角度来写)此博客可能借鉴以下几篇博客比较经典的图片或代码以及思路;{https://www.cnblogs.com/jason2003/p/9676729.htmlhtt...原创 2020-03-22 17:51:34 · 772 阅读 · 2 评论 -
梯度下降法(Gradient descent)
目录1:何为梯度下降1.1 简单描述1.21.3 假设2.符号说明3.具体步骤4.简单的证明5.优化5.1 为何需要优化5.1.1如何影响效率参考文献1:何为梯度下降1.1 简单描述通过迭代的思想解决函数求最值的问题1.21.3 假设假设存在一个可微分函数f(x,y)f(x,y)f(x,y),当然不仅仅局限于二次函数2.符号说明符号意义η\etaη学习指数3.具体步骤一:随机取点随机在函数上取一点(x0,y0)(x_0,y_0)(x0,y0)二:原创 2021-03-04 13:08:07 · 1868 阅读 · 11 评论 -
模拟退火算法
此博客根据清风老师的视频编写(https://www.bilibili.com/video/BV1hK41157JL?t=2141)博客中会用到清风老师教案里的相关图片1.问题的描述:我们先看看以下几个问题学过dp的同学会发现,上面四个问题中的后三个问题好像基本都能通过dp求解,没错确实可以,但这里我们看看另一种做法.我们发现这些问题都可以转化为:求某个目标函数最值的问题,一般问题中我们求的都是最小值,如果碰到球最大值的情况也能加一个负号转化为求最小值.2.初步的想法:我们既然是求一原创 2020-10-11 19:12:06 · 1605 阅读 · 1 评论 -
分枝定界法
1.分支界定法(可求纯或混合整数线性规划):2.割平面法(可求纯或混合整数线性规划):3.隐枚举法(求"0-1"整数规划):4.匈牙利法—解决指派问题(“0-1”规划特殊情形):5.蒙特卡洛法(求解各种类型的规划)...原创 2021-01-25 09:20:00 · 1359 阅读 · 2 评论 -
模拟退火算法解决旅行商问题
1.旅行商问题简介旅行推销员问题(英语:Travelling salesman problem, TSP)是这样一个问题:给定一系列城市和每对城市之间的距离,求解访问每一座城市一次并回到起始城市的最短回路。2.解决思路打过acm的同学应该都知道一般这种问题可以通过状态压缩dp来求解.如果通过模拟退火(相信你已经知道什么是模拟退货)解决它的难点在于如何生成新解2.1生成新解的方法:$交换法:随机选取2个点进行交换$移位法:随机选取3个点将前2个点之间的点移动到第3个点后$倒置法:随机选取原创 2020-10-12 15:32:42 · 1042 阅读 · 0 评论 -
整数的离散化
(1)去重 (2)通过二分原创 2021-01-14 16:10:41 · 631 阅读 · 0 评论 -
二分图为什么不能存在奇数环
1.什么是二分图2.为什么不能存在奇数环可见,通过环推一圈下来,第一个点是矛盾的,故二分图不能存在奇数环原创 2021-01-12 16:52:24 · 1978 阅读 · 0 评论 -
建树的几种常用方法
方法一:此方法适用条件:1.当我们遍历这颗树时只需要从父节点查找到子节点,不需要从子节点查找到父节点.2.所建树为一颗二叉树实现代码:class Tree{ int value;//代表该点的权值 int left_son;//左儿子编号 int right_son;//右儿子编号 int leftSide_value;//连接左儿子的边的权值 int rightSide_value;//连接右儿子边的权值}根据题目描述进行输入.如依次输入 节点原创 2020-10-03 12:19:44 · 6767 阅读 · 2 评论 -
树形dp讲解(你不会后悔点进来)
希望在看这篇文章前你已经对基础的dp有了一定的了解,就算学的不好也能看懂这篇讲解我们先以一道例题开头:树形dp知名入门例题:没有上司的舞会题目链接树形dp就是以树为基础的dp(树就不用我说了吧,不关是数据结构还是离散数学好像都要学)这里我们说说怎么存树;#include<iostream>#include<math.h>using namespace std;const int N=6000+10;int last[N],ne[N],edge[N],cnt;原创 2020-10-23 17:03:56 · 6058 阅读 · 4 评论 -
最短路算法(Floyd,Dijkstra,.Bellman-Ford)
最近复习了下最短路,顺便写篇博客加强下自己的印象1.Floyd算法我认为是最短路最简单的算法,但一般来说简单的都不是什么好东西,因为复杂度比较高;*核心思想:要缩短两点之间的距离,就需要第三个顶点来松弛。*具体步骤:依次用1到n号顶点做中转,松弛任意两点之间的距离。因为这个算法比较简单,就直接上代码了;#include<iostream>using namespace std;const int N=2000;int main(){ int ma原创 2020-06-27 17:00:36 · 1905 阅读 · 2 评论 -
6大排序方法(你不会后悔点进来)
1.冒泡排序我们直接看例子假设有5个数:5 4 3 2 1我们要将它按从小到大的顺序排列,正常的思维我们会这么做5 4 3 2 14 5 3 2 14 3 5 2 13 4 5 2 13 4 2 5 1…一次比较相邻的2个数,将小的换到前面class sort{ static void onesort(int a[]){//要排序的数组 boolean flag=true;//判断交换是否还需要继续进行 while (flag) {原创 2020-06-25 12:20:57 · 1770 阅读 · 0 评论