
算法与数据结构
每一个不曾起舞的日子,都是对生命的辜负
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
分支限界法总结
1. 算法思想常以广度优先或最小代价优先的方式搜索问题的解空间树 回溯法的求解目标是找出解空间树中满足约束条件的所有解,而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解。...原创 2021-10-26 14:38:43 · 493 阅读 · 0 评论 -
回溯算法总结
1. 算法思想在包含问题的所有解的解空间树中,按照深度优先搜索的策略,从根节点触发深度探索解空间树。 当探索到某一节点时,要先判断该节点是否包含问题的解,如果包含就继续探索下去,否则就剪枝,逐层向其祖先节点回溯 本质是穷举所有可能,2. 解题步骤针对所给问题,确定问题的解空间 首先应明确定义问题的解空间,问题的解空间应至少包含问题的一个解 确定节点的扩展搜索规则 以深度优先方式搜索解空间,并在搜索过程中利用剪枝函数避免无效搜索...原创 2021-10-26 14:06:12 · 99 阅读 · 0 评论 -
贪心算法总结
1. 算法的基本思想对问题求解时,总是选择当前看起来最好的选择。即不从整体最优上加以考虑,它所做的仅是在某种意义上的局部最优解 贪心算法不是对所有问题都能得到整体最优解,选择贪心的前提必须具备无后效性,即某个状态以后的过程不会影响以前的状态,只与当前状态有关。 贪心算法的适用前提:局部最优策略能导致全局最优解。2. 贪心算法的基本思路划分子问题 求解子问题的最优解(局部最优解) 把子问题的解局部最优解合成原来问题的全局最优解...原创 2021-10-26 11:48:12 · 139 阅读 · 0 评论 -
分治算法总结
1. 分支思想将一个难以直接解决的大问题,分割成一些规模较小的相同问题,从而各个击破,分而治之。 分支包括两个部分 划分子问题:递归求解子问题 合并子问题的解得到原问题的解 2. 分治适用情况该问题的规模缩小到一定程度后就可以很容易解决 该问题具有最优子结构性质,即可以分级为若干规模较小的相同问题 利用子问题的解可以合并成原问题的解 该问题分解出来的各个子问题应该是相互独立的,即子问题之间不包含公共的子子问题第二条是分治法的前提(也是动态规划的前提),该特征反映了递归思想的应用原创 2021-10-26 10:49:30 · 152 阅读 · 0 评论 -
动态规划总结
1.动态规划要素确定dp数组以及下标的含义 确定递推公式 dp数组如何初始化 确定遍历顺序(后面的解需要借助前面的局部解)原创 2021-10-13 16:00:44 · 103 阅读 · 0 评论 -
数据结构之数组
1. 数组的索引数据的索引从0开始。 数据的索引可以有语义。也可以没有语义 如果数据索引有语义,那么可以看成一个map集合。 其key为数组索引,value为索引对应的值。 索引语义应该可以转换为数值,而且数值的范围不能太广。 int[] map=new int[128];String str="hello world";for(int i=0;i<str.length();i++){ map[str.charAt(i)]++;}2. 数组的使用利用数组作为栈原创 2021-10-06 20:52:32 · 114 阅读 · 0 评论 -
递归与迭代
1. 递归1. 定义:函数自己调用自己2. 递归条件原始问题和子问题实现的功能一样(什么意思,函数是有功能的,即原始问题和子问题是调用同一个函数,只不过参数不同而已),并且子问题更简单,原始问题可以写成对子问题的加工操作。 不能无限调用自身,需要由递归边界,化简为非递归状况处理。3. 递归的基本原理每一级的函数调用都有自己的变量 每次一函数调用都会有一次返回 递归函数中,先执行递归调用前的语句(在递归前进行逻辑处理),再执行递归调用语句(子问题的逻辑处理),再执行递归调用后的语句(原创 2021-08-18 13:34:27 · 139 阅读 · 0 评论