--- tags: 演算法, 110-2 --- # 演算法作業 HW7 本週程式題的難度漸漸提升。 這次主題是Ch4 Divide and Conquer。這類程式常用遞迴的方式來寫。 另外,有使用到資料結構裏的linked list與tree。若不清楚,請復習一下。 # 觀念題 :book: ## 第1題: knapsack problem背包問題(Ch3) 有四件物品,編號由1到4,物品重量依序為20,40,10,30。物品價值依序為100,60,30,60。背包最大限重為80。請說明要放哪些東西(可以放部分),可以讓背包內物品價值總合最大。 ## 第2題: Closest Pair Problem 請說明Closest Pair Problem,每回合的合併過程?(可參考PPT13頁) ## 第3題: Convex Hull Problem 請說明Convex Hull Problem, (1)為何不直接用sort來得到polygon,而要採用merge? (2)請說明如何將polygon,修改成convex hull? ## 程式題:[Divide and Conquer](https://leetcode.com/tag/divide-and-conquer/) ## 第4題: 將linked list的數列排序 [Sort List - LeetCode](https://leetcode.com/problems/sort-list/) 本題會使用到資料結構linked list。 題目給定一個linked list的數列,其中的數字並未排序,請將數列排序後,回傳排序好數列的linked list。 :::success 提示:初學者可採用將linked list轉為array後來排序。高手建議可嘗試用merge sort,以divide and conquer的概念來作。 ::: ## 第5題: 將排序好的數列轉為二元搜尋樹 [Convert Sorted Array to Binary Search Tree - LeetCode](https://leetcode.com/problems/convert-sorted-array-to-binary-search-tree/submissions/) 本題會使用到資料結構Tree中的二元搜尋樹。 已知一個排序好的數列,請將每個數字為一個點,建構一個二元搜尋樹。 例如:數列為[-10,-3,0,5,9]時,可轉為以下的二元搜尋樹(兩種皆可) ![](https://i.imgur.com/qBLMqcV.png) ![](https://i.imgur.com/bJFdK4x.png) :::success 提示:取數列的中間值為root,並將數列分為左右兩個數列,用左數列建立root的左子樹,用右數列建立root的右子樹。 ::: 相關題(自由作答):[Convert Sorted List to Binary Search Tree - LeetCode](https://leetcode.com/problems/convert-sorted-list-to-binary-search-tree/submissions/) 與上題類似,僅把輸入改為linked list ## 第6題:心得 - 請寫下對於期中考的心得,以及本週影片教學的疑問以及程式作業的適應情況。 ## 挑戰題(自由作答): 美麗數列 [Beautiful Array - LeetCode](https://leetcode.com/problems/beautiful-array/) 將n個數字(從1到n)排列,使得任意兩數之間,不存在該兩數和的一半的數字。這種排列稱為美麗數列(Beautiful Array)。 舉例來說, n=3時,1,2,3就不合規定,因為(1+3)/2=2,而2就在1,3之間。1,3,2就合乎規定。 n=4時,1,2,3,4和1,2,4,3以及3,2,4,1都不合規定因為2都在1,3之間。而1,3,2,4就合乎規定。 題目會給定n,請找出一組合乎規定的排列。