作業(yè)算法第三章11-14s_第1頁
作業(yè)算法第三章11-14s_第2頁
作業(yè)算法第三章11-14s_第3頁
作業(yè)算法第三章11-14s_第4頁
作業(yè)算法第三章11-14s_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1算法復(fù)雜度是θ(logn)InputInput:a:int,n:Output:1ifn=1 return34 ifn%2=06 9 11returnfunction(a,returna?function(a,(n?假設(shè)MatrixA是m?m規(guī)模的,一次矩陣乘法就是m3,那么算法復(fù)雜度證明:[F(n+2)=1+ 當(dāng)n=0,F(n2)=F(2)=1F(0)假設(shè)n=k時,有F(k+2)=1+ F(k)成當(dāng)n=k+1時,由F(n+2)=F(n+1)+F(n)可得F(k+1+2)=F(k+2)+F(k+1) +i=0F(k)+F(k+1)=1

InputInput:A:Matrix,n:Output:1ifn=1 return34 ifn%2=06 9 11returnfunction(A,returnA?function(A,(n?斐波那契數(shù)列的時間復(fù)雜度為θ(n)InputInput:n:Output:1ifn=0orn=1 return34 returnF(n?1)+F(n?6√由(a)中的結(jié)論F(n+2)=1+5)n,可得時間復(fù)雜度為θ(logn) 算法中可能遇到的問題是由題意可以得知

25比較難以計算,最后可能得到的是一個近似值(F(n+2)F(n+1))=(11)(F(n+ )=(11)n(F(2)F(1)F(n+ 1 F(n? 1 F(1)現(xiàn)在假設(shè)11)n=AB)則可得到F(n)=C?F(1)+D?F(0)1 C算法也是計算矩陣的n次冪,所以時間復(fù)雜度為θ(logn)從時間復(fù)雜度上來說,()中的算法消耗的時間最多,(),(d)中的算法更加好;從計算的復(fù)雜度來說,可能()算法比較難以計算,(d)中的矩陣n次冪計算可以套用而且計算比較簡單,綜合來說,(d)的算法最好。Assume:S中所有點已經(jīng)分別按照x坐標(biāo)和y坐標(biāo)在X和Y中Bordercondition:如果S中只有一個點,返回個數(shù)0;如果S中有兩個點,返Divide:計算S中個點橫坐標(biāo)的中位數(shù)m;用垂線L:x=m把S分成大小相等的子集SL,SR;把X分成XL,XR,把Y分成YL,YR。Conquer:遞歸的計算SL,SR中的友誼點對的個數(shù)。Merge:將SL中元素按照y遞增排列(并去除其中重復(fù)的)得到的結(jié)果存入數(shù)組Ym[n],對于其中的每一個Ym[i在SR中尋找Ym[i1]yYm[i1]的點,存在即將計數(shù)值count1。掃描結(jié)束的count即是需要加上的點對數(shù)量。即F(S=F(SLF(SRcount時間復(fù)雜度分析:Divide階段中位數(shù)計算O(n),Conquer階段2T 排序y坐標(biāo)統(tǒng)計個數(shù)O(nlgn)??偟臅r間復(fù)雜度使用Master定理可得O(n(logn)2)。Assume:S中所有點已經(jīng)分別按照x坐標(biāo)和y坐標(biāo)在X和Y中Bordercondition:如果S中只有三個點,返回這三個點組成的三角形軸Divide:計算S中個點橫坐標(biāo)的中位數(shù)m;用垂線L:x=m把S分成大小相等的子集SL,SR;把X分成XL,XR,把Y分成YL,YR。Conquer:遞歸的計算SL,SR中的最小三角形周長CirLCirR,并選取Cirmin{CirL,CirR}Merge:取d=Cir,在x∈(m?d,m)中選取一個點p,在其右鄰域中選取兩個點構(gòu)成三角形并計算周長,p的右鄰域為d?d/2的矩形。記其中最小周長為Cirnear.那么S中最角形的周長即為min{Cir,Cirnear}.證明:[對于搜索區(qū)域中的點p,p的右鄰域中至多包含20個點將d?d/2的矩形分為10個d/5?d/4小矩形,如果小矩形中包含三個或者三以上的點,則可構(gòu)成三角形,其周長Cir≤3不成立,所以每個小矩形中至多有2

√41d<d和d的定義相違背,假時間復(fù)雜度分Divide階段中位數(shù)計算O(n),Conquer階段2T(n/2),Merge階段從右鄰域中選取兩個點計算周長O(n),總的時間復(fù)雜度使用Master定理可得O(nlogn)。蠻力法求解凸包問題的基本思想:對于包含n個點的集合S中的兩個點Pi,Pj,當(dāng)且僅當(dāng)集合中其余點都在L{Pi∈L,Pj∈L}的同一側(cè)時,線段L是該集合凸包集合的一條邊。遍歷集合S中的所有點之后可以得到所有凸包集合的邊界。求出L的方程yaxb,把集合中的其余點帶入計算yaxb的符號,如果符號相同則表示是凸包集合的邊。證明:[蠻力法求解凸包問題的正確性由引理{任意包含n>2個點的(不共線)的集合S的凸包是以S中某些點為頂點的凸多邊形;如果所有點都位于一條直線上,則凸多邊形成一條線段。}可知S中某些符合條件的點組成的線段構(gòu)成了凸多邊形的邊。又在蠻力法求解的過程是循環(huán)遍歷的,這些點必然能夠構(gòu)成一個封閉的凸多邊形。下面證明滿足基本思想條件的線段是凸包集合的一條邊。假設(shè)有點在線段另一側(cè),記為Pk,很明顯線段PkPi和PkPj上的點不屬于集合S,這和凸包的定義相違背,假設(shè)不成立,所以滿足基本思想的線段是凸包集合的一條邊。首先說明判斷一個點是否在凸多邊形內(nèi)的時間復(fù)雜度證明:[判斷一個點是否在凸多邊形內(nèi)的時間復(fù)雜度為凸多邊形是按照邊界逆時針順序排列的,假設(shè)要判斷的點為q,分別計算凸多邊形其余頂點p2,...pn,q相對于第一個頂點p1的角度,按照角度將凸多邊形分成多個三角形,要證明的即是點在這些三角形中。利用二分法可以確p點的角度在哪一個三角形區(qū)域中,接下來需要判斷的是p點是否在三角形區(qū)域?qū)?yīng)邊界線段的下方。可以得到線段的方程Lyaxb,點坐標(biāo)帶入計算符號。在此過程中二分法的時間復(fù)雜度為Ologn),其余的操作都是常數(shù)級。求解n個點是否在凸多邊形中的分治算法Assume:p1,p2...pn,q1,q2...qn中所有點相對于p1的角度分別存入P,Q中Bordercondition:當(dāng)Q的個數(shù)為1時,判斷該點是否在凸多邊形內(nèi)的時間Divide:Q中角度的中位數(shù)m,以m角度劃分Q中為兩個區(qū)域 Conquer:遞歸的計算 Q2中在凸多邊形中的個數(shù)Merge:將 Q2中的個數(shù)相加即得Q中在凸多邊形的個數(shù)時間復(fù)雜度分析:綜合所有階段的時間復(fù)雜度可得遞推公式T(n)=2T(n/2)O(n),T(1)=O(logn)。將逐項展開可得到T(n)=Preprocessing:遍歷T中的所有邊的權(quán)值,將權(quán)值大于τ的邊的對應(yīng)的頂點刪除,將原樹T分成幾個獨立的樹。Divid:對于每課獨立的樹,按其根節(jié)點的子樹,對其進行劃分。在每棵子樹中對兩兩節(jié)點遍歷,輸出其中距離小于τ的點對.Me:在同一棵樹中的不同子樹之間找到符合條件的點,將子樹A中到子樹根節(jié)點的距離小于τ的保留,其余刪除,然后選定A中保留的點,依次遍歷B中保留的點,算出距離保留符合條件的點輸出,計數(shù)。假設(shè)X[0:n?1]的中位數(shù)為X,Y[0:n?1]的中位數(shù)為YInputInput:xa:int,xb:int;ya:int,yb:Output:mid(0,n?1,0,n?1ifxa==xborya==yb return(x[xa]+34ifX=Y return67 ifX>Y9 14returnmid(xa,(xa+xb)/2,(ya+yb)/2,returnmid((xa+xb)/2,xb,ya,(ya+算法時間復(fù)雜度分析:因為X[0n?1],Y[0:n?1]是有序的,所以求解中位數(shù)是常數(shù)級的時間。時間消耗主要是遞歸折半搜索,時間復(fù)雜度為O(logn)。根據(jù)分治的思想,將原數(shù)組分成兩個數(shù)組(left[],right[]),遞歸的調(diào)用函數(shù)計算兩個數(shù)組的逆序數(shù)Merge的時候比較兩個數(shù)組中的元素,如果rightj]<left[i],那么逆序數(shù)加1.下面首先給出Merge函數(shù)的偽代碼。下面是分支算法find(Alow時間復(fù)雜度分析:綜合分治算法的過程可以得到T(n2T(n/2)O(n),由Master定理可以得到T(n)=O(nlogn)。 數(shù)組A,起始元素下標(biāo)p,中間元素下標(biāo)q,終止元素下標(biāo)Output:merge(A,p,q,1n1qp1n2rq1k=pcnt是計數(shù)變量。將A[pq]賦給left[],將A[q+1,r]賦給right[]。2whilei≤n1j≤n2 ifright[j]<left[i]4 7 9A[k++]=right[j++],cnt+=n1?A[k++]=left[i+10ifi<n1whilei<n1A[k++]=left[i+ 1415ifj<n2whilej<n2A[k++]=right[j+ 20 數(shù)組A,起始元素下標(biāo)low,終止元素下標(biāo)Output:find(A,low,1iflow≥high?1 34r=(lowhigh)/2是中間元素下標(biāo),count是計數(shù)變量。count+=find(A,low,r)+find(A,r,high)+merge(A,low,r,整體算法基本思想首先用實數(shù)x減去S中的每一個元素,得到的結(jié)果存入R數(shù)組中,對于S集合進行快排。對于R中的每一個元素,使用二分查找是否存在于S中。二分查找使用分治的思想。InputInput:數(shù)組S,實數(shù)Output:trueorf1fori<n R[i]=x?S34QuickSort(Sfori<n ifbianry(R[i],1,n)==true returntrue 89returnf下面是二分查找遞歸的算法時間復(fù)雜度分析:QuickSort的時間復(fù)雜度為O(nlogn),n次二分查找的時間也為O(nlogn),所以時間復(fù)雜度為O(nlogn)。A中元素是單調(diào)遞增有序的,最大的元素即是第n個元素;因為k已知最大的元素即是循環(huán)右移后第k%n個元素。假設(shè)A[n]間元素下標(biāo)為算法基本思想:首先算出所有的mn個元素存入大數(shù)組S中,然后用類似快排的思想遞歸得到其中第k小的元素。這里使用快排中的Partition()函數(shù),獲取當(dāng)前數(shù)組中第一個元素排序后的位置即比它小的在它左邊,比它大的在它右 要查找的數(shù)x,起始元素下標(biāo)p,終止元素下標(biāo)Output:trueorf1ifx<S[p]||x>S[q] returnf34ifx<S[(p+q)/2] returnbinary(x,p,(p+67 ifx>S[(p+q)/2]9 14returnbinary(x,(p+q)/2+1,算法1-1二分查找算法Algo.1- 循環(huán)右移后的數(shù)組A[n],起始位置p,終止位置Output:Max(A,1,1m=(p+ifA[p]≤A[m]≤A[q] return34ifA[m]≤A[p]A[m]≤ returnMax(A,p,67ifA[m]≥A[p]A[m]≥ returnMax(A,m+1,9邊。算法平均時間復(fù)雜度為Output:數(shù)組中第k小的元1ifq=p 34r=Partition(S,p,q)ifk=r?q+1 67 ifk<r?q+1returnfindk(S,p,r?1, returnfindk(S,r+1,q,k?r+q?

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論