设A[1..n]是一个包含n个不同整数的数组。如果在iA[j],则(i,j)就称为A中的一个逆序对(inversion)。
给出一个算法,确定n个元素的任何排列中逆序对的书目。时间复杂度为o(nlgn)。
分治法求解思路:
分解:将数组A[1..n]分为两个子序列A[1..p]和A[p+1,n],二分法将其分解。。
解决:根据归并排序的思想,在合并过程中,计算逆序对。假如两...
分类:
其他好文 时间:
2015-03-27 22:19:52
阅读次数:
200
求一个序列的子序列的最大值,这是一个经典算法,这里稍作整理。
问题:任给一个整数序列,如{-2, 5, 7, 11, -4, 13, -5, -2, -6, 3, -1, 3},求出这个序列中连续子序列的和的最大值,这个例子中最大值为32,子序列为{5, 7, 11, -4, 13}。
方法一:最简单的暴力法。确立一个起点,一个终点,计算起点到终点的和。下面代码中int brute_force...
分类:
其他好文 时间:
2015-03-21 17:15:02
阅读次数:
179
快速排序是目前平均性能最好的排序算法(从通用层面上考虑),其平均时间复杂度为O(nlogn).快速排序的思想很简单,首先将待排序的序列以某个元素为轴划分为两组,轴的左边元素不大于轴,右边的元素不小于轴,接下来分别对轴左边的元素(左子序列)和右边的元素(右子序列)进行同样的划分(每个子序列均不包含作为轴的元素,因为此时它已经处在了正确的位置上),这个过程不断重复下去,知道子序列元素个数为1时,那么排序...
分类:
编程语言 时间:
2015-03-21 14:10:04
阅读次数:
203
链接:http://www.cnblogs.com/CCBB/archive/2009/04/25/1443455.html最大子序列和问题问题描述:输入一组整数,求出这组数字子序列和中最大值。也就是只要求出最大子序列的和,不必求出最大的那个序列。例如:序列:-2 11 -413 -5 -2,则最大...
分类:
其他好文 时间:
2015-03-20 20:25:59
阅读次数:
206
最长单调子序列(O(n^2) 和 O(nlg(n))))...
分类:
其他好文 时间:
2015-03-16 14:39:54
阅读次数:
177
输入一组整数,求出这组数字子序列和中最大值。也就是只要求出最大子序列的和,不必求出最大的那个序列。例如:
序列:-2 11 -4 13 -5 -2,则最大子序列和为20。
序列:-6 2 4 -7 5 3 2 -1 6 -9 10 -2,则最大子序列和为16
#include
int main()
{
void res(int num[],int n);
in...
分类:
其他好文 时间:
2015-03-13 20:50:27
阅读次数:
138
题目描述:求一个序列中连续子序列和的最大值(如果全为负,则输出0)分析思路:简单的DP题1.分析:最开始想到的是分治,分治的复杂度是O[n*lb(n)][姑且把lb当做以2为底的对数],由于分治的时候遇到连接处的处理问题,一不小心就想到了原来这是DP题。2.状态转移方程:(1)sum[i]=max{...
分类:
其他好文 时间:
2015-03-11 21:32:59
阅读次数:
153
和之前的一题很像,直接套用。
#include
using namespace std;
int main()
{
int a[10001];
int n,i;
int sum,maxsum,start,maxstart,maxend;
while(cin>>n && n)
{
for(i=0;i<...
分类:
其他好文 时间:
2015-03-11 19:42:16
阅读次数:
147
解决最大连续子序列和的两种方法:分治,动态规划。
分治时间复杂度虽然更高,但我还是写了一遍加深对这种思想的理解:将一个问题分治成若干个小的同样思路的子问题来解决。本题将所求序列等分成左右两个子序列,愿序列的最大子序列和必是左序列最大子序列和,有序列最大子序列和,跨左右子序列最大和三者中的最大者。
动态规划:用dp[i]更新dp[i+1]就行。
分治:
//
// main.cpp
// ...
分类:
其他好文 时间:
2015-03-09 14:33:35
阅读次数:
216
URAL 1296. Hyperjump(最大子序列和)...
分类:
其他好文 时间:
2015-03-07 11:35:23
阅读次数:
120