![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
ydx115600497
这个作者很懒,什么都没留下…
展开
-
8大排序算法
http://www.cnblogs.com/qqzy168/archive/2013/08/03/3219201.html原创 2016-11-10 15:05:15 · 205 阅读 · 0 评论 -
二分查找算法(递归与非递归实现)
二分查找递归实现的原理:将数组分为三部分,依次是中值(所谓的中值就是数组中间位置的那个值)前,中值,中值后;将要查找的值和数组的中值进行比较,若小于中值则在中值前面找,若大于中值则在中值后面找,等于中值时直接返回。然后依次是一个递归过程。递归查找的代码实现:/** * 递归方法实现二分查找法. * @param Array数组 * @param low 数组第一位置 * @param原创 2016-11-15 17:01:31 · 595 阅读 · 0 评论 -
分治算法--汉诺塔问题
一、问题描述 1.有三根杆子A,B,C。A杆上有若干碟子 2.每次移动一块碟子,小的只能叠在大的上面 3.把所有碟子从A杆全部移到C杆上二、问题分析 将A盘中的若干个盘子分为两部分,下面一个,和上面的全部两个部分。将上面的全部盘子借助C转移到B,将A的最后一个转移到C,最后B中的借助A转移到C即可。 由上面的分析,得出是一个递归的过程。三、用JAVA代码实现之package com.exa原创 2016-11-15 16:47:02 · 2341 阅读 · 0 评论 -
分治算法--大整数乘法
大整数乘法:就是乘法的两个乘数比较大,最后结果超过了整型甚至长整型的最大范围,此时如果需要得到精确结果,就不能常规的使用乘号直接计算了。没错,就需要采用分治的思想,将乘数“分割”,将大整数计算转换为小整数计算。 可以通过列表的形式来进行大整数的乘法,通过数组来保存列表中的数据。结合http://blog.csdn.net/tjsinor2008/article/details/5625849计算87原创 2016-11-15 16:30:04 · 7492 阅读 · 0 评论 -
分治算法
一、基本概念在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)……二、基本思想及策略分治法的设计思想是:将一个难以直接解决的大问题,分割成一原创 2016-11-15 15:46:02 · 754 阅读 · 0 评论 -
匈牙利算法
匈牙利算法:基于Hall定理中充分性证明的思想,它是二部图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的算法。例子:N男N女的婚配问题。http://blog.csdn.net/dark_scope/article/details/8880547这就是匈牙利算法的流程,其中找妹子是个递归的过程,最最关键的字就是“腾”字 其原则大概是:有机会上,没机会创造机会也原创 2016-11-15 15:26:51 · 290 阅读 · 0 评论 -
线性查找算法
线性查找主要分以下三种情况: (1)线性查找 (2)二分查找(折半查找) (3)分块查找(1)线性查找 在待查数据中进行顺序性轮询查找,当存在待查的数据时返回当前数据索引位置,如果不存在则返回不存在表示-1平均查找长度: 1/2(n+i) 计算方式:为当前元素查找到的概率乘上所匹配的次数时间复杂度: O(N)Java代码实现:public class 线性查找 { public s原创 2016-11-16 20:56:42 · 5879 阅读 · 1 评论 -
约瑟夫环问题
约瑟夫环:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。 从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数, 数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。JAVA代码实现/** * * @param totalNum 总人数 * @param countNum 报数大小 */ public原创 2016-11-16 17:03:55 · 293 阅读 · 0 评论 -
求最大公约数--递归法实现
求最大公约数:public static int gcd(int m, int n) { if(m % n == 0) { return n; } else { return gcd(n, m%n); } }m,n最小公倍数为:m*n/gcd原创 2016-11-16 16:58:36 · 405 阅读 · 0 评论 -
快速求幂算法
举个栗子:3 ^ 999 = 3 * 3 * 3 * … * 3直接乘要做998次乘法。但事实上可以这样做,先求出2^k次幂:3 ^ 2 = 3 * 3 3 ^ 4 = (3 ^ 2) * (3 ^ 2) 3 ^ 8 = (3 ^ 4) * (3 ^ 4) 3 ^ 16 = (3 ^ 8) * (3 ^ 8) 3 ^ 32 = (3 ^ 16) * (3 ^ 16) 3 ^ 64 = (3原创 2016-11-16 16:31:26 · 417 阅读 · 0 评论 -
动态规划--走台阶问题
问题描述 一个人上台阶,台阶有n级,他可以一次上1级,可以一次上2级,也可以一次上3级,问上这个n级的台阶一共有多少种上法。问题分析 首先我们先归纳分析一下一些比较简单的情况: 如果台阶只有1级,那么他一次就可以上去,很显然,上法只有1种; 如果台阶有2级,那么他可以1-1,也可以直接上到2级,这时一共有2种上法; 如果台阶有3级,那么他可以1-1-1,可以1-2,可以2-1,也可以直接上原创 2016-11-16 10:46:53 · 4032 阅读 · 0 评论 -
动态规划--求最大连续子串之和
给定由n个整数(可能为负整数)组成的序列A1,A2,A3,…,An,求该序列的连续子段的和的最大值。 例如 {-4, 11,-2, 13,-7,-3,12} 的最大子段和为24JAVA代码实现:package com.example;public class 最大连续子串之和 { /** * @param args */ public static void原创 2016-11-15 23:08:27 · 1878 阅读 · 0 评论 -
动态规划算法
一、基本概念 动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。二、基本思想与策略 基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策原创 2016-11-15 17:17:37 · 202 阅读 · 0 评论