算法研究:最大子序列求和问题的解决方案

The maximum subarray problem is the task of finding the contiguous subarray within a one-dimensional array of numbers (containing at least one positive number) which has the largest sum. For example, for the sequence of values ?2, 1, ?3, 4, ?1, 2, 1, ?5, 4; the contiguous subarray with the largest sum is 4, ?1, 2, 1, with sum 6. --from wiki

下面我们分析四种算法的时间性能,由于运行时间相差较大,我们分成两组进行对比:

环境:ubuntu 12.04

时间单位:ms

时间性能:presume that the input is preread

第一组 :输入数据元素个数2000

/*************************************************************************
    > File Name: algorithm1.c
    > Author: Simba
    > Mail: dameng34@163.com
    > Created Time: 2012年12月24日 星期一 22时41分56秒
 ************************************************************************/

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<sys/time.h>

int maxsubsum1(const int a[], int n)
{
    int thissum, maxsum, i, j, k;

    maxsum = 0;
    for (i = 0; i < n; i++)
    {
        for (j = i; j < n; j++)
        {
            thissum = 0;
            for (k = i; k <= j; k++)
                thissum += a[k];

            if (thissum > maxsum)
                maxsum = thissum;
        }
    }
    return maxsum;
}

int maxsubsum2(const int a[], int n)
{
    int thissum, maxsum, i, j;

    maxsum = 0;
    for (i = 0; i < n; i++)
    {
        thissum = 0;
        for (j = i; j < n; j++)
        {
            thissum += a[j];

            if (thissum > maxsum)
                maxsum = thissum;
        }
    }
    return maxsum;
}

long GetTickCount(void)
{
    struct timeval tv;

    gettimeofday(&tv, NULL);

    return (tv.tv_sec * 1000 + tv.tv_usec / 1000);
}

