HOME/Articles/

Algorithm

Article Outline
## Algorithm
> [1.Two Sum](https://leetcode.com/problems/two-sum/description/)

* **What**

* **How**

* **Key Codes**

## Review
> [How to Read a Paper](https://www.cs.princeton.edu/courses/archive/fall13/cos597E/papers/howtoread.pdf)

* **Why**

* **What**

* **How**

* **If**

## Tip

* **What**

* **How**


## Share

Algorithm

1.Two Sum

  • What 给定一组整型数组,有且仅有2个数之和等于指定值,找出这两个数的数组索引。

  • How 最朴素的想法就是分别两次循环遍历(同时注意不能相同索引的数字加两次)。再进一步,有些循环是不必要,内循环遍历从外循环的下一个元素开始。同时官方提供了解答方案,解法1通过对结果的调整变相为BF模式匹配算法。 BTW,leetcode检测到是中文用户,会提示迁移到中文网站,建议坚持英语不动摇。如果实在看不懂,偶尔看下中文对应页面参考下就好。

  • Key Codes

    class Solution {
      public int[] twoSum(int[] nums, int target) {
          int nSize = nums.length;
          for ( int i=0; i<nSize; i++ ) {
              for (int j=i+1; j<nSize; j++) {
                  if ( nums[i] + nums[j] == target ) {
                      return new int[]{i, j};
                  }
              }
          }
    
          return new int[2];
      }
    }

Review

How to Read a Paper

  • Why 我们经常会碰到各种问题需要解决,经过一通谷歌之后,解决方案可能就散落在各种论文里面,特别是研究性工作的,就会更为明显。因此,怎么快速浏览筛选到我们所需的解决方案并落地为我们项目/产品里的代码,显得尤为重要。本文总结了“三步法”,期望可以让你有规可循,助你快速解决问题。

  • What 研究学者经常会花很多时间研究各种论文,其实不限于研究人员,我们很多时候也需要阅读别人文章,所以如何高效过滤吸收是个很重要的话题。 加拿大滑铁卢大学S. Keshav教授撰文为大家介绍了三步法-鸟瞰、再仔细点、梭哈,由浅入深,由框架到细节直至最终理解论文全部内容,而在第一、二步你都可以随时根据自己的需求适时判断是否还需要继续深入,一改以前那种从头读到尾,然后临了才猛拍大腿叫道这不是我想要的啊。

  • How 整个方法分为三步,每步里面又有多个具体执行节点及验收标准。

    1. 鸟瞰:花5-10分钟快速浏览文章:标题、大纲、前言介绍,每章节标题(除此之外请忽略其他内容),结论,引用内容(并勾选看看自己看过哪些)。一般情况下就是可以看下字体被重点突出不一样的内容。
    2. 再仔细点:花一小时左右时间,更仔细的阅读论文、做标记,但是忽略诸如证明细节。
    3. 梭哈:如果走到了这一步,那十有八九该论文上对你有很大帮助的了,那就需要你静下心来好好读了。尽可能的照着作者的思路再去验证复现一遍。
  • If S. Keshav教授阅读论文的三步法,不仅限于论文,其实阅读一本书也是类似的:先看目录、序言鸟瞰全貌;针对自己感兴趣的章节仔细阅读,但是也只要大概浏览下章节里面通过字体加重等突出显示的内容即可;最后才是仔细阅读章节里面的内容。

Tip

  • What Markdown是一种轻量级的标记语言,使用简单的语法可以写出具有较为好看格式的文章。我们 ARTS 活动,所有文章都建议使用 Markdown进行编写。

  • How 具体语法可以参考本示例,本文开头罗列了大部分常用格式语法。语法比较简单,建议你可以花几分钟时间浏览下Markdown-Cheatsheet

Share

万物皆结构。

ARTS活动本身也是一种结构的体现,其由Algorithm、Review、Tip、Share组成。因此效仿结构化思考,把5W1H的思考方法简化充实到ARTS的各节点里面。

  • Algorithm要求大家在leetcode上面完成算法题,leetcode为英文网站,这可以进一步加强大家的英语阅读能力,同时网站有提供相应的解决算法,在你一筹莫展或者自己解决之后,可以有对比,对算法知识进行适时扩展补充。针对这两个目的,Algorithm模版内容就只要求了What(用自己的语言概括题目要求)、How(阐述算法思路)。
  • Review主要目的是要让大家阅读更多的英语著作,考验大家英语能力,但我们也是“功利“的,更希望可以学以致用。自然学习理论设计认为,成人学习包含两个维度:感知信息(直接体验、抽象概念)和加工信息(反思学习、行动学习)。我们大多时候都是停留在直接体验,有点雁过无痕之潇洒,但也因此经常会面临书到用时方恨少之尴尬,主要原因在于缺少进一步的加工内化为自己的知识。因此,Review模版对学习之道进行了结构化(针对工具性学习内容):Why(了解review内容适用场景、可产生价值,发现意义)、What(用自己语言概设review内容,重现权威内容,形成概念)、How(阐述实践方法)、If(针对自己的个例阐述可能的使用方法,适时扩展)。
  • Tip进行技能共享,所以简单阐述是什么(What)、怎么做(How)即可。当然有道是“知其然更知其所以然”,如果能给阐述下原理(Why),更好不过了。
  • Share主要是分享个人想法观点,那就可以天马行空,自己随性点发挥,不做过多的结构性限定。当然你也是可以使用结构化的东西来发挥,更具逻辑性点。比如结论先行、以上改下,逻辑递进等等。