zoukankan      html  css  js  c++  java
  • 【160326 18:00】最大子序列之和 1

    此篇讲的是截止时间至 3 月 26 日 18:00 的最大子序列之和 1 之小结。相应的题目,可以见王建民老师的博客中第一题:

    http://www.cnblogs.com/wangjm1975/p/5411663.html

    问题简析

    这是一个最优化问题,并且要求时间复杂度为 (O(n))。这样一来,首先想到的应该是动态规划思想。

    动态规划是求解最优化问题的一种思想。

    动态规划的核心,是要寻找一种看待问题的方式:这种角度以某种方式将原问题划分为有限的若干阶段;每个阶段可以有若干状态,但只有一个最优状态;当前阶段的最优状态,可以用某种确定的方式,从过去某些阶段的某些状态直接得到;这种方式,只与这些阶段的状态有关,而与这些状态是如何得到的无关。这样一来,如果我们能够在某个阶段找到确定的最优状态,就能够逐层递推,找到原问题的最优解。

    在这里:

    • 有限的阶段,即是子问题;
    • 当前阶段的最优状态,即是局部最优解;
    • 当前阶段的最优状态,可以用某种确定的方式,从过去某些阶段的某些状态直接得到,即是最优子结构性质;
    • 这种方式,只与这些阶段的状态有关,而与这些状态是如何得到的无关,即是无后效性质。

    也就是说,动态规划的核心,是要寻找一种具有最优子结构的无后效的问题拆解方式。

    以下是用 Python 简写的本题参考:

    def maxSubArraySum (nums):
        if not nums:
            return None
        elif 1 == len (nums):
            return nums[0]
    
        local_max, global_max = nums[0], nums[0]
    
        for i in xrange (1, len (nums)):
            local_max  = max (local_max + nums[i], nums[i])
            global_max = max (local_max, global_max)
    
        return global_max
    
    if __name__ == '__main__':
        test_cases = [[], [0], [1], [1, 2, 3], [-3, -1, -2],
                      [9, 8, 5, 2, -5, 6, 2, -2]]
        for nums in test_cases:
            print "The maxSubArraySum of", nums, "is", maxSubArraySum (nums)
    

    评分标准

    这次作业满分 10 分,采取扣分制与体验分相结合的方式。具体来说:

    • 每见到一处问题/缺陷,扣除该类问题/缺陷相应的分数;
    • 与此同时,还会有 (pm 1) 分的体验分浮动:博文结构清晰、排版整洁、代码清爽等情况酌情加分,反之扣分。

    10 分

    • 作业迟交超过 24 小时
    • 未能完成任务

    5 分

    • 没有提交代码(至少核心代码)

    2 分

    • 作业迟交,但未超过 24 小时
    • 博文代码没有使用「代码模式」编辑(这很重要,已经是第五次作业了,因此提升权重,望引起重视)
    • 博文中,非代码内容使用了「代码模式」编辑(这很重要,已经是第五次作业了,因此提升权重,望引起重视)
    • 程序没有正确计算最大子数组的和
    • 算法的时间复杂度超过 (O(n))

    1.5 分

    • 没有阐述设计思想
    • 没有总结分析;或总结中没有实际内容:对本次编程的分析或遇到的问题和解决方法

    1 分

    • 没有运行结果截图
    • 输出错误的结果
    • 没有对平凡(trivial)的情况进行处理:如果输入数组为空怎么办?

    每项 1 -- 3 分

    • 额外的问题(见博文后的回复说明)

    评分结果

    学号 截至上次作业得分小计 160326 18:00 小计
    20122951 23 7 30
    20132897 24 9 33
    20132900 11 6.5 17.5
    20132902 26 6.5 32.5
    20132907 30 8 38
    20132917 32 7.5 39.5
    20132922 28 7.5 35.5
    20132927 20.5 6 26.5
    20132935 24.5 9 33.5
    20132967 20 8 28
    20132970 22.5 0 22.5
    20132984 29 7 36
    20132985 27.5 5.5 33
    20133005 24.5 5 29.5
    20133009 25 5.5 30.5
    20133012 27.5 5 32.5
    20133014 14 5 19
    20133018 19 3 22
    20133039 29.5 2.5 32
    20133040 26.5 1.5 28
    20133045 21 8 29
    20133048 28 1.5 29.5
    20133051 24.5 8 32.5
    20133054 31 2.5 33.5
    20133057 17.5 6 23.5
    20133059 19.5 7.5 27
    20133062 12 4.5 16.5
    20133064 24.5 6 30.5
    20133070 25 6 31
    20133075 26 6 32
    20133078 29 7 36
    20133081 24.5 6.5 31
    20133087 24.5 5.5 30
    20133100 28 8 36
    20132899 6.5 3.5 10
    20132901 9 5.5 14.5
    20132903 22.5 9 31.5
    20132910 28.5 9 37.5
    20132912 32 7.5 39.5
    20132919 31 9 40
    20132924 32 9 41
    20132958 30 8 38
    20132959 30 7.5 37.5
    20132965 28 6.5 34.5
    20132971 26 6.5 32.5
    20132980 28 7 35
    20133004 28.5 5.5 34
    20133008 22.5 5 27.5
    20133010 8.5 2.5 11
    20133013 19 8 27
    20133017 21 6.5 27.5
    20133019 29 6 35
    20133024 24 9.5 33.5
    20133027 24 9.5 33.5
    20133031 18 5.5 23.5
    20133042 17.5 5 22.5
    20133043 5 0 5
    20133044 4.5 0 4.5
    20133047 15 1 16
    20133056 24 3.5 27.5
    20133058 25.5 8 33.5
    20133063 21 5.5 26.5
    20133066 21.5 0 21.5
    20133073 14.5 8.5 23
    20133077 24 5.5 29.5
    20133079 24 5.5 29.5
    20133088 10.5 0 10.5
    20133093 21.5 4 25.5
    20133099 17 4 21
    20133101 25 8 33

    其他问题

    如果有同学认为自己的作业,评分与预期有差;或者有新的补充。
    那么建议你通过博客园站内短消息的方式联系我,或者在你的作业后回帖留言(记得 @ 我)。
    你也可以在这篇博文下直接回复。不过不推荐你这样做……

    软件工程的意义

    欢迎参看下面的文章:
    http://www.cnblogs.com/ChenMeng0518/p/5460435.html

  • 相关阅读:
    所有者权益
    金融工具
    或有事项
    股份支付
    借款费用
    Keycode对照表
    js(jQuery)获取时间搜集
    jQuery实现CheckBox全选、全不选
    JS 截取字符串函数
    jQuery mouseenter与mouseleave
  • 原文地址:https://www.cnblogs.com/ChenMeng0518/p/5472646.html
Copyright © 2011-2022 走看看