
算法
中都
风习袅袅,盈水展千华,飞檐亭角清铃响;犹记当初,你回眸莞尔,一笑倾城百日香。!
展开
-
归并排序和基数排序
目录归并排序归并排序思想归并排序代码基数排序归并排序归并排序思想归并排序的思想:针对已排序好的两个或两个以上的文件,经由合并的方式,并将其组合为一个大的且已经排好序的文件。时间复杂度: O(nlogn)空间复杂度:O(n)是一种稳定的排序方式实现过程:归并排序代码代码:package javapaixu;import java.util.Arrays;/** ...原创 2018-05-13 11:16:29 · 1035 阅读 · 0 评论 -
快速排序基准位置的选取方法和快速排序优化
一、 快速排序基准位置的选取方法1.固定位置法(就是选取的基准是固定的、一般是数组的第一个元素)2.随机选取基准法/** * 快速排序,递归实现 * 时间复杂度:好:O(无序)(nlog2n),坏(有序):O(n^2) * 空间复杂度: * 稳定性:不稳定 * (每次分割比较均匀的时候 效率较高 */public class LianXi { public sta...原创 2018-10-27 19:29:07 · 4326 阅读 · 7 评论 -
KMP算法原理详解
目录BF算法KMP算法BF算法又叫朴素算法,时间复杂度为O(mn),相比KMP算法比较简单,举个例子,对于给定的主字符串“ababbcabcdabcde”和子串“abcd”;我们用i和j来分别遍历两个字符串,比较两个i,j 对应字符串位置的元素是否相等,如果相等则i++,j++去比较下一个元素,如果i和j 对应位置的元素不相等,则j需要退回到子字符串的0号下标位置,而i需要退回到之前的位置+1...原创 2018-06-13 01:57:34 · 1378 阅读 · 0 评论 -
BF算法和KMP代码
目录:算法原理详解:BF算法KMP算法1、用next数组:2、优化成nextval[]数组:算法原理详解:BF算法/** * @ClassName BF * @Description * @Author lzq * @Date 2018/12/9 19:37 * @Version 1.0 **/public class BF { /** * BF算法 ...原创 2018-06-15 15:36:43 · 1198 阅读 · 1 评论 -
后缀表达式的四则运算和中缀表达式转后缀表达式原理
目录1、 后缀表达式2、中缀表达式转后缀表达式的详细过程1、 后缀表达式后缀表达式又叫逆波兰式,如下: 2+3*5-4*(5-3)的逆波兰式为: 235*+453-*-逆波兰式的计算过程是:将字符依次入栈,直到遇到操作符,遇到操作符后弹出两个字符,计算出结果(并且是上面的那个字符也就是最先出栈的那个字符做减数、除数……而后出栈的那个字符做被减数、被除数……),然后...原创 2018-09-16 14:44:48 · 1230 阅读 · 0 评论 -
中缀表达式变为后缀表达式
/** * @ClassName SymbolicPriority * @Description 符号优先级设置 * @Author lzq * @Date 2018/12/3 12:04 * @Version 1.0 **/public class SymbolicPriority { public static final int LEFT_BRACKET = 4; /...原创 2018-09-22 01:19:18 · 300 阅读 · 0 评论 -
递归
递归算法适合于有明显公式规律的场合递归:趋近于某个临界值循环调用自己本身虽然有代码简洁的优点,但是时间和空间消耗比较大。每一次函数调用都需要在内存栈中分配空间以保存参数,返回地址以及临时变量,而且往栈里面压入数据和弹出都需要时间。 递归还有栈溢出的问题,每个进程的栈容量是有限的注意:对于方法参数列表里面的参数来说,每次递归回来之后(就是一次递归完成返回上一级递归的时候)参数的数值还是...原创 2018-11-29 20:52:32 · 465 阅读 · 0 评论 -
回溯法
回溯法可以看做蛮力法的升级版,它从解决问题每一步的所有可能选项里系统的选择出一个可行的方案解决方案,回溯法非常适合有多个步骤组成的问题,并且每个步骤都有多个选项,当我们在某一步选择了其中一个选项时,就进入下一步,然后又面临新的选项,我们就这样重复选择,直至达到最终状态;用回溯法解决的问题的所有选项可以形象地用树状结构表示,在某一步可能有n个可能的选项,那么该步骤可以看成是树状结构中的一个节点,每...原创 2018-12-06 00:16:23 · 343 阅读 · 0 评论 -
动态规划浅析
目录动态规划思想:1、最长的递增子序列问题:2、最长公共子序列问题:3、0-1背包问题:动态规划思想:可以先了解一下国王的游戏加深对动态规划的理解;如果一个问题是求一个问题的最优解(通常是求最大值或者最小值),而且该问题能够分解成若干个子问题,并且问题之间还有重叠的更小的子问题,就可以考虑用动态规划来解决这个问题;我们在应用动态规划之前要分析能否把大问题分解成小问题,分解后的每个小问题也存...原创 2018-12-06 18:31:18 · 398 阅读 · 0 评论 -
排序总结
目录冒泡排序选择排序插入排序希尔排序快速排序堆排序归并排序基数排序选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。冒泡排序 选择排序 插入排序 希尔排序 快速排序 堆排序 归并排序 基数排序冒泡排序稳定的排序法,最坏时间复杂度和平均时间复杂度为O(n^2),最好时间复杂度为 O(n),只需要一个额外的空间...原创 2018-05-19 14:51:01 · 373 阅读 · 0 评论 -
堆排序
堆排序要从小到大输出,用大根堆:例 堆排序的思想堆排序可以说是选择排序的改进版,它可以减少在选择排序中的比较次数,进而减少排序的时间。例如有如下一组数据68,98,52,32,17,19,14,32把它转化成二叉树:那么把这个二叉树变成堆积树:package javapaixu;import ja...原创 2018-05-17 16:35:31 · 398 阅读 · 0 评论 -
穷举法
基本思想:从所有可能的情况中搜索正确答案;执行步骤:1、对于一种可能的情况,计算其结果;2、判断结果是否满足要求,如果不满足,继续执行第一步来搜索正确答案;如果满足,则找到了一个正确答案;穷举法效率并不高,适合于一些没有明显规律可循的场合,在使用穷举法时,需要明确问题的答案的范围,这样才可以在指定范围内搜索答案,指定范围之后就可以使用循环语句和条件判断语句逐步验证候选答案的正确性,从而得...原创 2018-11-29 21:22:05 · 3352 阅读 · 0 评论 -
较为简单的四种排序方式
目录:1、冒泡排序2、直接插入排序3、选择排序4、希尔排序5、四种排序总结:1、冒泡排序冒泡排序的基本思想:遍历整个数组,在遍历中依次对相邻元素进行比较,如果后者的值比前者的大,就交换它们的位置,然后再次遍历数组,重复上述过程直至把所有元素移到合适位置:动态示意图:冒泡排序: /** * 冒泡排序 * @param array */ ...原创 2018-05-12 19:24:26 · 1193 阅读 · 0 评论 -
分治法
一种化繁为简的算法,一般用于计算步骤比较复杂的问题,通过将问题简化而逐步得到结果;步骤:1、对于一个规模为n的问题,如若该问题比较容易解决,则直接解决,否则,走下面步骤;2、将该问题分解为m个规模较小的子问题,这些子问题相互独立,并且与原问题相同;3、递归的解这些子问题;4、将各子问题的解合并得到原问题的解;实例:8枚金币,其中一枚是假的,外表没什么差别,假币稍微轻一点,找出那个假币...原创 2018-11-29 21:56:30 · 314 阅读 · 0 评论 -
概率算法
思想:根据概率统计的思路来解决问题,结果得到的是近似值;适合于那些没有或者很难计算解析的问题;概率算法基本步骤:1、将问题转换为相应的集合图形S,S的面积容易计算,问题的结果往往对应集合图形中某一部分S1的面积;2、然后向集合图形中随机撒点;3、统计集合图形S和S1中的点数,根据图形S和S1之间的面积关系和各图形中的点数来计算结果;4、判断上述结果是否在需要的精度之内,达到精度输出结果...原创 2018-11-30 12:22:21 · 1363 阅读 · 0 评论 -
查找算法
一、最基本的查找算法1、顺序查找顺序查找比较简单,就是从用第一个元素开始一个一个查找,直到找到所需要的数据或搜索完整个序列,顺序查找主要针对少量的、无规则的数据;效率比较差;2、二分查找要求数据序列是线性的也就是有序的,然后折半查找以提高效率;二、数据结构中的查找算法1、顺序表中的查找算法①按照序号查找节点②按照关键字查找节点代码;2、链表结构中的查找算法一般来说就关键字查询...原创 2018-11-30 13:26:02 · 301 阅读 · 0 评论 -
基本数学问题——多项式的计算
/** * @ClassName TestDemo12 * @Description 多项式计算 * @Author lzq * @Date 2018/11/30 14:18 * @Version 1.0 **/public class TestDemo12 { /** * 一元多项式求解 * * p(x) = array[i]*x^i ...原创 2018-11-30 20:35:29 · 1569 阅读 · 0 评论 -
快速排序
目录快速排序1、递归法2、非递归法快速排序基准位置的选择和快速排序的优化快速排序快速排序就是分割交换的排序方法,是目前公认的最佳排序方法,在最快以及平均情况下,时间复杂度为O(nlogn)。最坏情况(数据本身就有序)就是每次挑中的基准值不是最大就是最小,其时间复杂度为O(n^2);不稳定,在最差情况下的空间复杂度为O(n),而最佳情况下为O(nlogn)。快速排序法是平均运行时间最快的排序法。...原创 2018-05-15 17:28:12 · 2332 阅读 · 0 评论 -
贪婪算法浅析
贪婪算法:贪婪和动态规划不一样,当我们应用贪婪算法解决问题的时候,每一步都可以做出一个贪婪选择,基于这个选择,我们确定能够得到最优解(原因要拿数学公式来证明贪婪选择是正确的);我觉得这个算法其实就是每一步我都要拿到当前最优的解,这样最后得到的结果也是一个最优的解;这个最经典的主要是袋鼠过河这类问题了;一只袋鼠要从河这边跳到河对岸,河很宽,但是河中间打了很多桩子,每隔一米就有一个,每个桩子...原创 2018-12-07 00:17:44 · 588 阅读 · 0 评论