Ⅰ 如何評價演算法
評價演算法的四個標准:
1.正確性
能正確地實現預定的功能,滿足具體問題的需要。處理數據使用的演算法是否得當,能不能得到預想的結果。
2.易讀性
易於閱讀、理解和交流,便於調試、修改和擴充。寫出的演算法,能不能讓別人看明白,能不能讓別人明白演算法的邏輯? 如果通俗易懂,在系統調試和修改或者功能擴充的時候,使系統維護更為便捷。
3.健壯性
輸入非法數據,演算法也能適當地做出反應後進行處理,不會產生預料不到的運行結果。數據的形式多種多樣,演算法可能面臨著接受各種各樣的數據,當演算法接收到不適合演算法處理的數據,演算法本身該如何處理呢?如果演算法能夠處理異常數據,處理能力越強,健壯性越好。
4.時空性
演算法的時空性是該演算法的時間性能和空間性能。主要是說演算法在執行過程中的時間長短和空間佔用多少問題。
演算法處理數據過程中,不同的演算法耗費的時間和內存空間是不同的。
(1)用演算法評論擴展閱讀:
演算法是對特定問題求解步驟的一種描述,它是指令的有限序列,其中每一條指令表示一個或多個操作。此外,一個演算法還具有下列5個重要的特性。
(1)、有窮性
一個演算法必須總是(對任何合法的輸入值)在執行有窮步之後結束,且每一步都可在有窮時間內完成。
(2)、確定性
演算法中每一條指令必須有明確的含義,讀者理解時不會產生二義性。即對於相同的輸入只能得到相同的輸出。
(3)、可行性
一個演算法是可行的,即演算法中描述的操作都是可以通過已經實現的基本運算執行有限次來實現的。
(4)、輸入
一個演算法有零個或多個的輸入,這些輸入取自於某個特定的對象的集合。
(5)、輸出
一個演算法有一個或多個的輸出,這些輸出是同輸入有著某種特定關系的量。
Ⅱ 應該從哪些方面分析和評價演算法的性能
分析評價演算法性能的四個標准:
1.正確性
能正確地實現預定的功能,滿足具體問題的需要。處理數據使用的演算法是否得當,能不能得到預想的結果。
2.易讀性
易於閱讀、理解和交流,便於調試、修改和擴充。寫出的演算法,能不能讓別人看明白,能不能讓別人明白演算法的邏輯?如果通俗易懂,在系統調試和修改或者功能擴充的時候,使系統維護更為便捷。
3.健壯性
輸入非法數據,演算法也能適當地做出反應後進行處理,不會產生預料不到的運行結果。數據的形式多種多樣,演算法可能面臨著接受各種各樣的數據,當演算法接收到不適合演算法處理的數據,演算法本身該如何處理呢?如果演算法能夠處理異常數據,處理能力越強,健壯性越好。
4.時空性
演算法的時空性是該演算法的時間性能和空間性能。主要是說演算法在執行過程中的時間長短和空間佔用多少問題。
演算法處理數據過程中,不同的演算法耗費的時間和內存空間是不同的。
(2)用演算法評論擴展閱讀:
演算法是對特定問題求解步驟的一種描述,它是指令的有限序列,其中每一條指令表示一個或多個操作。此外,一個演算法還具有下列5個重要的特性。
(1)、有窮性
一個演算法必須總是(對任何合法的輸入值)在執行有窮步之後結束,且每一步都可在有窮時間內完成。
(2)、確定性
演算法中每一條指令必須有明確的含義,讀者理解時不會產生二義性。即對於相同的輸入只能得到相同的輸出。
(3)、可行性
一個演算法是可行的,即演算法中描述的操作都是可以通過已經實現的基本運算執行有限次來實現的。
(4)、輸入
一個演算法有零個或多個的輸入,這些輸入取自於某個特定的對象的集合。
(5)、輸出
一個演算法有一個或多個的輸出,這些輸出是同輸入有著某種特定關系的量。
Ⅲ 評價演算法的四個標準是什麼
評價演算法的四個標准:
1.正確性
能正確地實現預定的功能,滿足具體問題的需要。處理數據使用的演算法是否得當,能不能得到預想的結果。
2.易讀性
易於閱讀、理解和交流,便於調試、修改和擴充。寫出的演算法,能不能讓別人看明白,能不能讓別人明白演算法的邏輯?如果通俗易懂,在系統調試和修改或者功能擴充的時候,使系統維護更為便捷。
3.健壯性
輸入非法數據,演算法也能適當地做出反應後進行處理,不會產生預料不到的運行結果。數據的形式多種多樣,演算法可能面臨著接受各種各樣的數據,當演算法接收到不適合演算法處理的數據,演算法本身該如何處理呢?如果演算法能夠處理異常數據,處理能力越強,健壯性越好。
4.時空性
演算法的時空性是該演算法的時間性能和空間性能。主要是說演算法在執行過程中的時間長短和空間佔用多少問題。
演算法處理數據過程中,不同的演算法耗費的時間和內存空間是不同的。
(3)用演算法評論擴展閱讀:
演算法是對特定問題求解步驟的一種描述,它是指令的有限序列,其中每一條指令表示一個或多個操作。此外,一個演算法還具有下列5個重要的特性。
(1)、有窮性
一個演算法必須總是(對任何合法的輸入值)在執行有窮步之後結束,且每一步都可在有窮時間內完成。
(2)、確定性
演算法中每一條指令必須有明確的含義,讀者理解時不會產生二義性。即對於相同的輸入只能得到相同的輸出。
(3)、可行性
一個演算法是可行的,即演算法中描述的操作都是可以通過已經實現的基本運算執行有限次來實現的。
(4)、輸入
一個演算法有零個或多個的輸入,這些輸入取自於某個特定的對象的集合。
(5)、輸出
一個演算法有一個或多個的輸出,這些輸出是同輸入有著某種特定關系的量。
Ⅳ 如何評價演算法
評價演算法的四個標准:
1.正確性
能正確地實現預定的功能,滿足具體問題的需要。處理數據使用的演算法是否得當,能不能得到預想的結果。
2.易讀性
易於閱讀、理解和交流,便於調試、修改和擴充。寫出的演算法,能不能讓別人看明白,能不能讓別人明白演算法的邏輯?如果通俗易懂,在系統調試和修改或者功能擴充的時候,使系統維護更為便捷。
3.健壯性
輸入非法數據,演算法也能適當地做出反應後進行處理,不會產生預料不到的運行結果。數據的形式多種多樣,演算法可能面臨著接受各種各樣的數據,當演算法接收到不適合演算法處理的數據,演算法本身該如何處理呢?如果演算法能夠處理異常數據,處理能力越強,健壯性越好。
4.時空性
演算法的時空性是該演算法的時間性能和空間性能。主要是說演算法在執行過程中的時間長短和空間佔用多少問題。
演算法處理數據過程中,不同的演算法耗費的時間和內存空間是不同的。
(4)用演算法評論擴展閱讀:
演算法是對特定問題求解步驟的一種描述,它是指令的有限序列,其中每一條指令表示一個或多個操作。此外,一個演算法還具有下列5個重要的特性。
(1)、有窮性
一個演算法必須總是(對任何合法的輸入值)在執行有窮步之後結束,且每一步都可在有窮時間內完成。
(2)、確定性
演算法中每一條指令必須有明確的含義,讀者理解時不會產生二義性。即對於相同的輸入只能得到相同的輸出。
(3)、可行性
一個演算法是可行的,即演算法中描述的操作都是可以通過已經實現的基本運算執行有限次來實現的。
(4)、輸入
一個演算法有零個或多個的輸入,這些輸入取自於某個特定的對象的集合。
(5)、輸出
一個演算法有一個或多個的輸出,這些輸出是同輸入有著某種特定關系的量。
Ⅳ 5. 簡答題 演算法的評價標准有哪些如何評價
評價演算法的四個標准:
1.正確性
能正確地實現預定的功能,滿足具體問題的需要。處理數據使用的演算法是否得當,能不能得到預想的結果。
2.易讀性
易於閱讀、理解和交流,便於調試、修改和擴充。寫出的演算法,能不能讓別人看明白,能不能讓別人明白演算法的邏輯?如果通俗易懂,在系統調試和修改或者功能擴充的時候,使系統維護更為便捷。
3.健壯性
輸入非法數據,演算法也能適當地做出反應後進行處理,不會產生預料不到的運行結果。數據的形式多種多樣,演算法可能面臨著接受各種各樣的數據,當演算法接收到不適合演算法處理的數據,演算法本身該如何處理呢?如果演算法能夠處理異常數據,處理能力越強,健壯性越好。
4.時空性
演算法的時空性是該演算法的時間性能和空間性能。主要是說演算法在執行過程中的時間長短和空間佔用多少問題。
演算法處理數據過程中,不同的演算法耗費的時間和內存空間是不同的。
(5)用演算法評論擴展閱讀:
演算法是對特定問題求解步驟的一種描述,它是指令的有限序列,其中每一條指令表示一個或多個操作。此外,一個演算法還具有下列5個重要的特性。
(1)、有窮性
一個演算法必須總是(對任何合法的輸入值)在執行有窮步之後結束,且每一步都可在有窮時間內完成。
(2)、確定性
演算法中每一條指令必須有明確的含義,讀者理解時不會產生二義性。即對於相同的輸入只能得到相同的輸出。
(3)、可行性
一個演算法是可行的,即演算法中描述的操作都是可以通過已經實現的基本運算執行有限次來實現的。
(4)、輸入
一個演算法有零個或多個的輸入,這些輸入取自於某個特定的對象的集合。
(5)、輸出
一個演算法有一個或多個的輸出,這些輸出是同輸入有著某種特定關系的量。
Ⅵ 數據驅動!一次利用演算法提升評論活躍的案例
哪個產品甘願只做用戶用完即走的工具?作為內容產品的產品經理,內容同質化帶來的用戶流失始終是困擾我們的問題,如何讓用戶留存並活躍,產生粘性呢?可以通過做社交來實現,通過內容的評論區向社區進行的轉化,例如網易雲音樂。優化評論區有很多辦法,本文將從評論排序演算法的角度,介紹一次評論排序優化的過程,並展望下後續的迭代思路。
本文行文思路如下:
探討這個問題之前先要講評論區對於一篇內容來說有什麼作用。評論尤其是優質評論能夠讓用戶產生共鳴,加深對內容的理解,或者激發用戶討論等等。灌水的評論也是組成評論的一部分,但其價值顯然沒有優質評論高,那怎樣讓優質的評論獲得更多的曝光,解決優質的評論內容無法被用戶看到,互動量少的問題。這就是做評論排序的一個重要意義。
現在主流的評論排序有3種,按點贊數量排序,按時間排序以及基於演算法排序。
按點贊排序最能反映用戶對評論內容的態度,也最直觀易懂,而其問題是時間越長,評論數量越多,新的評論得到的曝光越差。按時間排序則能保證評論內容的流動性,即時性強,但這種排序方式又不能讓優質的評論獲得最大限度的曝光。基於各類演算法排序則一定程度上將這兩種的優點結合起來,既保證了優質評論能獲得更多的曝光,又能讓評論流動更新,在這次迭代時我們也選擇了演算法排序的方式。
Hacker News演算法源於Y Combinator旗下的新聞頻道Hacker News,用戶可以在此討論某個新聞或主題,同時用戶可以對其進行投票。Hacker News演算法則基於用戶投票情況與時間等因素,對內容展示進行排序。這個演算法的公式如下:
其中P代表的得票數,T代表內容發表至今的時間(單位為小時)。而(P-1),(T+2),1.8這些數值,設計這個演算法的人對此的解釋是:(P-1)是為了去掉提交者的投票,(T+2)是為了防止最新帖子分母過下導致最終得分無限大(有說法是選擇2是因為從原始文章出現在其他網站,到轉帖到Hacker News平均需要兩小時),而1.8則是「重力引子」或者叫做「萬有引力」參數,默認為1.8。
了解這個公式之後我們畫個圖
我們發現在其他條件相同時,時間越長,分值越低;投票越多,分值越高;重力引子越大,隨時間衰減越快。深度了解之後我們發現其分子其實代表的是內容質量,分母控制跟隨時間衰減。
(Q指內容質量分,G指重力引子)
了解這些之後我們可以開始動手幹了。
擴展:相似類型的演算法還有Reddit,Delicious,IMDB等。感興趣的同學可以自行查閱。
前面我們提到了,Hacker News演算法計算公式的分子本質上表現的是內容質量。那從哪些維度可以評估評論的內容質量或者影響評論的用戶互動行為呢?可用的指標有點贊數,回復數,評論(回復)字數,發表用戶是否KOL,回復增長速度等。在本次實踐中我們提出猜想為點贊數,回復數,字數可以影響內容質量。基於我們的猜想我們在Hacker News演算法的基礎上進行調整,衍生出了5種計算方式,如下:
原始:Score=(P-1)/(T+2)^1.8
衍生1:Score= (P)/(T+2)^1.8:點贊數不進行減1
衍生2:Score= (P+R)/2*[(T+2)^1.8]:加入回復數的維度,回復數與點贊數各佔1/2權重
衍生3:Score= (P+3R)/4*[(T+2)^1.8]:加入回復數的維度,回復數佔3/4權重,點贊數佔1/4權重
衍生4:Score= [P+R+N/AVERAGE(N)]/3*[(T+2)^1.8] :加入回復數與字數的維度,字數以文章平均字數為1單位,回復數,點贊數與字數各佔1/3權重
衍生5:Score= [2P+5R+N/AVERAGE(N)]/8*[(T+2)^1.8] :加入回復數與字數的維度,字數以文章平均字數為1單位,回復數佔5/8權重,點贊數佔2/8權重,字數佔1/8權重
(Score=排序分;P=點贊數;R=回復數;N=字數;AVERAGE(N)=當前文章評論字數平均值;T=評論發布距今天小時數)
確定了演算法後,我們抽取了幾篇線上的評論量相對較多的文章的評論內容,按上面的幾種演算法進行排序,觀察對比每種演算法排序的評論列表的特點,以及這幾種演算法能否讓優質評論突出,讓灌水評論沉底。我們以《武漢市中心醫院:李醫生去世》這篇文章為例,這篇文章約有5000條評論,將其所有評論按以上6種演算法排序後如圖所示。
列表開頭:
列表結尾:
得出以下研究結果:
1.點贊和回復數較多的評論不太會受演算法影響,受時間衰減影響也較小,能夠一直排在最前的位置
2.僅計算點贊與回復數時,如遇無點贊與回復評論則僅以時間倒序進行排序,質量較高的評論會被沉底,需要加入字數維度進行調整
3.加入字數維度能夠有效將質量較低(字數少,無意義,無點贊回復)的評論甩在隊列最後
4.加入字數和回復數維度後較多較高質量評論(有一定的觀點,字數較多,點贊和回復數中等)的排序會更靠前
5.有效字數需要進行限制,如遇灌水帖本身質量不高卻能因字數較多排名靠前,而且字數無法完全證明該評論質量,需要削弱影響佔比
根據上面的案例研究,我們需要加入有效字數的限制邏輯,本次案例中我按67個字進行了限制(受測產品在標准屏幕下一級評論收起狀態最多展示字數67字)計算字數時小於67字按實際字數計算,大於等於67字時按67字計算。
為了控制開發成本,也為了增大各個分組的樣本量。我們在以上演算法中挑出2種,原始演算法與衍生5。來觀察不進行評論排序,Hacker News演算法排序與衍生演算法排序的評論數據情況,對比優劣。將所有用戶根據用戶ID通過模3運算分為3個實驗組,分別展示不同的排序演算法得出的評論列表。(如果用戶量較少不建議將所有用戶進行對比,分組容易產生特殊性)
同時由於節省計算資源:一段時間後的評論不再進行排序計算,按質量分最高值為4000(當前觀察到的最大質量分)計算Score曲線如下:
演算法的更新時效規則設置為:即約T>=80時分數趨近於0且隨時間的衰減變弱並考慮資訊內容的時效性,則3天後不再計算衰減,以第72個小時的分數為其最終得分(T最大值為72)。由於隨時間衰減為指數型變化,則T<=24時Score每10分鍾更新一次,24<T<=48時Score每30分鍾更新一次,48<T<=72時Score每60分鍾更新一次。
整體方案確定好之後就可以准備開發上線了。
演算法上線後,需要隨時監測各個對照組的數據情況,並對有疑惑的數據進行抽樣檢查,了解具體的文章與評論區案例。
經過一段時間對比我們發現加入了回復,點贊和字數多個維度的衍生5演算法用戶互動更為活躍。至此我們確定了一個基礎演算法,在這之後繼續通過不斷調整演算法的各項參數,例如重力因子,各指標影響佔比等,進行對照試驗,試圖找出效果更優秀的計算方式。
以上就是一次完整的一次利用演算法提升評論活躍的案例。最終在包括演算法優化以及新增功能等一些產品迭代的幫助下,產品的評論量增長了一倍多。
提升評論活躍還有很多可以做的工作,例如進行評論的運營:由運營手動或自動的發布一些評論內容,或者對優質評論人工增加推薦權重;功能上支持發圖片或者有趣的大表情等。包括演算法上也可以提出一些新的假設並進行驗證,或者加入自動調整參數的功能,隨時根據內容情況調整演算法參數與邏輯。評論區運營有一定效果後可以增加同時發送到社區(個人狀態)的功能,為社區引流,提升社區氛圍。以達到提升用戶粘性,促進留存的目的。以上僅是個人的一些拙見,在此拋磚引玉。
除了本文介紹的內容,關於評論區還有一些其他的有趣的產品思路值得探究,例如蓋樓式評論區,樹狀式評論區,直線分支式評論區等。以及剛剛提到的幾種內容排序演算法。感興趣的同學可以查閱資料。
本文在編寫過程中較為倉促,難免疏漏煩請指出,虛心接受(求輕噴我還是個孩子)。同時為避免一些問題,省略了一些不重要的步驟,部分參數非真實值,請諒解。
2020年4月17日
我是劉軒宇,從業2年半,前內容網站用戶端產品經理,深水二次元,隨時歡迎大家與我交流,包括但不限於產品,動漫,游戲。Wechat:GraythornVi
Ⅶ 演算法的評價指標有哪些
時間復雜度和空間復雜度。
1、時間復雜度
演算法的時間復雜度是指執行演算法所需要的計算工作量。一般來說,計算機演算法是問題規模n 的函數f(n),演算法的時間復雜度也因此記做。
T(n)=Ο(f(n))
因此,問題的規模n 越大,演算法執行的時間的增長率與f(n) 的增長率正相關,稱作漸進時間復雜度(Asymptotic Time Complexity)。
2、空間復雜度
演算法的空間復雜度是指演算法需要消耗的內存空間。其計算和表示方法與時間復雜度類似,一般都用復雜度的漸近性來表示。同時間復雜度相比,空間復雜度的分析要簡單得多。
空間復雜度記做S(n)=O(f(n))。比如直接插入排序的時間復雜度是O(n^2),空間復雜度是O(1) 。而一般的遞歸演算法就要有O(n)的空間復雜度了,因為每次遞歸都要存儲返回信息。一個演算法的優劣主要從演算法的執行時間和所需要佔用的存儲空間兩個方面衡量。
(7)用演算法評論擴展閱讀:
演算法的方法:
1、遞推法
遞推是序列計算機中的一種常用演算法。它是按照一定的規律來計算序列中的每個項,通常是通過計算機前面的一些項來得出序列中的指定項的值。其思想是把一個復雜的龐大的計算過程轉化為簡單過程的多次重復,該演算法利用了計算機速度快和不知疲倦的機器特點。
2、遞歸法
程序調用自身的編程技巧稱為遞歸(recursion)。一個過程或函數在其定義或說明中有直接或間接調用自身的一種方法,它通常把一個大型復雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解,遞歸策略只需少量的程序就可描述出解題過程所需要的多次重復計算,大大地減少了程序的代碼量。遞歸的能力在於用有限的語句來定義對象的無限集合。
一般來說,遞歸需要有邊界條件、遞歸前進段和遞歸返回段。當邊界條件不滿足時,遞歸前進;當邊界條件滿足時,遞歸返回。
注意:
(1) 遞歸就是在過程或函數里調用自身.
(2) 在使用遞歸策略時,必須有一個明確的遞歸結束條件,稱為遞歸出口。
Ⅷ 如何評價一個演算法的好壞
首先,這個演算法必須是正確的
其次,好的演算法應該是友好的,便於人們理解和交流,並且是機器可執行的。
這個演算法還需要足夠健壯,即當輸入的數據非法或不合理時,也能適當的做出正確的反應或進行相應的處理
最後它還必須擁有高效率和低存儲量要求。
也就是所謂的時間復雜度和空間復雜度
1.時間復雜度
定義:在計算機科學中,演算法的時間復雜度是一個函數,他定量描述了該演算法的運行時間.一個演算法執行所耗費的時間,從理論上講,只有你把你的程序放機器上跑起來,才能知道.然而我們有一套時間復雜度的分析方式.一個演算法所花費的時間與其中語句的執行次數成正比例.演算法中的基本操作的執行次數,為演算法的時間復雜度.
2.時間復雜度為什麼不使用時間來衡量而使用基本語句的運行次數來衡量?
演算法的執行時間依賴於具體的軟硬體環境,所以,不能用執行時間的長短來衡量演算法的時間復雜度,而要通過基本語句執行次數的數量級來衡量。
3.時間復雜度的O漸進表示法(Big O notation)
是用於描述函數漸進行為的數學符號.
大O階方法推導:
計算基本語句的執行次數的數量級;
只需計算基本語句執行次數的數量級,這就意味著只要保證基本語句執行次數的函數中的最高次冪正確即可,可以忽略所有低次冪和最高次冪的系數。這樣能夠簡化演算法分析,並且使注意力集中在最重要的一點上:增長率。
如果演算法中包含嵌套的循環,則基本語句通常是最內層的循環體,如果演算法中包含並列的循環,則將並列循環的時間復雜度相加。例如:
for (i=1; i<=n; i++)
x++;
for (i=1; i<=n; i++)
for (j=1; j<=n; j++)
x++;
第一個for循環的時間復雜度為Ο(n),第二個for循環的時間復雜度為Ο(n2),則整個演算法的時間復雜度為Ο(n+n2)=Ο(n2)。
4.時間復雜度的:最優、平均、最差情況,為什麼時間復雜度看的是最差情況?
最差情況下的復雜度是所有可能的輸入數據所消耗的最大資源,如果最差情況下的復雜度符合我們的要求,我們就可以保證所有的情況下都不會有問題。
某些演算法經常遇到最差情況。比如一個查找演算法,經常需要查找一個不存在的值。
也許你覺得平均情況下的復雜度更吸引你,可是平均情況也有幾點問題。第一,難計算,多數演算法的最差情況下的復雜度要比平均情況下的容易計算的多,第二,有很多演算法的平均情況和最差情況的復雜度是一樣的. 第三,什麼才是真正的平均情況?如果你假設所有可能的輸入數據出現的概率是一樣的話,也是不合理的。其實多數情況是不一樣的。而且輸入數據的分布函數很可能是你沒法知道。
考慮最好情況的復雜度更是沒有意義。
5.如何求解:二分查找、遞歸求階乘、遞歸斐波那契的時間復雜度?
二分查找:通過折紙查找求解時間復雜度為O(logN);
遞歸求階乘:數基本操作遞歸N次得到時間復雜度為O(N);
遞歸斐波那契:分析得出基本操作遞歸了2N次,時間復雜度為O(2N);
6.什麼是空間復雜度?
空間復雜度是對一個演算法在運行過程中臨時佔用存儲空間大小的度量.空間復雜度不是程序佔用了多少bytes的空間,因為這個也沒太大意義,所以空間復雜度算的是變數的個數.空間復雜度計算規則基本跟時間復雜度類似,也使用大O漸進法表示.
7.如何求空間復雜度? 普通函數&遞歸函數
一個演算法的空間復雜度只考慮在運行過程中為局部變數分配的存儲空間的大小,它包括為參數表中形參變數分配的存儲空間和為在函數體中定義的局部變數分配的存儲空間兩個部分。若一個演算法為 遞歸演算法,其空間復雜度為遞歸所使用的堆棧空間的大小,它等於一次調用所分配的臨時存儲空間的大小乘以被調用的次數(即為遞歸調用的次數加1,這個1表示開始進行的一次非遞歸調用)。演算法的空間復雜度一般也以數量級的形式給出。如當一個演算法的空間復雜度為一個常量,即不隨被處理數據量n的大小而改變時,可表示為O(1);當一個演算法的空間復雜度與以2為底的n的對數成正比時,可表示為O(log2n);當一個演算法的空間復雜度與n成線性比例關系時,可表示為O(n).若形參為數組,則只需要為它分配一個存儲由實參傳送來的一個地址指針的空間,即一個機器字長空間;若形參為引用方式,則也只需要為其分配存儲一個地址的空間,用它來存儲對應實參變數的地址,以便由系統自動引用實參變數。
8. 分析遞歸斐波那契數列的:時間、空間復雜度,並對其進行優化,偽遞歸優化->循環優化
long long Fib(int N) {
if (N < 3)
return 1;
return Fib(N - 1) + Fib(N - 2);
}
普通遞歸實現的斐波那契數列:
時間復雜度:O(2^n)
計算並根據O漸進表示法得出時間復雜度.
空間復雜度:O(N);遞歸深度乘以(每一次遞歸的空間佔用{有輔助空間或常量})
偽遞歸優化:
long long fib (long long first, longlong second, int N) {
if(N <3)
return 1;
if(N == 3)
return first + second;
return fib(second, first+second,N-1);
}
時間復雜度:
O(N);
遞歸深度乘以每次遞歸的循環次數
空間復雜度:
O(1)或O(N)
關鍵看編譯器是否優化,優化則為O(1)否則O(N);
循環優化:
long long Fib(int N) {
long long first = 1;
long long second = 1;
long long ret = 0;
for (int i = 3; i <= N ; ++i) {
ret = first + second;
first = second;
second = ret;
}
return second;
}
時間復雜度:O(N);
空間復雜度:O(1);
9.常見時間復雜度
常見的演算法時間復雜度由小到大依次為: Ο(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n2)<Ο(n3)<…<Ο(2n)<Ο(n!) Ο(1)表示基本語句的執行次數是一個常數,一般來說,只要演算法中不存在循環語句,其時間復雜度就是Ο(1)。Ο(log2n)、Ο(n)、Ο(nlog2n)、Ο(n2)和Ο(n3)稱為多項式時間,而Ο(2n)和Ο(n!)稱為指數時間。
Ⅸ 一個演算法的評價主要從哪些方面來考慮
一個演算法的評價主要從以下幾個方面來考慮:
1、時間復雜度
演算法的時間復雜度是指執行演算法所需要的計算工作量。一般來說,計算機演算法是問題規模n 的函數f(n),演算法的時間復雜度也因此記做。
T(n)=Ο(f(n))
因此,問題的規模n 越大,演算法執行的時間的增長率與f(n) 的增長率正相關,稱作漸進時間復雜度(Asymptotic Time Complexity)。
2、空間復雜度
演算法的空間復雜度是指演算法需要消耗的內存空間。其計算和表示方法與時間復雜度類似,一般都用復雜度的漸近性來表示。同時間復雜度相比,空間復雜度的分析要簡單得多。
3、正確性
演算法的正確性是評價一個演算法優劣的最重要的標准。
4、可讀性
演算法的可讀性是指一個演算法可供人們閱讀的容易程度。
5、健壯性
健壯性是指一個演算法對不合理數據輸入的反應能力和處理能力,也稱為容錯性。
(9)用演算法評論擴展閱讀:
演算法可大致分為基本演算法、數據結構的演算法、數論與代數演算法、計算幾何的演算法、圖論的演算法、動態規劃以及數值分析、加密演算法、排序演算法、檢索演算法、隨機化演算法、並行演算法,厄米變形模型,隨機森林演算法。
演算法可以宏泛的分為三類:
一、有限的,確定性演算法 這類演算法在有限的一段時間內終止。他們可能要花很長時間來執行指定的任務,但仍將在一定的時間內終止。這類演算法得出的結果常取決於輸入值。
二、有限的,非確定演算法 這類演算法在有限的時間內終止。然而,對於一個(或一些)給定的數值,演算法的結果並不是唯一的或確定的。
三、無限的演算法 是那些由於沒有定義終止定義條件,或定義的條件無法由輸入的數據滿足而不終止運行的演算法。通常,無限演算法的產生是由於未能確定的定義終止條件。
Ⅹ 舉例說明何謂演算法,特點是什麼評價一個演算法的優劣,主要從哪些因素分析
評價演算法優劣的四個分析因素:
1.正確性
能正確地實現預定的功能,滿足具體問題的需要。處理數據使用的演算法是否得當,能不能得到預想的結果。
2.易讀性
易於閱讀、理解和交流,便於調試、修改和擴充。寫出的演算法,能不能讓別人看明白,能不能讓別人明白演算法的邏輯?如果通俗易懂,在系統調試和修改或者功能擴充的時候,使系統維護更為便捷。
3.健壯性
輸入非法數據,演算法也能適當地做出反應後進行處理,不會產生預料不到的運行結果。數據的形式多種多樣,演算法可能面臨著接受各種各樣的數據,當演算法接收到不適合演算法處理的數據,演算法本身該如何處理呢?如果演算法能夠處理異常數據,處理能力越強,健壯性越好。
4.時空性
演算法的時空性是該演算法的時間性能和空間性能。主要是說演算法在執行過程中的時間長短和空間佔用多少問題。
演算法處理數據過程中,不同的演算法耗費的時間和內存空間是不同的。
(10)用演算法評論擴展閱讀:
演算法是對特定問題求解步驟的一種描述,它是指令的有限序列,其中每一條指令表示一個或多個操作。此外,一個演算法還具有下列5個重要的特性。
(1)、有窮性
一個演算法必須總是(對任何合法的輸入值)在執行有窮步之後結束,且每一步都可在有窮時間內完成。
(2)、確定性
演算法中每一條指令必須有明確的含義,讀者理解時不會產生二義性。即對於相同的輸入只能得到相同的輸出。
(3)、可行性
一個演算法是可行的,即演算法中描述的操作都是可以通過已經實現的基本運算執行有限次來實現的。
(4)、輸入
一個演算法有零個或多個的輸入,這些輸入取自於某個特定的對象的集合。
(5)、輸出
一個演算法有一個或多個的輸出,這些輸出是同輸入有著某種特定關系的量。