# 2023q1 Homework4 (quiz4)
contributed by < `yanjiew1` >
## 實驗環境
```bash
$ gcc --version
gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0
$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Address sizes: 39 bits physical, 48 bits virtual
Byte Order: Little Endian
CPU(s): 8
On-line CPU(s) list: 0-7
Vendor ID: GenuineIntel
Model name: Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
CPU family: 6
Model: 142
Thread(s) per core: 2
Core(s) per socket: 4
Socket(s): 1
Stepping: 10
CPU max MHz: 3400.0000
CPU min MHz: 400.0000
BogoMIPS: 3600.00
```
## 紅黑樹研究
[Linux 核心的紅黑樹](https://hackmd.io/@sysprog/linux-rbtree) 裡面提到了左傾紅黑樹,但 Eddie Kohler 教授在〈[Left-Leaning Red-Black Trees Considered Harmful](https://read.seas.harvard.edu/~kohler/notes/llrb.html) 〉指出左傾紅黑樹的疑慮。故希望能實作傳統紅黑樹和左傾紅黑樹,並進行效能分析研究。
我也有發現 Robert Sedgewick 教授的〈[Left-leaning Red-Black Trees](https://sedgewick.io/wp-content/themes/sedgewick/papers/2008LLRB.pdf)〉的描述中,在移除節點步驟,其在往下走訪與往上修正時,都會進行旋轉,猜測可能會對效能有影響。此外也不確定 Eddie Kohler 教授做的實驗是用 2-3 樹版本的實作還是 2-3-4 樹版本的實作。
目前會把研究成果放在[這篇文章](https://hackmd.io/@yanjiew/rbtree01)內。但因時間有限,會先完成其他作業。
:::warning
TODO: 利用 [rb-bench](https://github.com/jserv/rb-bench) 來比較 FreeBSD 和 jemalloc 在內的紅黑樹實作的效能表現。
:notes: jserv
:::
另外在 quiz4 中的紅黑樹,因為沒有親代節點指標,但又是實作非遞迴呼叫,故使用了 `path` 來存走訪路徑,類似堆疊操作。但先前作業在排序演算法實驗中,手動加入堆疊操作不一定會比用遞迴呼叫有效率,故可以嘗試以遞迴呼叫重新實作取代模擬堆疊操作來比較效能。
而在沒有親代節點指標情況下,走訪也會是個問題。故想嘗試引入引線二元樹的方式,看看能不能在沒有親代節點指標時,也能輕易走訪下一個或上一個中序 (in-order) 節點。
## Timsort 研究
Timsort 是結合 Mergesort 和 Insertion sort 的排序演算法。
在這裡要探討 Timsort 對 Mergesort 的改進。以及如何修改 Timsort 使它能在非連續記憶體的 linked list 中有效率運作。
從排序時額外空間使用量、排序所需的比較次數,來探索 Timsort 對 Mergesort 的改進。
研究結果會放在這裡: [Timsort 研究與對 Linux 核心貢獻嘗試](https://hackmd.io/@yanjiew/linux2023q1-timsort)