• 算法设计技术(编程珠玑)


    算法设计技术

    2010103日星期日

    20:53


    #include <stdio.h>

    #include <memory>

     

     

    // 编程珠玑问题算法

    typedefstruct

    {

    intst, ed, val;

    }M;

     

    voidsetM(M &m, int s, int e, int v)

    {

    m.st = s;

    m.ed = e;

    m.val = v;

    }

     

    voidcpyM(M &des, M &src)

    {

    des.st = src.st;

    des.ed = src.ed;

    des.val = src.val;

    }

     

    // 迭代算法,算法复杂度为O(N)

    M FindMaxSubSet(int *a, intarray_size)

    {

    M *array_m = (M*)malloc(sizeof(M) * array_size);

    int i;

     

    setM(array_m[0], 0, 0, a[0]);

     

    M _4ret = {0,0,a[0]};

     

    for( i = 1; i <array_size; i++)

    {

    if(array_m[i - 1].val< 0)

    {

    setM(array_m[i], i, i, a[i]);

    }

    else

    {

    setM(array_m[i], array_m[i - 1].st, i, array_m[i - 1].val + a[i]);

    }

     

    if(array_m[i].val> _4ret.val)

                     {

    cpyM(_4ret, array_m[i]);

    }        

    }

     

    free(array_m ); array_m = 0;

     

    return _4ret;

     

    }

     

    int main()

    {

    int A[] = {31, -41, 59, 26, -53, 58, 97, -93, -23, 84};

     

    M m = FindMaxSubSet(A, sizeof(A) / sizeof(A[0]));

     

    printf("l = %d, r = %d, val = %d\n", m.st, m.ed, m.val);

     

    return 0;

    }        

     

     

     

    重要的算法设计技术:

    保存状态,避免重复计算。算法2和4使用了简单的动态编程形式。通过使用一些空间来保存各个结果,我们就可以避免因重新计算而浪费时间。

       将信息预处理到数据结构中,算法2b中的cumarr结构允许对子向量中的总和进行快速计算。

        分治算法。算法3使用了简单的分治法形式;有关算法设计方面的教科书介绍了更多高级的分治法形式。

    扫描算法。有关数组的问题经常可以通过询问“我如何可以将x[O..i-1 ]的解决方案扩展为x[0..i]的解决方案?”的方式得到解决。算法4同时保存旧的答案和一些辅助数据,以计算新答案。

    累计。算法2b使用了累积表,在累积表中,第i个元素包含、中前i个值的总和;在处理范围时,这一类表很常见。例如,从本年初到10月份为止的销售额中减去本年初到2月份为止的销售额,业务分析师可以确定3月份到}D月份之间的销售额。

        下限。只有了解到他们的算法已经是可能算法中的最佳时,算法设计师才可能安安稳稳地睡个好觉。为此,他们必须证明某个匹配下限。本问题的线性下限就是问题6的主题,更加复杂的下限的求解可能会十分困难。算法复杂度计算

     

     

  • 相关阅读:
    将个人博客与github关联
    docker镜像制作
    perf命令
    vmstat命令
    ps命令
    top命令
    linux查看当前用户登陆信息
    .NET CORE应用程序启动
    WebAPI简介
    Redis-位图
  • 原文地址:https://www.cnblogs.com/luweiseu/p/1915856.html
Copyright © 2020-2023  润新知