
算法与数据结构
将自己平时用到和学到的算法和数据结构,在这里做个记录
ItsWalter
这个作者很懒,什么都没留下…
展开
-
Java 栈的应用场景
栈的特点就是先进后出,后进先出,分别用push和pop表示进栈和出栈操作。那么栈的应用场景有很多,比如: 子程序的调用:在跳往子程序前,会将下个指令的地址存到堆栈中,直到子程序执行完后再将地址取出,以回到原来的程序中。 处理递归调用:和子程序的调用类似,只是出了存储下一个指令的地址外,也将参数、区域变量等数据存入堆栈中。 逆序输出。 表达式的转换[中缀表达式转后缀表达式]与求值 二叉树的遍历。 ...原创 2019-08-23 10:07:57 · 2509 阅读 · 0 评论 -
Java递归的应用场景
简单来说,递归就是自己调用自己。那么它适合解决什么样的问题呢? 各种数学问题:8皇后问题,汉诺塔,阶乘,迷宫问题等 各种算法中也会使用到递归,比如快速排序,归并排序,二分查找,分治算法等 将用栈解决的问题,转换成有递归代码实现,这样使代码更加简洁 我们在使用递归时,也需要注意一些问题。 执行一个方法时,就创建一个新的受保护的独立空间(栈空间) 方法的局部变量是独立的,不会相互影响。但是如果调...原创 2019-08-23 18:38:50 · 658 阅读 · 0 评论 -
分治算法
分治算法,大家都知道就是“分而治之”,把一个复杂的问题分解成两个或者更多的相同或类似的子问题,再把子问题分成更小的子问题。。。直到最后子问题可以简单的直接求解,原问题的解就是子问题的解得合并。这个算法看似很简单,难点在于如何分解复杂问题。这个技巧是很多高效算法的基础: 二分搜索 大整数乘法 棋盘覆盖 归并排序 快速排序 线性时间选择 最接近点对问题 循环赛日程表 汉诺塔问题 。。。 ...原创 2019-09-02 15:21:30 · 139 阅读 · 0 评论 -
动态规划算法
动态规划算法的核心思想是:将大问题划分为小问题进行解决,从而一步步获取最优解的处理算法。 动态规划算法与分治算法类似,其基本思想也是将带求解问题分解成若干子问题,先求解子问题,然后从这些字问题的解得到原问题的解。 但是与分治算法不同,适用于动态规划求加的问题,经分解得到的子问题往往不是相互独立的。(即下一个子阶段的求解是建立在上一个子阶段的解得基础上,进行进一步的求解) 动态规划可以通过填表的方...原创 2019-09-02 15:31:56 · 150 阅读 · 0 评论 -
贪心算法
贪心算法又叫贪婪算法,是指对问题进行求解时,在每一步选择中都采取最好或最优(即最有利)的选择,从而希望能够导致结果是最好或者最优的算法。 但是贪心算法所得到的的结果不一定是最优的结果(当然有时回事最优解),但其结果都是相对接近最优解的结果。 贪心算法最佳应用-集合覆盖 假设存在如下表所示的需要付费的广播台,以及广播台信号可以覆盖的地区,如何选择最少的广播台,让所有的地区都可以接收到信号 广...原创 2019-09-03 10:13:01 · 161 阅读 · 0 评论 -
最小生成树算法:prim算法和kruskal算法
prim算法又称普利姆算法,目的是在加权连通图中搜索最小生成树。特点是由顶点出发选边,依次选取两个顶点集合之间权值最小的边,两个顶点集合随之变化,最终形成最小生成树。 一个加权连通图,其中顶点集合为V,边集合为E; 标记访问过的顶点集合为Vnew,选取的边集合为Enew,初始化都为空 假设从V中的任一顶点x开始,则Vnew = {x} 重复下列操作,直到Vnew = V。如果顶点有n个,则下面循...原创 2019-09-05 17:46:55 · 854 阅读 · 0 评论