华电北风吹
天津大学认知计算与应用重点实验室
日期:2015/8/27
首先区分动态规划和分治策略。
这两者有很相似的地方,都是通过组合子问题的解来求解原问题。不同的是,分治策略将原问题划分为互不相交的子问题,递归的求解子问题,再将它们的解组合起来,求出原问题的解。与之相反,动态规划应用于子问题重叠的情况,即不同的子问题具有公共的子子问题(子问题的求解是递归进行的,将其划分为更小的子问题)。在这...
分类:
编程语言 时间:
2015-08-27 13:34:50
阅读次数:
178
我们知道,两个 N 位数字的整数的乘法,如果使用常规的算法,时间复杂度是 O(N2)。然而,使用快速傅里叶变换,时间复杂度可以降低到 O(N logN loglogN)。
假设我们要计算以下两个 N 位数字的乘积:
a = (aN-1aN-2...a1a0)10 = aN-1x10N-1 + aN-2x10N-2 + ... + a1x101 + a0x100
b = ...
分类:
其他好文 时间:
2015-08-04 08:13:33
阅读次数:
217
快速排序也是典型的分治策略实现,与归并排序不同,快排的关键部分在于 分 也就是partition部分,快排平均时间复杂度是O(nlgn),最差时间是O(n^2),属于不稳定排序
下面是快排的C语言实现。
//p, r分别是数组中元素的下标
int partition(int A[], int p, int r)
{
int i, j;
i = p - 1;
f...
分类:
编程语言 时间:
2015-08-01 22:06:35
阅读次数:
226
归并排序典型的分治策略的体现,时间复杂度是O(nlgn), 空间复杂度是O(n).属于稳定排序。
下面是C语言实现代码。
#define MAX 10000000
//p, q, r是均是元素的下标
void merge(int A[], int p, int q, int r)
{
int n1 = q - p + 1;
int n2 = r - q;
int...
分类:
编程语言 时间:
2015-08-01 20:37:03
阅读次数:
145
#include#includeusing namespace std;void findOddMin(vector> &a, int m, int n, vector &r){ int len = r.size(); vector tmp; for (int i = 0; i 0) b = r[i...
分类:
其他好文 时间:
2015-07-31 21:42:39
阅读次数:
104
核心数学式:f(n) = F + f([0,n/2]) + f([n/2,n])思路:进行相应处理(打印结点、选好哨兵),将整个集合一分为二(一般是分为两部分)分别迭代处理两个半集合 例子:快排、二叉树遍历、最近点对、大整数乘法/* * 快排 * */#include template voi...
分类:
其他好文 时间:
2015-07-28 10:15:55
阅读次数:
107
/*
????本问题是求解最大子数组问题
????普通方法的复杂度为n^2
????现在尝试给出一种小于n^2的算法
????当然数组中必须要有负数,不然没有意义
????本例中使用分治策略
*/
#include<stdio...
分类:
编程语言 时间:
2015-07-27 21:14:03
阅读次数:
108
1.问题描述 写一个高效的算法,从一个m×nm\times n的整数矩阵中查找出给定的值,矩阵具有如下特点:
每一行从左到右递增。
每一列从上到下递增。
2. 方法与思路2.1 二分查找法 根据矩阵的特征很容易想到二分法,但是这是一个二维的矩阵,如何将问题转化为一维是关键。实际上我们可以根据矩阵的第一列确定值可能所在的行的范围(limu,limd)(limu,limd),其中limu=0...
分类:
编程语言 时间:
2015-07-23 21:54:29
阅读次数:
114
《计算机算法设计与分析》(第3版) 王晓东 电子工业出版社递归与分治策略二分搜索算法二路归并排序快速排序动态规划矩阵连乘问题斐波那契数列贪心算法最优装载活动安排问题其它可用贪心算法求解的问题回溯法图的m着色问题素数环问题分支限界法装载问题
分类:
编程语言 时间:
2015-07-12 21:31:26
阅读次数:
183
大整数乘法的算法实现与分析,对于大于600位的两个整数相乘会比原始乘法要快得多。...
分类:
编程语言 时间:
2015-07-10 22:22:03
阅读次数:
181