给定一个序列(至少含有 1 个数),从该序列中寻找一个连续的子序列,使得子序列的和最大。 例如,给定序列 [-2,1,-3,4,-1,2,1,-5,4],连续子序列 [4,-1,2,1] 的和最大,为 6。 扩展练习: 若你已实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。 很奇怪的是 ...
分类:
其他好文 时间:
2018-04-11 18:04:18
阅读次数:
163
今天算法课讲到了矩阵连乘问题,所以再来复习一下。 讲到矩阵连乘问题就不得不讲一讲动态规划。动态规划就是将问题分解为若干个子问题,先将子问题求解,最后在从子问题的解中得到原问题的解。这样看来动态规划好像和分治法相差无几,但是两者还是有着一些差别的,分治法分解的子问题中,子问题互相之间是没有联系的,就是 ...
分类:
其他好文 时间:
2018-04-09 23:07:18
阅读次数:
486
分治法思想 把问题分解为k个规模较小的子问题,这些子问题(互相独立且)结构与原来问题的结构相同,再递归地求解这些子问题。 问题分解成子问题;(divide) 当达到某个阈值n0时,给出直接求解的方法;(conquer) 最后把各个子问题的解合并起来,得到原来问题的解;(merge) 算法设计伪代码 ...
分类:
其他好文 时间:
2018-04-07 17:47:58
阅读次数:
177
原创博文,转载请注明出处!本文代码的github地址# 基本思想 ”快速排序“是对”冒泡排序“的改进。 基本原理:基于分治法,在待排线性表中取一个元素pivot作为枢轴值,通过一趟排序将待排线性表划分为独立的两部分,第一部分的所有元素小于pivot,第二部分的所有元素大于等于pivot,pivot位... ...
分类:
编程语言 时间:
2018-04-07 11:19:42
阅读次数:
193
给定一个序列(至少含有 1 个数),从该序列中寻找一个连续的子序列,使得子序列的和最大。 例如,给定序列 [-2,1,-3,4,-1,2,1,-5,4],连续子序列 [4,-1,2,1] 的和最大,为 6。 扩展练习: 若你已实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。 很奇怪的是 ...
分类:
其他好文 时间:
2018-04-06 22:32:54
阅读次数:
157
简介 算法导论第四章介绍过使用分治法求最大子数组问题,其基本思想就是把一个数组分成三部分,a[0:n/2],a[n/2+1:n],a[j:k] (其中0 include "gtest/gtest.h" using namespace std; / 功能函数 @author Stone version ...
分类:
编程语言 时间:
2018-03-29 22:36:48
阅读次数:
356
"P2253 好一个一中腰鼓!" 本蒟蒻第一次用线段树做连续最长子段 线段树是将一个大区间二分成两个小区间,通过递归解决两个小区间的问题,然后合并。得到大区间的解。 类比一下分治法求单个最长连续子段。 每次也都是将一个大区间分成两个小区间。分别解决完小区间后。将小区间合并,从分界点左右遍历。暴力的求 ...
分类:
其他好文 时间:
2018-03-29 20:07:13
阅读次数:
155
最近再学习算法和数据结构,推荐一本书:Data structures and Algorithm analysis in Java 3rd 以下的四种算法出自本书 四种最大子序列和的算法: 问题描述 给定(可能有负数)整数a(1)、a(2)、……a(n),求 a(1)+a(2)+……+a(j)的最大 ...
分类:
编程语言 时间:
2018-03-29 02:12:23
阅读次数:
195
乘方问题 输入一个实数x,一个整数n >= 0,计算xn。 朴素算法即时对n个x连乘。 分治法: xn = xn/2 · xn/2 如果n为偶数 xn = x(n-1)/2 · x(n+1)/2 如果n为奇数 T(n) = T(n/2) + θ(1) = θ(lg n) Bottom-up algo ...
分类:
其他好文 时间:
2018-03-27 01:53:45
阅读次数:
90
1. 枚举法 根据具体问题枚举出各种可能,从中选出有用信息或者问题的解。 这种方法利用计算机的速度优势,在解决简单问题时十分有效。 2. 贪心法 如前所述,根据问题的信息尽可能做出部分的解,并基于部分解逐步扩充得到完整的解。 在解决复杂问题时,这种做法未必能得到最好的解。 3. 分治法 把复杂问题分 ...
分类:
编程语言 时间:
2018-03-14 20:48:36
阅读次数:
218