zoukankan      html  css  js  c++  java
  • ARTS-WEEK-010

    Algorithm:

    343: Integer Break (Medium)

    求整数拆分后的最大乘积。首先动态规划解法,定义状态 dp[i] 是整数 i 拆分后乘积最大值,思考 dp[i] 和 dp[i-1] 关系并没有结果,换一个思路,取 j 是 i 最终拆出来的一个数,接下来有两种情况,第二个数不拆:dp[i] = j * (i-j),或第二个数继续拆分:dp[i] = j * dp[i-j],这是因为 dp[i-j] 就是整数 i - j 可拆分后的乘积最大值。因此最终就是 dp[i] = max(max(j * (i-j), j * dp[i-j]) with j = 1...i),两层循环性能 O(n^2)。

    public int integerBreakV1(int n) {
      int[] dp = new int[n + 1];
      dp[1] = 0;
      for (int i = 2; i < n + 1; i++) {
        int imax = 0;
        for (int j = 1; j < i; j++) {
          imax = Math.max(imax, Math.max(j * (i - j), j * dp[i - j]));
        }
        dp[i] = imax;
      }
      return dp[n];
    }
    

    第二个思路需要借助数学求极值证明,但其实规律很简单,即优先不停拆出3,到最后出现余0、1、2三种情况,余0说明正好,余1需要将一个3置换为2*2(因为4>3),余2则最后乘2,性能是 O(1)。

    public int integerBreakV2(int n) {
      if (n == 2) return 1;
      if (n == 3) return 2;
      int d = n / 3;
      int r = n % 3;
      if (r == 0) return (int) Math.pow(3, d);
      if (r == 1) return (int) Math.pow(3, d - 1) * 4;
      if (r == 2) return (int) Math.pow(3, d) * 2;
      return 0;
    }
    

    Review:

    论文:A Design Framework for Highly Concurrent Systems

    这篇论文很有意思,从标题看怎么也想不到它所说的设计框架就是Java里的线程池,即使用队列和线程池结合,实现线程数与任务队列的可控性,这是一种吸收了多线程与事件驱动各自优点的方式。这篇伯克利的论文发表于2000年,或许在当时也具有前沿性,因为当时Java刚刚发布JDK1.3版本,还没有1.4的NIO和1.5的并发包。此外文章通过实验数据展示了吞吐量和线程数、延迟的关系,以及基于任务、队列、线程池三个抽象组件实现的四种设计模式:Wrap、Pipeline、Combine、Replicate。虽然这
    几种模式定义现在并不流行(因为非常普通),但是抽象分析的过程依然很有借鉴意义。

    Tip:

    Chrome 访问自签名(或过期)等存在证书网站时,提示 NET::ERR_CERT_INVALID 并且没有忽略按钮,目前最好的一个解决办法是点击页面任意位置,并输入 thisisunsafe,之后就会自动打开并且近期都不会在阻拦。

    Share:

    Lisa Feldman Barrett: You aren't at the mercy of your emotions -- your brain creates them | TED Talk

    这篇TED演讲非常具有启发性,通过一些科学研究结论,改变人们对重要事务的认知,进而影响人们行动以及改变世界,扯远了…… 就该演讲而言,它让我认识到我们应该主动训练自己的情绪构建能力。

    感觉 feelings 是一种与生俱来的本能反应,而情绪 emotions 是一种大脑的预测行为,基于过去经验和训练结果,对当前出现的感觉和正在发生的现状进行预测,产生各种复杂的生理反应,它是后天形成的。这个过程和机制也是大脑的一种原始的快捷方式(类似习惯),可以更加高效的应对感觉和现状,比如闻到食物香味、更加愉悦、胃部蠕动、吃的更多这一系列步骤。

    我们无法控制感觉,但是可以在某种程度上控制情绪,比如早起后很难受,可以是因为今天有各种烦心事,也可能仅仅是身体原因,比如睡眠质量不佳、或仅仅是缺水等身体物理反应。再比如考试前紧张,可以联系到之前考试紧张导致考砸了等一系列糟糕情况的反应,也可以是身体本能的调动肾上腺素帮助自己应当敌人,选择应对战斗的心态就比受害者心态好很多。

    其实当前自己每一次选择和应对,都是一种训练素材的积累,会对未来类似情况的预测产生影响,所以说每个人都对自己的情绪负有责任,不是说用什么技巧就能随便改变焦虑、抑郁等,而是不断承担责任,不断训练自己,像开车技能一样逐渐练习,最终进入得心应手的自动化状态。

    Sometimes we are responsible for something not because we're to blame but because we're the only ones who can change it.

  • 相关阅读:
    算法笔记4
    算法笔记3
    SQLServer 两种分页方式
    Git 使用笔记
    Docker MongoDB 笔记
    Abp vNext 修改Identity模块用户管理界面的坑
    CentOS安装MariaDB
    Visio修改页边距
    在 PowerDesigner 导入Excel中的表结构
    Uploadify上传失败,提示 2156 SecurityError Error #2156 null的解决办法
  • 原文地址:https://www.cnblogs.com/pyx0/p/13702969.html
Copyright © 2011-2022 走看看