算法
文章平均质量分 54
算法
热血大婶
这个作者很懒,什么都没留下…
展开
-
img2col C++版本代码实现
img2col对于熟悉深度学习的卷积计算的人来说应该并不陌生,它是一种将普通卷积计算转换为一次矩阵乘法计算的算法,相较于直接计算卷积来说能提升计算效率。我所实现的代码,利用分块矩阵乘法的计算特性,将加偏置的步骤合并到一次矩阵乘法中,省去了一步矩阵加法。原创 2022-11-07 13:34:04 · 883 阅读 · 2 评论 -
单词接龙的最短字符串长度:DFS加剪枝
前几天又刷到一单词接龙题,不一样的是这次要求的是能接龙的最短字符串长度,所谓能接龙的意思是最少有两个单词能够接龙(即单词一的尾字母与单词二的首字母一样),如果任意两个单词都无法接起来,输出0。这个题用DFS做是比较简单的,另外如果加些剪枝的话在大单词量的时候效率将会提升很多。剪枝方法:首尾字母相同的单词在最短结果中最多只使用一次,因此对于首尾字母相同的单词,只记录最短单词的长度即可,其它单词可...原创 2020-03-21 20:07:06 · 432 阅读 · 1 评论 -
HDU5023:线段树应用于染色问题
早听说过线段树,但一直没有学习过,昨天终于学习了一下,并且刷了一道线段树的题,记录一下。线段树就是把一个区间分两半,左子树存左半段,右子树存右半段,然后重复这个步骤,直到叶子节点(即区间长度为1的节点),就像下面这个图然后每个节点上可以记录当前节点存储区间的一些信息,比如和,最值,颜色,容易知道这些信息都可以从左右子树获得。下面上题上代码:Problem Descriptio...原创 2020-03-15 10:39:11 · 246 阅读 · 0 评论 -
组合的两种递归算法
组合就是从n个物品中任意选择m个组成一组,下面两种递归算法都可以求出不同的组合,如果待选物品当中有重复的,比如说下面代码中an = new char[]{'1','2','3','4','5'} 变成 an = new char[]{'1','2','2','4','5'},这两种算法依然有效,只不过要加一步去重复。下面上代码:public class Select { static ch原创 2015-09-08 11:00:37 · 5214 阅读 · 0 评论 -
经典算法之动态规划(一):入门级动态规划
终于要写高大上的动态规划啦~~虽然面对高难度的题目还是没底,但是简单的可用一维数组记录各子问题的解的入门级动态规划是已经OK的啦~下面以一个钢条切割的问题为例来讲述动态规划。假设一公司进了一批长为10的钢条,打算切割然后去卖,各种长度的钢条的价格如下表:12345678910158910171720原创 2015-09-29 17:39:20 · 1284 阅读 · 0 评论 -
求一个集合的所有子集(java实现)
求一个集合的所有子集表示从一个集合当中,任取任意项或不取,所能得到的所有结果,比如有一个集合{a,b,c,d},那么{a,b}, {b, d}等都是它的子集,空集也是它的子集,一个具有n 个元素的集合,它的子集共有2^n个,因为对于每个元素都有两种可能:选与不选。下面上代码:public class Subset { public static void main(String[] a原创 2015-09-25 14:07:22 · 6463 阅读 · 0 评论 -
又一个全排列算法
之前就写过两篇关于全排列算法的博文,一个是转来的,另一个是根据STL中一个全排列的原理自己写的,然后今天自己想了一个全排列算法,感觉比之前的两个都容易懂些,记录在此。这个方法同样可以用于元素有重复的情况,只需加一步去重。比如说要排列的元素为:1,1,2,3,此程序会认为1 1 2 3 和 1 1 2 3是不一样的,所以会有两个1 1 2 3,去掉重复的结果就可以了。原创 2015-09-09 15:38:37 · 517 阅读 · 0 评论 -
有1,2,2,3,4,5六个数,要求输出他们组合的全排列,4不能在第三位,5和3不能相邻
之前面试的时候做过这个题目,当时用了很笨的穷举法,今天在网上看到了一个感觉比较高级的递归法,学习一下。不过话说算法复杂度不一定比穷举法低。以下是原文(略有修改)。其实在这个问题上看似很简单,但是对数组和字符处理不够熟练,就会显的很麻烦. public static void Main() { char[] number = new char[]转载 2013-03-01 22:03:25 · 1664 阅读 · 0 评论 -
经典算法之0-1背包问题
0-1背包算法是非常经典的一个算法问题,可惜我一直都只会它的递归算法,而非递归算法是今天刚刚学会的,在此记录一下。定义一个二维数组 maxValues[ ][ ] 用来记录最大价值,maxValues[i][V]表示从前i 件物品中选择物品放入容量为V 的背包可以得到的最大价值。那么就有方程 maxValues[i][V] = max{ maxValues[i-1][V], maxValues原创 2015-08-28 16:14:52 · 2307 阅读 · 0 评论 -
求最大公约数(GCD)和最小公倍数(LCM)的几个方法
private static int LCM1(int m, int n) { if(m>n) return LCM1(n, m); int i=0; while(++i<m){ if(n*i%m==0) return n*i; } return m*n; } private static int LCM2(int m, int n){ if(m原创 2015-04-30 14:59:40 · 2350 阅读 · 1 评论 -
stl next_permutation的全排列原理及实现样例
之前一直在找一个经典的全排列算法,后得知STL中就有,根据它的原理写了个样例,发现即使元素有重复的情况下得出的全排列也不会包含重复序列。在此记录一下。函数实现原理如下:在已经从小到大排序好的当前序列中,从尾端往前寻找两个相邻元素,前一个记为*i,后一个记为*ii,并且满足*i 代码如下: public class quanPaiLie { public static v原创 2013-06-27 14:03:58 · 1151 阅读 · 0 评论 -
perfect shuffle 算法的一个线性复杂度实现
今天又发现一个关于完美洗牌的算法。这个比较简单一些,由 microsoft的Peiyush Jain提出。 原论文: A Simple In-Place Algorithm for In-Shuffle. Peiyush Jain, Microsoft Corporation. 转载 2013-05-21 17:33:41 · 810 阅读 · 0 评论 -
欧几里得扩展算法详解及POJ1061
最初是在PKU的acm上刷题,刚接触1061青蛙的约会这道题的时候写了个简单暴力的方法,在一定范围内感觉挺对的,但是提交后WA了,于是在一起K题的战友那里第一次听说了这个算法——欧几里得扩展算法。费了很大的劲之后,终于有些了解这个算法了,在这记录下。所谓扩展欧几里得算法就是给定一组a,b,求aX+bY=gcd(a,b)的解(gcd表示最大公约数,根据数论中的知识,这个方程一定有解)。下面是求解原创 2013-07-04 13:37:10 · 2545 阅读 · 0 评论 -
趣味算法之怎样订饭最省钱
近来很多同事都在网上订餐,网上订餐基本都会有优惠,不同家的优惠策略不同,但大体上都是三种策略,比如有几家是满15减6,满30减15,满50减20。然后我突发奇想,何不写个程序,来根据餐厅的优惠政策计算下怎样拼饭最省钱呢?于是有了下面代码:import java.util.ArrayList;import java.util.Scanner;public class Lunch {原创 2015-07-13 17:04:41 · 783 阅读 · 0 评论 -
经典算法之图的最短路径(一):Dijkstra算法
Dijkstra算法可以说基本上每一本有讲到图的最短路径的书上都会有的一个算法,但基本上都是讲原理和伪代码,今天自己用Java代码给实现了一下,记录在此。Dijkstra算法只是解决某些图的最短路径问题,这些图需要满足以下条件:权值非负、有向图。并且该算法只适用于求单源点最短路径,即起始点只是固定的某一个点,当然了,如果想求多源点最短路径,多用几次Dijkstra算法也是能求出来的。该算法原创 2015-09-01 15:50:47 · 4368 阅读 · 0 评论 -
经典算法之图的最短路径(二):Bellman_Ford算法
Bellman_Ford算法也是一个求图的最短路径的非常经典的算法,它适用于求单源最短路径,相比于同样用于单源最短路径的Dijkstra算法,它的适用范围更广,它可以用于有向图和无向图,并且权值可以为负,如果存在负权回路,可输出提示。算法的流程就是:每次遍历图中所有边进行松弛(所谓的松弛是这样的——比如说存在一条边e(u,v),权值为w(u,v),如果d(v)>d(u)+w(u,v),则让d(原创 2015-09-02 15:22:50 · 2043 阅读 · 0 评论 -
扩展欧几里德算法 线性同余方程 中国剩余定理
哎呀,经过这两三天的奋斗,终于搞懂了一类问题——用扩展欧几里德算法求解线性同余方程。其实这类问题应该是比较基础也比较简单的,但我由于几乎没有一点数论的基础,所以还是难为了我不久,等现在彻底搞明白以后再看真的觉得是挺简单的,有关这类问题的题目也不是很多,我就做了3个。下面把这类问题的资料整理一下,方便以后再看。 欧几里德算法 欧几里德算法又称辗转相除法,用于计算两个整数a,b转载 2013-06-30 11:41:09 · 1118 阅读 · 0 评论