b99902HW 板


LINE

賺批幣的時間又到了… 這次拖了一陣子才翻,該不會大家都已經寫出來了吧(想必不太可能XD) ==== 6.1 排序(Sorting)與雜湊(Hashing) (1) 感謝名沅幫忙翻譯這一題 考慮以下修改過的隨機挑選基準(pivot)的快速排序法,以尋找第k小的元素。當k被 平均隨機挑選時(「平均」指的是每個元素被挑選到的機率是相同的),以C(N)表示使用 此演算法時,預期的比較次數。試導出C(N)的封閉型式(closed-form)解。你可以在你解 答中使用調和級數的和 H(N)=Σ(n=1 to N)1/n, which is O(log N)。 Quick-k(陣列 a, 整數 N, 整數 k) /* 1 <= k <= N */ ‧從a[0]至a[N-1]平均隨機選擇一個元素作為基準值(pivot) ‧對基準值以外的a[0]至a[N-1]和基準比較(一共比較N-1次), 比基準值小的隨機存到另一個M-1個元素長的陣列left; 比基準值大的隨機存到另一個N-M個元素長的陣列right。 如果 k = M 就 回傳 基準值 否則如果 k < M 就 回傳 Quick-k(left, M-1, k) 否則 回傳 Quick-k(right, N-M, k-M) 結束如果 提示:Quick-k參數為N, k時,令其比較次數為 T(N, k)。從此演算法可得 1 k-1 N T(N, k) = --- ( Σ T(N-M, k-M) + Σ T(M-1, k) ) + (N-1) 以及 T(1, 1) = 0 N M=1 M=k+1 1 N 我們的目的是藉由 C(N) = --- Σ T(N, k) 計算 C(N)。 N k=1 關於closed-form,在 http://mathworld.wolfram.com/Closed-FormSolution.html 網頁上的解釋是這樣: An equation is said to be a closed-form solution if it solves a given problem in terms of functions and mathematical operations from a given generally accepted set. For example, an infinite sum would generally not be considered closed-form. However, the choice of what to call closed-form and what not is rather arbitrary since a new "closed-form" function could simply be defined in terms of the infinite sum. 簡而言之,就是有限的數學符號組合而成的解。(吧) (2) 在使用比較排序(comparision sort)排序 N 個布林元素的問題當中,請證明 該問題只需要 Ω(N) 次的比較。 譯注:布林元素指的是 { True ,False },也可以想成 { 0, 1 }。 (3) 給予兩個長度為 N 且已經排序好的陣列 A 與 B。請用 C 語言或任何的虛擬碼 (pseudo-code)來實作出可以找出 A∪B 的中位數且時間複雜度為 O(log N) 的演算法。請簡要的解釋為何該演算法之時間複雜度為 O(log N)。 (4) 給予一個由 N 個排序過的元素僅接著 M 個沒有排序的元素所組成的陣列。對於 下列數種情況,你會怎麼排序這一整個陣列? (a) M = O(N) (b) M = O(log N) (c) M = O(1) (5) 雜湊函數(hashing function)除了可以用來做出有效率的儲存,還可以用來設計 出有效率的演算法。請用任何的搜尋引擎搜尋 "Rabin-Karp String Matching Algorithm" 並比較其與 KMP 演算法的不同之處。請注意你必須以自己的話來完成 這一題,並附上你所學習的網站。 (6) 考慮另一個替代的的二次探測法(quadratic probing)其定義 h_i(key) = (h(key) + 16 * i^2) mod P 其中 P 是一個奇數的質數,i 在 [0, m] 之內。 若 m = (P - 1) / 2,i, j 在 [0, m] 之內且 i =/= j,請證明對於所有可能的 i 與 j, h_i(key) =/= h_j(key)。 (7) 對於下列 32 個 C 語言的關鍵字,建立一個完美並有效率的的雜湊函數。 auto, break, case, char, const, continue, default, do, double, else, enum, extern, float, for, goto, if, int, long, register, return, short, signed, sizeof, static, struct, switch, typedef, union, unsigned, void, volatile, while 你需要解釋你的雜湊函數為何完美且有效率。 6.2 快速排序(Quick Sort) 實作下列排序法中的任兩個:希爾排序(shell sort)、堆積排序(heap sort)、 合併排序(merge sort)、內部為計數排序的基數-16排序(radix-16 sort with counting sort)。你可以選擇任意程度的實現細節(應該是指可以任意的使用STD 吧)但請附上清楚的說明。然後寫一個名為 hw6_2 的程式來比較你實做出來的排序 與 C 當中的 qsort 或是 C++ 中的 std::sort。測試的資料為一由 32 位元的無符 號整數(32-bit unsigned interger)隨機組成的陣列。測試當陣列大小為 {16, 64, 255, 1024, 4096, 16384 } 時,你所實作出來的兩個排序以及 C 當中的 qsort 或是 C++ 中的 std::sort 的執行時間並將結果畫成像課本 372 頁中圖 7.18 的形式。 簡要地說明你的發現。 6.3 二元平衡搜尋樹(Balanced Binary Search Trees) libavl (http://www.stanford.edu/~blp/avl/)是一個很好用的二元搜尋樹的函 式庫。像下面所列出的簡短程式碼就可以建構一個 16 個整數的 AVL 樹(AVL tree) 並將其印出來: #include <stdio.h> #include <stdlib.h> #include "avl.h" void postorder_interger_avl(const struct avl_node *node){ if(node == NULL) return; printf("%d ", *((int *)node->avl_data)); if(node_avl_link[0] != NULL || node_avl_link[1] != NULL){ putchar('('); postorder_integer_avl(node->avl_link[0]); putchar(','); putchar(' '); postorder_integer_avl(node->avl_link[1]); putchar(')'); } } int int_compare(const void *pa, const void *pb, void *param) { int a = *(const int *)pa; int b = *(const int *)pb; if(a < b) return -1; else if(a > b) return +1; else return 0; } int main(){ struct avl_table *tree; tree = avl_crete(int_compare, NULL, NULL); int i; for(i = 0; i < 16; i++){ int *element = (int *)malloc(sizeof(int)); *element = i; void **p = avl_probe(tree, element); } postorder_integer_avl(tree->avl_root); puts(""); return 0; } 請注意 libavl 的使用手冊可能難以閱讀;上面的程式碼修改自 libavl 當中的 avl-test.c。當上面的程式碼與 avl.c 編譯後,會正確的印出一棵 AVL 樹: 7 (3 (1 (0 , 2 ), 5 (4 , 6 )), 11 (9 (8 , 10 ), 13 (12 , 14 (, 15 )))) 在這題當中,你需要下載 libavl 並實作出三種不同的樹:高度限制二元搜尋樹 (height-bounded binary search tree)、ALV 樹以及紅黑數(Red-Black tree), 其分別位於 "bst.c"、"avl.c" 以及 "rb.c" 中。 (1) 寫一個名為 hw6_3_1 的程式將 6.1(7) 當中所提供的 C 的關鍵字依其列出的順序 插入上述的三種樹當中。並以上面的輸出格式將這三種樹的最後結果印出來。 (2) 寫一個名為 hw6_3_2 的程式將 6.1(7) 當中所提供的 C 的關鍵字隨機調換其順序 後再插入上述的三種樹當中。將此步驟重複 10000 次並記錄這三種樹的最大高度、 最小高度以及平均高度。完成下列的表格並簡要的說明你的發現。 +--------------------+----------------+----------------+----------------+ | tree type | maximum height | minimum height | average height | +--------------------+----------------+----------------+----------------+ | height-bounded | | | | | binary search tree | | | | +--------------------+----------------+----------------+----------------+ | AVL tree | | | | +--------------------+----------------+----------------+----------------+ | Red-Black tree | | | | +--------------------+----------------+----------------+----------------+ 如果你在使用或是編譯 libavl 上有任何問題,請與 TA 討論。 --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.214.43
1F:推 CryKing:推 06/04 22:49
2F:推 garychou:感謝昌神 06/04 23:32
3F:推 allen0326200:感謝昌神~每次都期待您的翻譯=) 06/04 23:42
※ 編輯: syuusyou 來自: 140.112.214.43 (06/11 23:38)







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:iOS站內搜尋

TOP