zoukankan      html  css  js  c++  java
  • 数据结构与算法分析

    • 第一章 引论

      • 一些数学公式以及证明方法
    • 第二章 算法分析

      • 了解O,Ω,Θ与o在计算相对增长率上的含义

      • 分析程序运行时间的一般法则(一般用O表示):

      • 例子:求最大子序列和。采用分治的思想可以将程序运行时间降至O(NlogN);采用动态规划的思想可以将时间降至O(N)

        # 分治思想
        class Solution {
        public:
            struct Status{
                int lSum,rSum,mSum,iSum;
            };
        
            Status pushUp(Status lSub, Status rSub)
            {
                int iSum = lSub.iSum + rSub.iSum;
                int lSum = max(lSub.lSum, lSub.iSum + rSub.lSum);
                int rSum = max(rSub.rSum, rSub.iSum + lSub.rSum);
                int mSum = max(max(lSub.mSum, rSub.mSum), lSub.rSum + rSub.lSum);
                return (Status) {lSum, rSum, mSum, iSum};
            }
        
            Status get(vector<int>& a, int l, int r)
            {
                if(l == r)
                    return (Status) {a[l], a[l], a[l], a[l]};
                    
                int m = (l + r) >> 1;
                Status lSub = get(a, l, m);
                Status rSub = get(a, m + 1, r);
                return pushUp(lSub, rSub);
            }
        
            int maxSubArray(vector<int>& nums) {        
                return get(nums, 0, nums.size() - 1).mSum;
            }
            
        };
        
        # 动态规划
        class Solution {
        public:
            int maxSubArray(vector<int>& nums) {
                int pre = 0, maxAns = nums[0];
                for (const auto &x: nums) {
                    pre = max(pre + x, x);
                    maxAns = max(maxAns, pre);
                }
                return maxAns;
            }
        };
        
      • 例子:对分查找、欧几里得算法求最大公因数、幂运算

    • 第三章 表、栈、队列

  • 相关阅读:
    axios 封装
    Git 常用命令行
    React Native 开发环境搭建
    React Native 组件分类
    日期插件rolldate.js的使用
    单图片上传
    使用css完成物流进度的样式
    搜索过滤 以及排序
    v-for的使用方法
    v-if 和v-show 用法
  • 原文地址:https://www.cnblogs.com/sunshine-free/p/14663570.html
Copyright © 2011-2022 走看看