日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

算法和时间复杂度概念(一级)

發布時間:2024/4/13 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法和时间复杂度概念(一级) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
第一個內容什么是算法?什么是算法的復雜度?什么是算法的空間復雜度?我們的標題是數據結構和算法入門,這兩個就是數據結構的入門,這三個就是算法的入門什么叫算法?算法就是指令的集合,是為解決特定問題而規定的一系列操作,我一般不愿意說概念性的問題,什么叫算法呢,簡單的說,算法就是計算機解題的思路,解題的過程,我們舉生活中的一個例子來說,如何求1+2+3+....+100=?,我們怎么來實現,要實現的方式有很多算法1: 我們學了 while do-while for循環,任何一種循環都可以吧這個問題搞定,因為1+2+3是可以重復的,用我們的循環語句,就可以把這個問題搞定,但是大家要明白一點,我們使用計算機語言,是在欺負計算機,欺負他運算的快,充分的利用計算機運算的快這個特征來做的,這個依次相加用for循環來算效率高嗎?效率不高,但是就是計算機運行的速度比較快,那我們為什么還要用循環,兩個原因,第一個原因計算機運行的速度快,第二個對我們來說最主要的,我們寫的代碼少,我們寫個for循環,兩行代碼就出來了,是這么來做的,但是如果真的花的時間來說,這種效率還是比較低的,那有更好的辦法嗎,當然有了算法2: 高斯解法,這個故事大家應該都知道,老師懲罰一個學生的,上課不好好學習,給你們出一道題,1+2+3+...+100=?,結果所有的學生除了高斯都在蒙頭拿著紙算,就像計算機一樣,重復的操作,就高斯在那里不算,老師說你怎么不算,老師我已經算出來,不可能啊,怎么回事,他就用梯形的面積公式來算,梯形的面積公式怎么來的,上底加下底,(1+100),一共有一百個數,(1+100)*100/2,你看結果就出來了,如果是要加到10000,你換一下就可以了,(1+10000)*10000/2,他算3次,是不是就可以了,他也可以用三角形的面積公式來算,如果三角形的面積公式來算前面要加個0,0+1+2+3+....+100=?,結果沒有影響,底乘以高,底是多少底是100,用了101個數,再除以2,100*101/2,有人說我不明白,這怎么可以用梯形面積來算呢,這個就不解釋,明白就明白,不明白我也就不在這里解釋了,小學數據老師要解釋的,如果要是10000的話,你采用兩種方式的效率千差萬別,效率差的太多了,你的思維要擴散一下,不要總想著那三種循環,或者使用哪種循環,哪種循環都不對,必須要跳出這種循環的思維,可以用這種方式來做,還有沒有別的算法,他發的時間一樣嗎,不一樣算法3; 比如我們使用遞歸來實現,為什么呢,sum(100)=sum(99)+100,我想求出sum(100),我只要求出sum(99)就可以,但是你要想求出sum(99),你只要求出sum(98)就可以了,依次往下類推,sum(2)=sum(1)+1,你想求出sum(2),你只要求出sum(1)就可以了sum(1)=1,sum(1)就不用再求了,sum(1)就等于1,那你求sum(100),求sum(99),求sum(2)用的這種解題的思路都是一樣的,用遞歸,用遞歸來解決,這就是算法一個問題,我們在這里提供了三種算法,請問我要用哪一個,我們怎么來評價算法的優劣,兩個角度來考慮,第一個你要花多少時間,我要這個時間短的,第二個你在內存里面占多少空間,我們要找那個占用內存空間少的,時間最少空間也最少的,有是最好,一般是沒有的,有時候是時間少了,空間可能就會多一些,空間少了時間可能就會多一些,一般來說是這樣的,上面的例子來說那就是高斯解法,這個最簡單了,時間也少空間也少,我們下面會專門來分析的 什么叫算法?我們給大家講一下相關的理論大家知道,一個算法通常具有5個特征:1. 輸入:你得有輸入,比如這個算法是輸入100還是1萬,就是上限,如果你都是從1開始的話,1就不用輸了2. 輸出:輸出什么意思,輸出就是最終的結果3. 可行性:我這個算法能算出來,5年之后這個算法就出來了,5年后黃花菜都涼了,生生再長長,長長再生生,那肯定不行,需要在有限的時間內完成,對時間是有要求的4. 有窮性:別來個死循環就行5. 確定性:我同樣的一個問題,算法每次解決的結果都一樣這就是我們講的一些算法,再來看算法時間的復雜度.大家想一下,算法的時間復雜度用英文來表示,Time Complexity兩個單詞,他的名詞叫時間復雜度,它是沒說時間,時間和時間復雜度一樣嗎至少一說時間是什么啊,花了幾秒,幾微秒,那時間復雜呢,那就不是幾秒和幾微秒了,因為一個算法到底花幾秒和幾微秒,這個你確定嗎,你是不確定的,為什么不確定,具體花多長時間隨著硬件的發展那個時間是沒有多大現實意義的,但是我同樣一個算法不管在什么樣的計算機上有一點是一樣的,同樣的一個算法寫了一個程序,我在不同的電腦上花的時間是不一樣的,但是有一點是一樣的,執行語句的條數是一樣的,這一條算法都是這么多條語句唄,我把它都執行了一遍,為什么有些快有些慢,因為CPU的頻率不一樣,有快有慢,所以大家記住.時間頻度: 對于一個算法來說,我們獲取時間沒有實際的意義,我們不可能對每個算法都上機測試,算算他一共花了幾秒鐘,因為這是沒有實際意義的,但是我們知道,一個算法花費的時間與算法中語句的執行次數是成正比的,語句越多時間越多,語句越少花的時間就越少,所以我們就不算時間了,我們算一個算法中的語句的執行次數,一共執行多少次,這就叫執行次數,這叫時間復雜度嗎,不叫,他叫時間頻度,用一個符號來 表示T(n),T是什么意思,T是Time,n就是問題的規模,你要運行個for循環,for循環最后那個數是多少,n代表問題的規模,但是你會發現呢,這個時間頻度,他不是時間復雜度,實際的過程中我們也很少去計算時間的頻度,比如說我們算了一下,比如一個算法我們費了九牛二虎之力T(N)是不是代表時間頻度啊,T(n)=100000n2+10n+6T(n)+6,這是一個時間頻度,再來一個,T(n)=10n2+10n+6T(n)+6,后面又算了一個T(n)=n2,比如我們一共有三個算法,語句執行次數,結果你發現他們的最高次冪,是不是都是一樣的,最高次冪都是一樣的,當我們衡量一個算法的時間頻度的時候,時間性能的話,我們會把這個問題再簡化一下,怎么簡化,叫時間復雜度時間復雜度: 我們想知道的是時間的規模,而不是具體的次數,想知道時間的規模,而不是具體的次數,所以我們引入了時間的復雜度,什么是時間的復雜度T(n)=100000n2+10n+6,T(n)=10n2+10n+6,T(n)=n2,這叫不叫時間的復雜度,這叫時間頻度,最高次冪不是n的平方嗎,低于n的平方的全部去掉常數項6去了,10n去了,最高的前面的系數10,也去了,常數低次冪也去了,前面的這個系數很大,當n無窮大的時候系數100000還是一個常數,你還是一個特別小的數,大學學過數學應該都知道這個問題了,我要把這個數也去了,上面是時間頻度一共算了多少次,我們不研究這么細,我們只研究規模就可以了,最后你發現T(n)=n2,T(n)都是n的平方了,但是我們能這么寫嗎,不能這么寫,因為如果你這么寫的話就會理解成都和T(n)=n2一樣,每個算法都是n的平方次,這個是具體的次數,這個只是規模,你怎么表示規模呢,前面加上一個大O,這么來表示,Tn=O(n2)里面寫n的平方,這么來寫的話,他就不是時間頻度了,就不是具體執行的次數了,而只是問題的規模,我們研究到這個層次啊,就可以了,沒有必要了,因為最高的次冪,就決定了他的基本數量級了一定要知道時間復雜度,我們把這個講完之后總結一下,第一個回答我的問題什么叫時間復雜度?不是一個算法真正執行的時間,不是幾秒幾毫秒,不是一個算法真正執行的次數,真正執行的次數叫時間頻度,那時間復雜度是什么?是這個問題執行的規模,這個規模和時間頻度是什么關系,去掉常數項,去掉低次冪,去掉最高次冪的常數,是不是用大O來表示,這個大家明確了,時間復雜度最壞時間復雜度和平均時間復雜度你們想一下我們在實際的學習中,要計算一個算法的復雜度,我們是求他最快的呢還是求他平均的呢,一般來說我們是求平均的,在這里告訴大家我們一般是求最壞時間復雜度,為什么呢?1. 第一個平均時間復雜度,太難求了,要花很多的時間來求這個,2. 還有一個你花半天勁把我求出來了,你會發現他跟最壞時間復雜度是一個級別的了,可能最壞時間復雜度后面有一個后綴,或者前面有個系數,但是兩個是一個級別的,我們本來就不求次數,我們要的是一個規模,所以基于這兩點,我們一般討論最壞時間復雜度就可以了在這里我們認識三個符號,以后我們討論時間復雜度,最多的是這個O,一般你把它叫做大哦就可以了,一見到大哦,我們就要明白,明白他是最壞時間復雜度,T(n)=n2他是時間復雜度的上界,他是最壞情況,有時候你會見到T(n)=Ω(n2),他叫Omega,所以我用漢子標記一下歐米伽Omega是最好的情況,他是最好的時間復雜度,那還有一個,如果最好和最壞是同一個級別的,那我么就用這個符號θ西塔,如果你最好和最壞都是同一個級別的,T(n)=θ(n2),那我們就可以用這個符號來表示,這三個符號大家要知道,以后我們使用最多的還是Tn=O(n2)這個,叫大哦表示法,這是我們講的一些相關的概念。

?

總結

以上是生活随笔為你收集整理的算法和时间复杂度概念(一级)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。