超豐富資源、代碼例子大話數(shù)據(jù)結(jié)構(gòu)_第1頁
超豐富資源、代碼例子大話數(shù)據(jù)結(jié)構(gòu)_第2頁
超豐富資源、代碼例子大話數(shù)據(jù)結(jié)構(gòu)_第3頁
超豐富資源、代碼例子大話數(shù)據(jù)結(jié)構(gòu)_第4頁
超豐富資源、代碼例子大話數(shù)據(jù)結(jié)構(gòu)_第5頁
免費預(yù)覽已結(jié)束,剩余21頁可下載查看

下載本文檔

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

文檔簡介

不管你是新手還是高只要你愿意愿意互助都歡迎加入圈共同成長。需要編程的學(xué)習(xí)、源碼、資料加群: 群空間資料,下完及時退群。群里不聊天。新手加群: ,提問互助,只有在這里提問才不會 ,驗證要求:登錄參加c或c++水平測試,成績達到60分以上。第2 算西來說道。不是不想,是沒必要,第一次課就們糊弄暈,那以后還玩什么,逃課劇,到了戲院,抬頭一看——《梁山伯》18:00開演。嗯,怎么會是這樣?一問才兩種算法的比寫點小程序了。現(xiàn)在我要求你寫一個求1+2+3+……+100結(jié)果的程序,你應(yīng)該怎么寫inti,sum=0,n=100;for(i=1;inti,sum=0,n=100;for(i=1;i<=n;i++){sum=sum+}printf("%d",18世紀生于德國小村莊的高斯,上小學(xué)的一天,課堂很亂,就像我們現(xiàn)在下1+2+…+100的結(jié)果,誰先算出來誰訝,因為他自己想必也是通過1+2=3,3+3=6,6+4=10,……,4950+100=5050這樣intinti,sum=0,n=100;sum=(1+n)*n/就是,他用的方法相當于另一種求等差數(shù)列的算法,不僅僅可以用于1加到100,就是加到一千、一萬、一億(需要更改整型變量類型為長整型,否則會溢算法是解決特定問題求解步驟的描述,在計算機中表現(xiàn)為指令的算法是解決特定問題求解步驟的描述,在計算機中表現(xiàn)為指令的算法的特有窮有窮性:指算法在執(zhí)行有限的步驟之后,自動結(jié)束而不會出現(xiàn)無限循環(huán),并且每一個步驟在可接受的時間內(nèi)完成。確定可行正確對于這四層含義,層次1要求最低,但是僅僅沒有語法錯誤實在談不上是好算法。這就如同僅僅解決溫飽,不能算是生活一樣。而層次4是最的,我們幾我們把層次3作為一個算法是否正確的標準??勺x可讀性:算法設(shè)計的另一目的是為了便于閱讀、理解和交流健壯時間效率高和量執(zhí)行時間短的算法效率高,執(zhí)行時間長的效率低。量需求指的是算法在執(zhí)行過程中需要的最大空間,主要指算法程序運行時所占用的內(nèi)存或外部硬盤空間。的錢,用最短的時間,辦最大的事,算法也是一樣的思想,最好用最少的空間,100個人的高考成績平均分,與求全必須依據(jù)算法事先編制好程序,這通常需要花費大量的時間和精力。如果編制出來發(fā)現(xiàn)它根本是很糟糕的算法,不是竹籃打水一場空嗎?時間的比較依賴計算機硬件和軟件等環(huán)境因素,有時會掩蓋算法本身的優(yōu)劣。要知道,現(xiàn)在的一臺四核處理器的計算機,跟當年、、等老輩的機器相比,在處理算法的運算速度上,是不能相提并論的;而所用的操作系統(tǒng)、編譯器、運行框架等軟件的不同,也可以影響它們的結(jié)果;就算是同一臺機器,CPU微的差異。算法的測試數(shù)據(jù)設(shè)計,并且程序的運行時間往往還與測試數(shù)據(jù)的規(guī)模有很大關(guān)系,效率高的算法在小的測試數(shù)據(jù)面前往往得不到體現(xiàn)。比如0個數(shù)字的排序,不管用什么算法,差異幾乎是零。而如果有一百萬個隨機數(shù)字排序,那不同算法的差異就非常大了。那么我們?yōu)榱吮容^算法,到底用多少數(shù)據(jù)來測試,這是很難判斷的問題。事前分析估算方事前分析估算方法:在計算機程序編制前,依據(jù)統(tǒng)計方法對算法進行估算124條要看硬件性能。inti,sum=0,n=100;for(inti,sum=0,n=100;for(i=1;i<=n;i++){sum=sum+}/*執(zhí)行1次/*執(zhí)行了n+1次/*執(zhí)行n次/*執(zhí)行1次intsum=0,n=100;sum=(1+n)*n/2;/*執(zhí)行一次/*執(zhí)行一次/*執(zhí)行一次顯然,第一種算法,執(zhí)行了1+(n+1)+n+1次=2n+3次;而第二種算法,是1+1+1=3次。事實上兩個算法的第一條和最后一條語句是一樣的,所以我們關(guān)注的代這兩個算法其實就是n次與1次的差距。算法好壞顯而易見。intinti,j,x=0,sum=0,n=100;for(i=1;i<=n;i++){for(j=1;j<=n;{sum=sum+}}/*執(zhí)行一次/*執(zhí)行n×n次/*執(zhí)行一次這個例子中,i1100,每次都要讓j100次,而當中的x++和sum+x;其實就是1+2+3+… ,也就是1002次,所以這個算法當中,循環(huán)部分的代的輸入規(guī)模n=100,要多于前面兩種算法,這個算法的執(zhí)行時間隨著n的增加也將遠1+2+…+n需要一段代碼運行n次。那么這個問題的輸入規(guī)模使得操作數(shù)量是f(n)=n,顯然運行100次的同一段代碼規(guī)模是運算10次的10倍。而第二種,無論n為多1,即f(n)110010100倍。因為它是f(n)=n2。起來,即基本操作的數(shù)量必須表示成輸入規(guī)模的函數(shù)(如圖2‐7‐1所示。2-7-n值的越來越大,它們在時間效率上的差異也就越來越函數(shù)的漸近增A和B哪個更好。假設(shè)兩個算法的輸入規(guī)模都是n,算法A2n3次操作,你可以理解為先有一個n次的循環(huán),執(zhí)行完成后,再有一個n次循環(huán),最后有三次賦值或運算,共2n3次操作。算法B要做3n+1次準確說來,答案是不一定的(2‐8‐1所示2-8-A(2n+B(3n+n=5243n=7476n=969n=n=當n=1時,算法A效率不如算法B(B要多一次n=2時,n2ABnAB了(執(zhí)行的次數(shù)比B要少A總體上要好過算法B。函數(shù)的函數(shù)的漸近增長:給定兩個函數(shù)f(n)和g(n)如果存在一個整數(shù)N,使得對于所有的n>N,f(n)總是比g(n)大,那么,我們說f(n)的增長漸近快于g(n。n+3+1其實是不影響最終的算法變化AB′,所以,我們可以忽略這些加法常數(shù)。后面的例子,這我們來看第二個例子,算法C4n8,算法D2n21(2‐8‐2所示2-8-算法算法n=131n=294n=39n=n=2010n=4120001000n≤3CD(C次數(shù)比較多nCD了,到后來更是遠遠勝過。而當后面的常數(shù)去n相乘的常數(shù),這樣的結(jié)果也沒發(fā)生改變,算法C′的次數(shù)隨著n的增長,還是遠小于算法我們再來看第三個例子。算法E2n23n1,算法F2n33n1(所示2-8-算法算法n=6161n=48n=9n=21n=201020001000n1EFn1E的優(yōu)勢就要開始優(yōu)于算法F,隨著n的增大,差異非常明顯。通過觀察發(fā)現(xiàn),最高次項的指數(shù)大的,函數(shù)隨著n的增長,結(jié)果也會變得增長特別快。我們來看最后一個例子。算法G2n2,算法H3n1,算法I2n23n1(如表2‐8‐4所示。2-8-算法n=246n=87n=n=n=2020n=200032003n=20000030200030n=2000000030020000300n=200000000030002000003000這組數(shù)據(jù)應(yīng)該就看得很清楚。當n的值越來越大時,你會發(fā)現(xiàn),3n+1已經(jīng)沒法和長性,基本就可以分析出:n的增大,它會越來越優(yōu)于另一算法,或算法時間復(fù)雜算法時間復(fù)雜度定在進行算法分析時,語句總的執(zhí)行次數(shù)在進行算法分析時,語句總的執(zhí)行次數(shù)T(n)是關(guān)于問題規(guī)模的函數(shù),進而分析T(n)隨n的變化情況并確定T(n)=(f(n))n的增大,算法執(zhí)行時間的增長率和f(n)的增長率相同,稱作算法的漸近時間復(fù)雜度,簡稱為時間復(fù)(n)n的某個函數(shù)。O()來體現(xiàn)算法時間復(fù)雜度的記法,我們稱之為O記法。一般情況下,隨著n的增大,T(n)增長最慢的算法為最優(yōu)算法。推導(dǎo)大OO階呢?我們給出了下面得到的結(jié)果就是大O階。常數(shù)法,為什么時間復(fù)雜度不是O(3),而是O(1)。intintsum=0,n=100;sum=(1+n)*n/2;/*執(zhí)行一次/*執(zhí)行一次/*執(zhí)行一次f(n)=3O階的方法,第一步就是把常數(shù)項3改為1。在保留最高階項時發(fā)現(xiàn),它根本沒有最高階項,所以這個算法的sum=(1+n)*n/210句,intsum=0,n=100; /*intsum=0,n=100; /*執(zhí)行1次*/sum=(1+n)*n/2; /*執(zhí)行第1次*/sum=(1+n)*n/2; /*執(zhí)行第2次*/sum=(1+n)*n/2; /*執(zhí)行第3次*/sum=(1+n)*n/2; /*執(zhí)行第4次*/sum=(1+n)*n/2; /*執(zhí)行第5次*/sum=(1+n)*n/2; /*執(zhí)行第6次*/sum=(1+n)*n/2; /*執(zhí)行第7次*/sum=(1+n)*n/2; /*執(zhí)行第8次*/sum=(1+n)*n/2; /*執(zhí)行第9次*/sum= /*執(zhí)行1次n312次執(zhí)行的差異。這種與問題的大小無關(guān)(n的多少,執(zhí)行時間恒定的算法,我們稱之為具有O(1)的時間復(fù)雜O(1)O(3)、O(12)等其他任線性intintfor(i=0;i<n;{{/*時間復(fù)雜度為O(1)的程序步驟序列}對數(shù)intcount=1;whileintcount=1;while(count<n){count=count*/*時間復(fù)雜度為O(1)的程序步驟序列}由于每次count2之后,就距離n更近了一分。也就是說,有多少個2相乘后平方intfor(intfor(i=0;i<n;{for(j=0;j<n;{/*時間復(fù)雜度為O(1)的程序步驟序列}}intfor(i=0;intfor(i=0;i<m;{for(j=0;j<n;{{/*時間復(fù)雜度為O(1)的程序步驟序列}}intfor(iintfor(i=0;i<n;{for(jijnj++)/*intji{/*時間復(fù)雜度為O(1)的程序步驟序列}}由于當i=0時,內(nèi)循環(huán)執(zhí)行了n次,當i=1時,執(zhí)行了n-1次,……當i=n-1時,內(nèi)循環(huán)執(zhí)行了1次。所以總的執(zhí)行次數(shù)為。階項,因此保留n2/2;第三條,去除這個項相乘的常數(shù),也就是去除1/2,最終這段理解大O列的一些相關(guān)運算這的是你的數(shù)學(xué)知識能力,所以想考的朋友,想intfor(i=0;iintfor(i=0;i<n;{}上面這段代碼調(diào)用一個函數(shù)functionvoidvoidfunction(int{}函數(shù)體是打印這個參數(shù)。其實這很好理解,function函數(shù)的時間復(fù)雜度是O(1)。所以整體的時間復(fù)雜度為O(n)。voidfunction(intvoidfunction(int{intfor(j=count;j<n;{/*時間復(fù)雜度為O(1)的程序步驟序列}}inti,j;for(i=0;i<n;{function}for(i=0;i<n;{for(j=i;j<n;{/*執(zhí)行次數(shù)為/*執(zhí)行次數(shù)為/*執(zhí)行次數(shù)n(n/*時間復(fù)雜度為O(1)的程序步驟序列}}f(n)=1+n+n2n(n13n23n1,根據(jù)推導(dǎo)大O 這段代碼的時間復(fù)雜度也是O(n2)常見的時間復(fù)雜階nlog2nO(1)O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn現(xiàn)實。同樣指數(shù)階O(2n)和階乘階O(n!)等除非是很小的n值,否則哪怕n只是100,都情況與平均算法的分析也是類似,我們查找一個有n個隨機數(shù)字數(shù)組中的某個數(shù)字,最好的O(1),但也有可能這個數(shù)字就在最后一個位置上待著,那么算法的時間復(fù)雜度就是O(n),這是的一種情況了。的,所以平均的查找時間為n/2次后發(fā)現(xiàn)這個目標元素。對算法的分析,法是計算所有情況的平均值,這種時間復(fù)雜度的計算方法稱為平均時間復(fù)雜度。另法是計算情況下的時間復(fù)雜度,這種方法稱為最2050個元素的數(shù)組(年數(shù)略比現(xiàn)實多一點,然后把所有的年份按下標的數(shù)字對應(yīng),如果是閏年,此數(shù)組項的值就是1,如果不是值為0。這樣,所謂的判斷某一算是最小化了,但是硬盤上或者內(nèi)存中需要這2050個0和1。式記作:S(n)=O(f(n)),其中,n為問題的規(guī)模,f(n)為語句關(guān)于n所占空間的函作,空間復(fù)雜度為O(1)。總結(jié)回于所有的n>N,f(n)總是比g(n)大,那么,我們說f(n)的增長漸近快于gn的變大,它會越來越優(yōu)于另一算法,或者越來越

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論