-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.xml
63 lines (55 loc) · 4.55 KB
/
index.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Chung's Notebook</title>
<link>https://nnkken.github.io/</link>
<description>Recent content on Chung's Notebook</description>
<generator>Hugo -- gohugo.io</generator>
<language>zh-tw</language>
<lastBuildDate>Wed, 10 Mar 2021 23:00:00 +0800</lastBuildDate><atom:link href="https://nnkken.github.io/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>About</title>
<link>https://nnkken.github.io/about/</link>
<pubDate>Wed, 10 Mar 2021 23:45:00 +0800</pubDate>
<guid>https://nnkken.github.io/about/</guid>
<description>I&rsquo;m weird, just like the others.</description>
</item>
<item>
<title>Frustration on programming</title>
<link>https://nnkken.github.io/post/frustration-on-programming/</link>
<pubDate>Wed, 10 Mar 2021 23:00:00 +0800</pubDate>
<guid>https://nnkken.github.io/post/frustration-on-programming/</guid>
<description>Suppose there are two people, A and B.
A known nothing about algorithm.
B mastered the book Introduction to Algorithms. He didn&rsquo;t read the book, but he could solve every single problem in the book easily within 10 minutes.
A wanted to learned hard from the book. He reads every sentence, paragraph, chapter thoroughly, absorbed every single bit of information from the book, learned everything he could learn. He couldn&rsquo;t solve all the problems in the book on his own, but he tried his very best to understand the solutions, learned a lot from them.</description>
</item>
<item>
<title>使用矩陣計算遞歸關係式</title>
<link>https://nnkken.github.io/post/recursive-relation/</link>
<pubDate>Fri, 19 Apr 2019 22:26:37 +0800</pubDate>
<guid>https://nnkken.github.io/post/recursive-relation/</guid>
<description>最近與朋友討論一條題目:一個 $3 \times n$ 的網格,以 $1 \times 2$ 的磚塊(可旋轉)填滿,有多少種填法?
朋友的解法是動態規劃,我對動態規劃不太熟悉,倒是比較常用遞歸關係,兩者算是殊途同歸。
遞歸關係式 假設填法數量等於 $f(n)$。考慮 $3 \times n$ 網格的最頂層 (Row 1),有以下幾種填法:
情況一:三個直排 Row 1 ||| Row 2 ||| 這種情況下,下面的 $n - 2$ 行可以任意填,於是填法數量等於 $f(n - 2)$。
情況二:一個橫排、一個直排 這裡有兩種填法:
Row 1 ————| Row 2 | 以及
Row 1 |———— Row 2 | 由於兩種填法是對稱的,因此只考慮其中一種,然後把數量乘以二。
下面我們繼續考慮第二行怎麼填:
情況二之一:用橫排填 Row 1 ————| Row 2 ————| 這種情況下,填法數量等於 $f(n - 2)$。
情況二之二:用直排填 Row 1 ————| Row 2 | | Row 3 | 這種情況下,填了一個直排後,剩下的空間只能再填直排:</description>
</item>
<item>
<title>快速排序中分割元素的的另一種寫法</title>
<link>https://nnkken.github.io/post/quicksort/</link>
<pubDate>Wed, 17 Apr 2019 00:30:00 +0800</pubDate>
<guid>https://nnkken.github.io/post/quicksort/</guid>
<description>快速排序(Quicksort)由以下幾個部分組成:
選定 pivot 移動數組中的元素,使元素以 pivot 為界分割成兩部分,前面部分全部小於 pivot,後面部分全部大於 pivot 遞歸排序前面部分與後面部分 可見第二步的分割是快速排序中的重要部分,基本上所有移動元素的邏輯都由這部分負責。
所以……怎麼寫?
難以理解的左右指針 一般看到的快速排序寫法,都會使用以下我稱為「左右指針」的做法:定義兩個指針,一個從左往右掃描,直到找到比 pivot 大的元素;另一個從右到左掃描,直到找到比 pivot 小的元素;然後交換兩個指針的元素,並重覆掃描步驟,直到兩個指針相遇。
void quicksort(int* start, int* end) { if (end - start &lt; 2) { return; } int pivot = *start; int* left = start + 1; int *right = end - 1; while (left &lt; right) { while (*left &lt; pivot) { ++left; } while (*right &gt; pivot) { --right; } int tmp = *left; *left = *right; *right = tmp; ++left; --right; } quicksort(start, right); quicksort(left, end); } 以上是我隨便寫的代碼,百分百保證有 bug。</description>
</item>
</channel>
</rss>