Live Note

Remain optimistic

广度优先搜索

在 N * M 的网格中,从 start 走到 end 。
广度解法:需要一个队列,从 start 节点开始,当一个节点抛出时,将它周围的节点入队,直至抛出的节点是 end 节点。
模拟网格:

1
2
3
4
5
6
7
8
9
10
11
var map = [
// map[x][y]
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 1, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 2],
]
find(map)
Read more »

开坑第一篇

从大学开始就想着弄一篇自己的博客,但是一直都断断断续的。
在这个风雨交加的午间,我决定开坑了。
可能以后主要还是用于记笔记之类的吧,偶尔应该也会写点杂七杂八的东西。。

自然数上的一般归纳原理

假设$P$是自然数上的一个性质,则如果

  1. $P(0)$成立 – base case
  2. 对所有的自然数$k$,$P(k)$蕴涵$P(k+1)$ – induction step

则$P(n)$对所有自然数$n$成立

$$
\ \ \ \ \ \ \ \ \ \ [P(k)]\
\frac{P(0)\ P(k+1)}{P(n)}
$$

$[P(k)]$为归纳假设,$k$不能出现在$P(k + 1)$的任何假设中

定理:每个自然是要么是偶数,要么是奇数。
用归纳法来证明:

  1. 0 是偶数 -> 0 是偶数或奇数
  2. 假设 k 是偶数或奇数,证明 k + 1 是奇数或偶数:
    1. k 是偶数,则 k + 1 是奇数
    2. k 是奇数,则 k + 1 是偶数
  3. 得证
Read more »

惰性单例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
let LazySingle = (() => {
let instance = null
function Single() {
return {
Method: function () {
console.log("public method")
},
Prototype: "some message",
}
}
return () => {
if (!instance) instance = Single()
return instance
}
})()

// for test
console.log(LazySingle().Prototype)
LazySingle().Method()

extends Array

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class PowerArray extends Array {
isEmpty() {
return this.length === 0;
}

// filter/map/... 等函数不再传递PowerArray
static get [Symbol.species] () {
return Array;
}
}

let arr = new PowerArray(1, 2, 3);
alert(arr.isEmpty()); // false

let filter_array = arr.filter(i => i > 1);
alert(filter_array.isEmpty()); //Error