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.

posted @ 2020-09-20 23:21  Jeff_p  阅读(116)  评论(0编辑  收藏  举报