1.問題
[描述演算法問題,首選形式化方式(數學語言),其次才是非形式化方式(日常語言)]
對n個不同的數構成的陣列a[1…n]進行排序,其中n=2^k
2.解析
[問題的理解和推導,可用電子版直接在此編寫,也可用紙筆推導,拍照嵌入本文件]
3.設計
[核心偽**]
void mergesort(int arr, int g, int d)//其中r表示原陣列,left是陣列的起始下標,right是陣列的結束位置下標
如果陣列不止乙個元素時
將原始陣列分為兩部分,分治
對第一部分陣列進行遞迴排序
對第二部分陣列進行遞迴排序
對分治的陣列進行遞迴合併
void merge(int arr,int g,int k,int d)
4.分析
[演算法複雜度推導]
5.原始碼
[github原始碼位址]
演算法分析與實踐 作業5
在包含有n個點的集合s中,找出距離最近的兩個點。設 p1 x1,y1 p2 x2,y2 pn xn,yn 是平面的n個點。嚴格地講,最近點對可能不止一對,此例輸出一對即可。利用分治求解 首先對所有的點按照x座標 或者y 從小到大排序 排序方法時間複雜度o nlogn o nlogn o nlogn ...
演算法分析與實踐 大作業
給定n個圓的半徑序列,將它們放到矩形框中,各圓與矩形底邊相切,求具有最小排列長度的原序列。一般而言我們會想到這種做法 但是這種只是其中一種,我們並沒有考慮完全,還有一些如 小球本來可以放到兩個大球的中間,不增加長度的 這個就類似於最短路的問題,由此我們想到了回溯演算法。開始時設a r1,r2,rn ...
演算法分析與實踐 作業13
讀後感 由於參與了我院acm實驗室的緣故,我有幸閱讀了 演算法競賽 高階指南 這本書。儘管並沒有能完全地滲透這一本書,但是還是在這本書上學習一些比較有用的演算法。演算法可以說是基礎,很多問題倘若我們使用暴力的方法去解決,複雜度甚至可以達到o n 但是當我們使用了一些演算法去優化,複雜度可以降到o n...