sysprog2017
主講人: jserv / 課程討論區: 2017 年系統軟體課程
$ git clone https://github.com/sysprog21/prefix-search
$ cd prefix-search
$ make
$ ./test_cpy
ternary_tree, loaded 259112 words in 0.151270 sec
Commands:
a add word to the tree
f find word in tree
s search words matching prefix
d delete word from the tree
q quit, freeing all data
choice:
f
隨後按下 Enter 鍵,會得到 find word in tree:
的提示畫面,輸入 Taiwan
(記得按 Enter),預期會得到以下訊息:find word in tree: Taiwan
found Taiwan in 0.000002 sec.
s
隨後按下 Enter 鍵,會得到 find words matching prefix (at least 1 char):
的提示訊息,輸入 Tain
,預期會得到以下訊息: Tain - searched prefix in 0.000011 sec
suggest[0] : Tain,
suggest[1] : Tainan,
suggest[2] : Taino,
suggest[3] : Tainter
suggest[4] : Taintrux,
T
來當作輸入,可得到世界 9 萬多個城市裡頭,以 T
開頭的有效名稱a
和 d
就由你去探索具體作用Makefile
以允許 $ make bench
時,可對 ternary search tree 的實作做出效能評比,涵蓋建立 tst 和 prefix search 的時間,應比照 clz 透過統計模型,取出 95% 信賴區間
--bench
的執行參數,得以在沒有使用者輸入的前題下,對 tst 程式碼進行效能分析,應涵蓋 cpy
和 ref
兩種途徑 (詳情參閱 tst.h
的程式碼註解)TODO
的部分,替換成真正有效的 API 和對應的程式碼,這裡要求你學習分析現有的程式碼並得以擴充test_cpy
和 test_ref
兩種方式 (copy/reference) 的效能,並且針對現代處理器架構,提出效能改善機制tst.h
和 tst.c
為何要 forward declaration 呢?分離介面和實作有何好處呢?這樣的思維又該如何運用於 phonebook 呢?提出想法並且實作tst_traverse_fn
函式,並思考如何運用這個實作,注意到 callback function 的程式開發技巧/模式