摘要: 1.对回溯法的理解 先用树来表现解空间,通过深度优先算法搜索可行解,遍历时用约束函数对树进行剪枝,避免不必要的搜索,然后回溯到一个结点,对下一个的分支进行遍历,直到找到可行解。 2.这门课程的收获 学到了很多有用的算法,比如说:分治法,递归,动态规划,回溯,分支限界法等等,通过这些课的习题提升了我打 阅读全文
posted @ 2020-12-17 00:36 zhang’ 阅读(43) 评论(0) 推荐(0) 编辑
摘要: 1.我对贪心算法的理解:先得到最小子问题的最优解,以此为基础得到下一步规模更大的子问题的最优解,以此类推,最后得到整个问题的最优解 2.我选择的是删数问题 贪心算法是每次删数时选取第一个升序子序列的最后一个数删去,依次处理,最后即可得到最小数 证明设删去数的集合为{n1, n2,n3,...,nn, 阅读全文
posted @ 2020-11-15 09:34 zhang’ 阅读(84) 评论(0) 推荐(0) 编辑
摘要: 单调最长子序列问题 程序如下 import java.util.Scanner; public class Main { static int solution(int[] a, int n) { int[] d = new int[1000]; for(int i = 0; i < n; i++) 阅读全文
posted @ 2020-11-01 00:51 zhang’ 阅读(59) 评论(0) 推荐(0) 编辑
摘要: 1.所谓分治,就是将问题分解成一个个小问题,再进行处理,所以以何种方式对问题进行分解,分解到多小才算合适都是我们需要考虑的问题,这将影响到我们算法的效率,以及算法是否清晰易懂,并且也会影响到我们合并问题的难度,因为分治都原因,大部分时候需要用到递归,但有些情况可以不需要,比如说合并排序可以消除递归, 阅读全文
posted @ 2020-10-03 19:32 zhang’ 阅读(48) 评论(0) 推荐(0) 编辑
摘要: 1.实践题目名称:求逆序对数目 2.问题描述: 对于一个数组,通过进行相邻两个元素的交换,以达到排序的目的,问最少交换次数是多少,要求算法复杂度为O(nlogn) 3.算法描述:求最少交换次数,就是求最大的逆序对数目,可采用合并算法解决,先把数组分成左右两半,再把左半边和右半边排好序之后,将左右两边 阅读全文
posted @ 2020-10-03 18:40 zhang’ 阅读(71) 评论(0) 推荐(0) 编辑