int main(void)
{
    int i, n = 2000;
    int *ptr = malloc(sizeof(int) * n);
    srand(time(NULL));
    for (i = 0; i < n; i++)
        ptr[i] = rand() % 50 - 25;
    // adopt algorithm  1
    unsigned int utimecost = GetTickCount();
    int result = maxsubsum1(ptr, n);
    utimecost = GetTickCount() - utimecost;
    printf("max subsequence sum is %d, time cost %d\n", result, utimecost);

    // adopt algorithm  2
    utimecost = GetTickCount();
    result = maxsubsum2(ptr, n);
    utimecost = GetTickCount() - utimecost;
    printf("max subsequence sum is %d, time cost %d\n", result, utimecost);

    free(ptr);

    return 0;
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索int
, include
, for
, 时间
, The
最大子序列
,以便于您获取更多的相关知识。

时间: 2024-09-17 08:28:04

算法研究:最大子序列求和问题的解决方案的相关文章

【双11背后的技术】基于深度强化学习与自适应在线学习的搜索和推荐算法研究

选自<不一样的技术创新--阿里巴巴2016双11背后的技术>,全书目录:https://yq.aliyun.com/articles/68637 本文作者:灵培.霹雳.哲予 1. 搜索算法研究与实践 1.1 背景 淘宝的搜索引擎涉及对上亿商品的毫秒级处理响应,而淘宝的用户不仅数量巨大,其行为特点以及对商品的偏好也具有丰富性和多样性.因此,要让搜索引擎对不同特点的用户作出针对性的排序,并以此带动搜索引导的成交提升,是一个极具挑战性的问题.传统的Learning to Rank(LTR)方法主要是

《中国人工智能学会通讯》——12.43 分类型数据聚类算法研究进展

12.43 分类型数据聚类算法研究进展 在大数据环境下,许多数据是缺乏先验信息的,对数据标注的成本也越来越高,一个最自然的方法是对数据进行适当划分之后再进行相关的数据处理,而聚类分析是数据划分的一种重要技术手段[1] .在许多实际应用中,分类型变量是一种非常重要的数据表现形式[2] .比如,在问卷调查中,客户的兴趣爱好.家庭住址.教育情况都是分类型变量:在电子邮件过滤中,将邮件分为垃圾邮件和合法邮件:在医学中,一个病人受伤的程度可分为轻微的.中度的和严重的:在市场营销中,经常将客户分为高.中.低

如何防止量子计算暴力解密?中国启动新型算法研究

随着量子计算的不断突破,其计算机能力的大幅跃升将为网络安全带来新挑战--许多加密算法将会变得相当脆弱.未来,如何应对量子计算对数据的"暴力解密"?当前移动互联网.云计算.大数据.物联网快速融合发展,对密码算法能力提出的新挑战如何应对? 日前,为应对量子计算攻击威胁,移动互联网.云计算等领域数据可信融合安全挑战,国家"网络空间安全"重点专项中唯一的密码算法项目"新型数据保护密码算法研究"项目在成都启动. 由中国电子科技集团公司第三十研究所牵头的该项

云下载系统的理论模型与存储资源分配算法研究

云下载系统的理论模型与存储资源分配算法研究 北京交通大学 徐嬴颖 主要工作和创新点如下:(1)针对预约式服务交互过程,本文建立了系统交互模型,从理论上刻画了采用预约式服务的云下载系统运行机制,并提出了系统响应策略(何时通知用户.何时开始获取文件).首先,分析单个用户下载过程,建立了交互模型量化交互过程中的各时间元素及其关系,并由模型理论分析,推导出用户时间开销和系统存储时间开销.其次,建立了最小化这两个时间开销的多目标优化问题,并分别求解得到最优化用户体验和最小化系统存储开销的系统响应策略.最后

空间数据库中基于MapReduce的kNN算法研究

空间数据库中基于MapReduce的kNN算法研究 大连海事大学  刘彪 本文首次尝试设计了一种云环境下的倒排网格索引和在该索引基础上进行的基于MapReduce的空间kNN查询.本文所做的主要工作如下:(1)针对二维空间中的数据点,本文设计了一种分布式的倒排网格索引方法,该索引方法完全符合空间数据索引的标准一动态性和简单性.由于倒排网格索引具有松耦合和无共享的特殊结构,所以该索引比较适合基于MapReduce的大规模空问数据的并行查询.(2)本文提出了一种基于MapReduce的空间倒排网格索

基于云计算的受限玻尔兹曼机推荐算法研究

基于云计算的受限玻尔兹曼机推荐算法研究 郑志蕴  李步源  李伦  李钝 数据的指数级增长及算法本身的复杂性使受限玻尔兹曼机面临着计算效率的问题.在详细分析受限玻尔兹曼机的基础上,将受限玻尔兹曼机与Hadoop平台的并行计算架构相结合,提出基于云平台的受限玻尔兹曼机推荐算法.该算法通过复制机制解决数据相关性问题,并将传统的受限玻尔兹曼机过程分解为若干个Hadoop任务的循环,实现并行计算.实验结果表明,与在传统平台上的实现相比,基于Hadoop并行架构的受限玻尔兹曼机推荐算法在大体量数据集的条件

基于Hadoop MapReduce的分布式数据流聚类算法研究

基于Hadoop MapReduce的分布式数据流聚类算法研究 蔡斌雷 任家东 朱世伟 郭芹 随着数据流规模的持续增大,现有基于网格的聚类算法对数据流的聚类效果不好,不能实时发现任意形状的簇,也不能及时删除数据流中的噪声点.文章提出了一种Hadoop平台环境下基于网格密度的分布式数据流聚类算法(PGDC-Stream),利于基于Hadoop的MapReduce框架对数据流进行阶段化的并行聚类分析,实时发现数据流中任意形状的簇,定义检测周期和密度阈值函数并及时删除数据流中的噪声点.算法基于网格密度

海量数据的快速查询算法研究

海量数据的快速查询算法研究 南京邮电大学  曾雪 论文首先介绍了索引.SQL语句优化.数据预取.近似匹配和分布式查询等已有的海量数据查询技术,并总结了各种技术的应用范围.接着对经典的Top-k查询算法进行了分析,基于对TA(Threshold Algorithm)算法和NRA(No Random Access)算法的研究以及近似匹配查询思想,提出了一种新的基于抽取的Top-k算法(Top-k Algorithm Based on Extraction,TABE),该算法首先抽取出最优的元组,再对

基于Hadoop的并行共享决策树挖掘算法研究

基于Hadoop的并行共享决策树挖掘算法研究 陈湘涛    张超   韩茜 共享知识挖掘是指通过学习不同事物之间的共享知识,将学习到的知识应用到未知事物来加快认知未知事物.针对大数据集中串行共享知识挖掘算法效率低下的问题,结合云计算技术,提出了一种基于Hadoop的并行共享决策树挖掘算法(PSDT).该算法采用传统的属性表结构实现并行挖掘,但其I/O操作过多,影响算法性能,为此,进一步提出了一种混合并行共享决策树挖掘算法(HPSDT).该算法采用混合数据结构,在计算分裂指标阶段使用属性袁结构,在