算法分析
Y~哈哈哈
这个作者很懒,什么都没留下…
展开
-
分治法——全排列、整数划分、最近点对问题、棋盘覆盖
一、分治法的求解过程:(1)划分:既然是分治,当然需要把规模为n的原问题划分为k个规模较小的子问题,并尽量使这k个子问题的规模大致相同。(2)求解子问题:各子问题的解法与原问题的解法通常是相同的,可以用递归的方法求解各个子问题,有时递归处理也可以用循环来实现。(3)合并:把各个子问题的解合并起来,合并的代价因情况不同有很大差异,分治算法的有效性很大程度上依赖于合并的实现。典型的递推...原创 2019-03-30 18:20:45 · 654 阅读 · 0 评论 -
动态规划——连续子段和
一、动态规划的递归式:n是这组数的长度公式意义:当以第 i-1个数字结尾的子数组中所有数字的和小于0时,如果把这个负数与第 i 个数累加,得到的结果比第 i 个数字本身还要小,所以这种情况下以第 i 个数字结尾的子数组就是第 i 个数字本身。如果以第 i-1 个数字结尾的子数组中所有数字的和大于0,与第 i 个数字累加就得到以第 i个数字结尾的子数组中所有数字的和二、时间复杂度:O(...原创 2019-05-14 17:35:31 · 505 阅读 · 0 评论 -
动态规划——背包问题
原创 2019-05-14 22:11:44 · 217 阅读 · 0 评论 -
斐波那契 跟 动态规划的联系
上图画出了斐波那契的运算关系,我们发现 fib(4)、fib(3) 都是重复计算了,那么按照这样的方式计算完之后效率就很低很低了,时间复杂度为 O(2^n),如果我们把faib(4)n的值先保存起来,下次直接用是相比前面的重复计算是不是效率就高了很多呢,因为提供下面的一种方法int arr[] = {1,1,2,3,4,5,6}; 下标: 0 1 2 3 4 5 6我...原创 2019-05-15 20:37:49 · 555 阅读 · 0 评论 -
把一个数组中的0全部移到数组的最后边或者数组的最前边
把所有为0的数移到数组的最后边思想:从前往后遍历一遍数组,将数组中的零全部用一个整型变量 ZeroNum记录下来,当碰到一个非零的数据,就让这个数向前移动ZeroNum个单位,即arr[i-ZeroNum] = arr[i]; 把数组遍历完成之后,为0个个数就全部统计出来了,那么就将数组的后ZeroNum个位置全都改为0即可代码如下:时间复杂度:O(n),空间复杂度:O(1)voi...原创 2019-05-15 21:13:55 · 3254 阅读 · 0 评论