❶ 推薦一些優秀的演算法
trie圖, KM演算法, 左偏樹, 後綴樹, 前綴薯頃兆樹, LCA, ,線段樹, 樹狀數組,跳躍表 。。。都數租是好乎滑東西
❷ 如何衡量一個演算法的優劣有哪些標准
如何衡量一個演算法的優劣,見人見智。一個好的演算法首先是要能夠滿足場景的需求,其次是在能夠最大限度的節省資源(最低成本原則),最後是實現邏輯簡單,比較容易理解(本質上也是最低成本原則)。但是,在現實中硬體資源不變,演算法不變情況下,演算法執行的效率提高,相對應往往是資源消耗增加。一個合格的演算法是在一個可以接受的范圍內滿足場景需求,而一個優秀的演算法則是在滿足場景需求的基礎上,最大限度的節省資源,簡化邏輯。
比如我要完成一項計算任務,要求是在5分鍾執行完成。現在有演算法1:需要執行1分鍾,消耗內存8G;演算法2需要執行3分鍾,需要消耗內存256M。那麼,我們應該如何選擇呢?首先,這兩種方案都能滿足我們的需求;其次:演算法1的需要消耗的資源是演算法2的32倍,演算法1的效率是演算法2的3倍。在這種滿足需求的情況下,往往更傾向於選擇演算法2。衡量一個演算法的優劣往往要評估多方因素,結合實踐,綜合比較最終得出結論。
衡量一個演算法的的標准主要有3個: 演算法的執行效率 , 演算法的內存消耗 和 演算法的穩定性 。
❸ 請問國內成績優秀、良好、中等、及格GPA都怎麼計算
推薦使用北大的GPA演算法,具體為:90=4.085=3.782=3.378=3.075=2.772=2.3
69=2.066=1.763=1.360=1.0,它對中國學生更加有利。本書的所有GPA也統一使用該演算法。分別對應優秀,良好,中等,及格。
可以有中國學生在申請時,應按照原先學校採用的GPA制提供成績,同時註明採用了哪一種GPA制,對於前友中國學生很不利的是中國大部分學校的評分相當嚴,所以很多優秀學生GPA換算出來以後還不到3.0,在有些大學里班上前5名的學生平均成績可能會在75左右。而有的學生雖然平均成績上了80但用上述方法一計算也不到3.0,這取決與90分以上科目和80分以下科兆脊目的多少。而且在中國內部,計算GPA的方法也不盡相同,例如對外經濟貿易大學,清華大學採取以下折算方法:90-A,80~90-B,70~80-C……然而,廈門大學,中國科技大學等學校則採取另一種方法:85以上為4.0, 75分以上為3.0. 65分以上為2.0……所以有的學校的GPA較其他學校的GPA偏高。
G.P.A. (Grade point average) 又稱G.P.R. (grade point ratio),即成績點數與學分的加權平均值。 可以說GPA是所有硬體條件中最為重要的, 因為教授要最根本的原因就是要去幹活。GPA則是一個量化的指標。美國多數大學對申請人GPA都有最低規定,不夠最低GPA要求的不予考慮。GPA計算方法十八各科成績按等級乘以學分再以總學分除之。以百分制為例,90至100為A等=4.0,80至89為B等=3.0,70至79為C等=2.0,60至69為D等=1.0,60分以下為F等=0點。例如某學生的五門功課的學分和成績為:A課程四個學分,成績92(A),應得點數為4*4=16,B課程族悔滲三個學分,成績80(B),應得點數為3*3=9,C課程兩個學分,成績98(A),應得點數為2*4=8,D課程六個學分,成績70(A),應得點數為6*2=12,E課程三個學分,成績89(B),應得點數為3*3=9。以上五項成績GPA:
GPA=[(4*4)+(3*3)+(2*4)+(6*2)+(3*3)]/(4+3+2+6+3)=3.00。
總平均基點(Overall GPA)是將全部所修學科按以上方法計算出來的點數,最後兩年平均基點( GPA for the last two years)即將最後兩年所修的各科按上述方法計算出來的點數。
在美國90%的學校GPA計算方法為4.00制(4.00 scale)的,又有1%的學校會採取5.00制。即A等成績為5,B等為4,C等為3,D等為2,F等為1,這些學校的最低入學標准也就相應提高了。
❹ 石子合並問題C語言求優秀演算法
先將石頭求和再除仿仿2得m,求<=m得那一堆石頭,再用背包法(動備派纖態規劃羨碰思想,高效)或直接回朔搜索(20較小,也會輕松搞定)。
一般動態規劃相比搜索寫代碼要簡單多,但背包那問題涉及到內存的申請和釋放等指針問題就有點列外啦,呵呵,小弟也沒寫,簡單指導下。拋磚引玉。。。。。
❺ 石子合並問題C語言求優秀演算法
用動態規劃
注意:石子合並問題和最優二叉樹是不同的。
我們先考慮求最大分值。
用a數組存放原來N堆石子的初始數量,下標從0開始。
每一次合並是對現在的某兩堆相鄰石子的,而這相當於將初始時的的若干堆石子合並。
用b[i,j]表示將從初始的第j堆石子開始,循環蘆知向後共i堆石子合並的最大分值。(第N-1堆石子後面是第0堆脊含)
假設最後一次是前k堆合並成的一堆和剩下的i-k堆石子合並成的一堆進行合並。所以總分值就是:這兩堆各自合並的總得分 加上 最後一次全部合並的得分。
狀態轉移方程b[i,j]=max{ b[k,j]+b[i-k,(j+k) mod N] | k=1..i-1 } + a[j] +…+ a[(j+i-1) mod N]b[1,i]=0, i=0..n-1
最後,解就是陪野消b[N,0]到b[N,N-1]中的最大值。
❻ 風靡全球的十大演算法
作者 | George Dvorsky
編譯 | 深度學習這件小事
1 排序演算法
所謂排序,就是使一串記錄,按照其中的某個或某些關鍵字的大小,遞增或遞減的排列起來的操作。排序演算法,就是如何使得記錄按照要求排列的方法。排序演算法在很多領域得到相當地重視,尤其是在大量數據的處理方面。一個優秀的演算法可以節省大量的資源。
穩定的
冒泡排序(bubble sort) — O(n^2) 雞尾酒排序(Cocktail sort,雙向的冒泡排序) — O(n^2) 插入排序(insertion sort)— O(n^2) 桶排序(bucket sort)— O(n); 需要 O(k) 額外空間 計數排序(counting sort) — O(n+k); 需要 O(n+k) 額外空間 合並排序(merge sort)— O(nlog n);需要 O(n) 額外空間 原地合並排序— O(n^2) 二叉排序樹排序 (Binary tree sort) — O(nlog n)期望時間; O(n^2)最壞時間;需要 O(n) 額外空間 鴿巢排序(Pigeonhole sort)— O(n+k); 需要 O(k) 額外空間 基數排序(radix sort)— O(n·k); 需要 O(n) 額外空間 Gnome 排序— O(n^2) 圖書館排序— O(nlog n) withhigh probability,需要(1+ε)n額外空間不穩定的
選擇排序(selection sort)— O(n^2) 希爾排序(shell sort)— O(nlog n) 如果使用最佳的現在版本 組合排序— O(nlog n) 堆排序(heapsort)— O(nlog n) 平滑排序— O(nlog n) 快速排序(quicksort)— O(nlog n) 期望時間,O(n^2) 最壞情況;對於大的、亂數列表一般相信是最快的已知排序 Introsort—O(nlog n) Patience sorting— O(nlog n+k) 最壞情況時間,需要額外的 O(n+ k) 空間,也需要找到最長的遞增子串列(longest increasing subsequence)不實用的
Bogo排序— O(n× n!) 期望時間,無窮的最壞情況。 Stupid sort— O(n^3); 遞歸版本需要 O(n^2)額外存儲器 珠排序(Bead sort) — O(n) or O(√n),但需要特別的硬體 Pancake sorting— O(n),但需要特別的硬體 stooge sort——O(n^2.7)很漂亮但是很耗時2 傅立葉變換與快速傅立葉變換
傅立葉是一位法國數學家和物理學家,原名是JeanBaptiste Joseph Fourier(1768-1830), Fourier於1807年在法國科學學會上發表了一篇論文,論文里描述運用正弦曲線來描述溫度分布,論文里有個在當時具有爭議性的決斷:任何連續周期信號都可以由一組適當的正弦曲線組合而成。當時審查這個論文拉格朗日堅決反對此論文的發表,而後在近50年的時間里,拉格朗日堅持認為傅立葉的方法無法表示帶有稜角的信號,如在方波中出現非連續變化斜率。直到拉格朗日死後15年這個論文才被發表出來。誰是對的呢?拉格朗日是對的:正弦曲線無法組合成一個帶有稜角的信號。但是,我們可以用正弦曲線來非常逼近地表示它,逼近到兩種表示方法不存在能量差別,基於此,傅立葉是對的。為什麼我們要用正弦曲線來代替原來的曲線呢?如我們也還可以用方波或三角波來代替呀,分解信號的方法是無窮多的,但分解信號的目的是為了更加簡單地處理原來的信號。用正餘弦來表示原信號會更加簡單,因為正餘弦擁有原信號所不具有的性質:正弦曲線保真度。一個正餘弦曲線信號輸入後,輸出的仍是正餘弦曲線,只有幅度和相位可能發生變化,但是頻率和波的形狀仍是一樣的。且只有正餘弦曲線才擁有這樣的性質,正因如此我們才不用方波或三角波來表示。
3 Dijkstra 演算法
Dijkstra演算法是典型的演算法。Dijkstra演算法是很有代表性的演算法。Dijkstra一般的表述通常有兩種方式,一種用永久和臨時標號方式,一種是用OPEN, CLOSE表的方式,這里均採用永久和臨時標號的方式。注意該演算法要求圖中不存在負權邊。
4 RSA演算法變換
RSA是目前最有影響力的公鑰加密演算法,它能夠抵抗到目前為止已知的絕大多數密碼攻擊,已被ISO推薦為公鑰數據加密標准。今天只有短的RSA鑰匙才可能被強力方式解破。到2008年為止,世界上還沒有任何可靠的攻擊RSA演算法的方式。只要其鑰匙的長度足夠長,用RSA加密的信息實際上是不能被解破的。但在分布式計算和量子計算機理論日趨成熟的今天,RSA加密安全性受到了挑戰。
5 安全哈希演算法
一種對輸入信息(例如消息)進行摘要的演算法。摘要過程能夠完成下列特點:不同的輸入信息絕對不會具有相同的指紋:相近輸入信息經過摘要之後的輸出信息具有較大的差異,同時計算上很難生產一個與給定輸入具有相同指紋的輸入。(即不可逆)。
6 整數因式分解
這是在計算機領域被大量使用的數學演算法,沒有這個演算法,信息加密會更不安全。該演算法定義了一系列步驟,得到將一合數分解為更小因子的質數分解式。這被認為是一種FNP問題,它是NP分類問題的延伸,極其難以解決。許多加密協議(如RSA演算法)都基於這樣一個原理:對大的合數作因式分解是非常困難的。如果一個演算法能夠快速地對任意整數進行因式分解,RSA的公鑰加密體系就會失去其安全性。量子計算的誕生使我們能夠更容易地解決這類問題,同時它也打開了一個全新的領域,使得我們能夠利用量子世界中的特性來保證系統安全。
7 鏈接分析
鏈接分析,源於對Web結構中超鏈接的多維分析。當前其應用主要體現在網路信息檢索、網路計量學、數據挖掘、Web結構建模等方山。作為Google的核心技術之一,鏈接分析演算法應用已經顯現出j驚人的商業價值。
8 比例積分微分演算法
你是否曾經用過飛機、汽車、衛星服務或手機網路?你是否曾經在工廠工作或是看見過機器人?如果回答是肯定的,那麼你應該已經見識過這個演算法了。大體上,這個演算法使用一種控制迴路反饋機制,將期望輸出信號和實際輸出信號之間的錯誤最小化。無論何處,只要你需要進行信號處理,或者你需要一套電子系統,用來自動化控制機械、液壓或熱力系統,這個演算法都會有用武之地。可以這樣說,如果沒有這個演算法,現代文明將不復存在。
9 數據壓縮演算法
在現今的電子信息技術領域,正發生著一場有長遠影響的數字化革命。由於數字化的多媒體信息尤其是數字視頻、音頻信號的數據量特別龐大,如果不對其進行有效的壓縮就難以得到實際的應用。因此,數據壓縮技術已成為當今數字通信、廣播、存儲和多媒體娛樂中的一項關鍵的共性技術。
10 隨機數生成
在統計學的不同技術中需要使用隨機數,比如在從統計總體中抽取有代表性的樣本的時候,或者在將實驗動物分配到不同的試驗組的過程中,或者在進行蒙特卡羅模擬法計算的時候等等。
❼ c語言常用演算法有哪些
0) 窮舉法
窮舉法簡單粗暴,沒有什麼問題是搞不定的,只要你肯花時間。同時對於小數據量,窮舉法就是最優秀的演算法。就像太祖長拳,簡單,人人都能會,能解決問題,但是與真正的高手過招,就頹了。
1) 貪婪演算法
貪婪演算法可以獲取到問題的局部最優解,不一定能獲取到全局最優解,同時獲取最優解的好壞要看貪婪策略的選擇。特點就是簡單,能獲取到局部最優解。就像打狗棍法,同一套棍法,洪七公和魯有腳的水平就差太多了,因此同樣是貪婪演算法,不同的貪婪策略會導致得到差異非常大的結果。
2) 動態規劃演算法
當最優化問題具有重復子問題和最優子結構的時候,就是動態規劃出場的時候了。動態規劃演算法的核心就是提供了一個memory來緩存重復子問題的結果,避免了遞歸的過程中的大量的重復計算。動態規劃演算法的難點在於怎麼將問題轉化為能夠利用動態規劃演算法來解決。當重復子問題的數目比較小時,動態規劃的效果也會很差。如果問題存在大量的重復子問題的話,那麼動態規劃對於效率的提高是非常恐怖的。就像斗轉星移武功,對手強它也會比較強,對手若,他也會比較弱。
3)分治演算法
分治演算法的邏輯更簡單了,就是一個詞,分而治之。分治演算法就是把一個大的問題分為若干個子問題,然後在子問題繼續向下分,一直到base cases,通過base cases的解決,一步步向上,最終解決最初的大問題。分治演算法是遞歸的典型應用。
4) 回溯演算法
回溯演算法是深度優先策略的典型應用,回溯演算法就是沿著一條路向下走,如果此路不同了,則回溯到上一個
分岔路,在選一條路走,一直這樣遞歸下去,直到遍歷萬所有的路徑。八皇後問題是回溯演算法的一個經典問題,還有一個經典的應用場景就是迷宮問題。
5) 分支限界演算法
回溯演算法是深度優先,那麼分支限界法就是廣度優先的一個經典的例子。回溯法一般來說是遍歷整個解空間,獲取問題的所有解,而分支限界法則是獲取一個解(一般來說要獲取最優解)。
❽ 如何才能設計出優秀的演算法
數據結構中評價一個好的演算法,應該從四個方面來考慮,分別是:
一、演算法的正確性。
二、演算法的易讀性。
三、是演算法的健壯性。
四、是演算法的時空效率(運行)。
演算法的設計取決於數據(邏輯)結構,演算法的實現取決於所採用的存儲結構。數據的存儲結構本質上是其邏輯結構在計算機存儲器中的實現。為了充分反映數據的邏輯結構,它在內存中的映像包括兩個方面,即數據元素之間的信息和數據元素之間的關系。不同的數據結構有相應的操作。數據操作是定義在數據邏輯結構上的操作演算法,如檢索、插入、刪除、更新和排序。
(8)優秀演算法擴展閱讀
該演算法的一般性質包括:
1、對於任何符合輸入類型的輸入數據,都可以根據演算法來解決問題,軟體包保證了計算結構的正確性。
2、演算法中的每一條指令都必須能夠被人或機器執行。
3、確定性演算法應該在每一步之後都有明確的下一步指示。也就是說,確保每個步驟都有下一步行動的指示,並且不缺乏或只有模糊的下一步行動指示。
4、有限演算法的執行必須以有限的步數結束。
❾ 中國古代數學優秀演算法,除輾轉相除法秦九韶演算法和更相減損術外
「方程術」的關鍵演算法叫「遍乘直除」,《九章算術》卷4中有「開方術」和「開立方術」 「四元術」 「中國剩餘定理」
中國古代數學將幾何問題也歸結為代數方程,然後用程式化的演算法來求解.因此,中國古代數學具有明顯的演算法化、機械化的特徵.以下擇要舉例說明中國古代數學發展的這種特徵.