演算法想像
㈠ 什麼是演算法
演算法(Algorithm)是指解題方案的准確而完整的描述,是一系列解決問題的清晰指令,演算法代表著用系統的方法描述解決問題的策略機制。也就是說,能夠對一定規范的輸入,在有限時間內獲得所要求的輸出。如果一個演算法有缺陷,或不適合於某個問題,執行這個演算法將不會解決這個問題。不同的演算法可能用不同的時間、空間或效率來完成同樣的任務。一個演算法的優劣可以用空間復雜度與時間復雜度來衡量。
演算法中的指令描述的是一個計算,當其運行時能從一個初始狀態和(可能為空的)初始輸入開始,經過一系列有限而清晰定義的狀態,最終產生輸出並停止於一個終態。一個狀態到另一個狀態的轉移不一定是確定的。隨機化演算法在內的一些演算法,包含了一些隨機輸入。
形式化演算法的概念部分源自嘗試解決希爾伯特提出的判定問題,並在其後嘗試定義有效計算性或者有效方法中成形。這些嘗試包括庫爾特·哥德爾、Jacques Herbrand和斯蒂芬·科爾·克萊尼分別於1930年、1934年和1935年提出的遞歸函數,阿隆佐·邱奇於1936年提出的λ演算,1936年Emil Leon Post的Formulation 1和艾倫·圖靈1937年提出的圖靈機。即使在當前,依然常有直覺想法難以定義為形式化演算法的情況。
㈡ 編程想不出演算法怎麼辦
首先假設你是計算機專業的大學生,或准備報考計算機專業的高中生。
需要先搞清楚自己是以下哪一類症狀:
1. 對於簡單的數學問題(如樓主提到的找質數、算階乘)想不出思路(想出非最優思路也算合格)。
2. 想得出數學思路,但是不會轉化為代碼(代碼冗長也算合格)。
如果是第1類,那麼考慮轉行比較實在吧;
如果是第2類,而且題主學習編程語言已經超過1個月,那麼也請考慮轉行吧;
如果是第2類,但是題主初學編程語言時間<1個月,那麼請繼續堅持,多讀現成代碼,然後自己編寫。如此1個月仍不樂觀,參考上一條。
對於用程序來解決數學問題,一個比較有效的方式是從對數學問題的定義入手。
再強調一遍,沒有思路的時候,試著從定義入手。
比如尋找質數的簡單(並不高效)演算法,有如下思維過程:
1. 質數的定義:只能被1和自身整除的大於1的正整數。
2. 從定義提煉判斷條件:
2.a. 不能被1或自身之外的任何數整除;
2.b. 大於1的正整數。
3. 用自然語言描述演算法過程:
3.a. 2是質數;
3.b. 對每一個大於2的正整數(N)進行如下驗證:用2到N-1除N(實際上到N的正平方根即可),若出現整除,則此數不是質數,否則是質數。
4. 將上述步驟翻譯為偽代碼或代碼。
5. 優化演算法(如剔除不必要的除法操作)。
熟練之後對於簡單問題可以在腦中進行迅速的問題定義和條件提煉,並在腦中想出模糊的演算法過程,然後直接寫代碼。
㈢ 計算機演算法的一般含義
所謂演算法就是面對某些實際問題,把人想像的自然想法用計算機術語來表示出來
㈣ 有關啟發式演算法(Heuristic Algorithm)的一些總結
節選自維基網路:
啟發法 ( heuristics ,源自古希臘語的εὑρίσκω,又譯作:策略法、助發現法、啟發力、捷思法)是指 依據有限的知識 (或「不完整的信息」)在短時間內找到問題解決方案的一種技術。
它是一種依據 關於系統的有限認知 和 假說 從而得到關於此系統的結論的分析行為。由此得到的解決方案有可能會偏離最佳方案。通過與最佳方案的對比,可以確保啟發法的質量。
計算機科學的兩大基礎目標,就是 發現可證明其運行效率良好 且可 得最佳解或次佳解 的演算法。
而啟發式演算法則 試圖一次提供一個或全部目標 。例如它常能發現很不錯的解, 但也沒辦法證明它不會得到較壞的解 ; 它通常可在合理時間解出答案,但也沒辦法知道它是否每次都可以這樣的速度求解。
有時候人們會發現在某些特殊情況下,啟發式演算法會得到很壞的答案或效率極差, 然而造成那些特殊情況的數據結構,也許永遠不會在現實世界出現 。
因此現實世界中啟發式演算法很常用來解決問題。啟發式演算法處理許多實際問題時通常可以在合理時間內得到不錯的答案。
有一類的 通用啟發式策略稱為元啟發式演算法(metaheuristic) ,通常使用隨機數搜索技巧。他們可以應用在非常廣泛的問題上,但不能保證效率。
節選自網路:
啟發式演算法可以這樣定義:一個 基於直觀或經驗構造 的演算法, 在 可接受的花費(指計算時間和空間)下給出待解決組合優化問題每一個實例的一個可行解 , 該可行解與最優解的偏離程度一般不能被預計。 現階段,啟發式演算法以仿自然體演算法為主,主要有蟻群演算法、模擬退火法、神經網路等。
目前比較通用的啟發式演算法一般有模擬退火演算法(SA)、遺傳演算法(GA)、蟻群演算法(ACO)。
模擬退火演算法(Simulated Annealing, SA)的思想借鑒於固體的退火原理,當固體的溫度很高的時候,內能比較大,固體的內部粒子處於快速無序運動,當溫度慢慢降低的過程中,固體的內能減小,粒子的慢慢趨於有序,最終,當固體處於常溫時,內能達到最小,此時,粒子最為穩定。模擬退火演算法便是基於這樣的原理設計而成。
求解給定函數的最小值:其中,0<=x<=100,給定任意y的值,求解x為多少的時候,F(x)最小?
遺傳演算法(Genetic Algorithm, GA)起源於對生物系統所進行的計算機模擬研究。它是模仿自然界生物進化機制發展起來的隨機全局搜索和優化方法,借鑒了達爾文的進化論和孟德爾的遺傳學說。其本質是一種 高效、並行、全局搜索 的方法,能在搜索過程中自動獲取和積累有關搜索空間的知識,並 自適應 地控制搜索過程以求得最佳解。
給定一組五個基因,每一個基因可以保存一個二進制值 0 或 1。這里的適應度是基因組中 1 的數量。如果基因組內共有五個 1,則該個體適應度達到最大值。如果基因組內沒有 1,那麼個體的適應度達到最小值。該遺傳演算法希望 最大化適應度 ,並提供適應度達到最大的個體所組成的群體。
想像有一隻螞蟻找到了食物,那麼它就需要將這個食物待會螞蟻穴。對於這只螞蟻來說,它並不知道應該怎麼回到螞蟻穴。
這只螞蟻有可能會隨機選擇一條路線,這條路可能路程比較遠,但是這只螞蟻在這條路上留下了記號(一種化學物質,信息素)。如果這只螞蟻繼續不停地搬運食物的時候,有其它許多螞蟻一起搬運的話,它們總會有運氣好的時候走到更快返回螞蟻穴的路線。當螞蟻選擇的路線越優,相同時間內螞蟻往返的次數就會越多,這樣就在這條路上留下了更多的信息素。
這時候,螞蟻們就會選擇一些路徑上信息素越濃的,這些路徑就是較優的路徑。當螞蟻們不斷重復這個過程,螞蟻們就會更多地向更濃的信息素的路徑上偏移,這樣最終會確定一條路徑,這條路徑就是最優路徑。
㈤ 設計演算法找出三個數中的最大值
有a,b,c三個數,比較它們的大小
方法一,按順序兩兩比較,取較大的
if (a > b) {
max = a;
} else {
max = b;
}
if (max < c) {
max = c;
}方法二,假設第一個是最大的,與後面兩個數進行比較,將較大的值賦給max
int max = a;
if (b > max) {
max = b;
}
if (c > max) {
max = c;
}
拓展資料
1、什麼是演算法
演算法(algorithm):就是定義良好的計算過程,他取一個或一組的值為輸入,並產生出一個或一組值作為輸出。簡單來說演算法就是一系列的計算步驟,用來將輸入數據轉化成輸出結果。
mark:我們可以把所有的演算法想像為一本「菜譜」,特定的演算法比如菜譜中的的一道「老醋花生米」的製作流程,只要按照菜譜的要求製作老醋花生米,那麼誰都可以做出一道好吃的老醋花生米。so,這個做菜的步驟就可以理解為:「解決問題的步驟」
2、演算法的意義
假設計算機無限快,並且計算機存儲容器是免費的,我們還需要各種亂七八糟的演算法嗎?如果計算機無限快,那麼對於某一個問題來說,任何一個都可以解決他的正確方法都可以的!
當然,計算機可以做到很快,但是不能做到無限快,存儲也可以很便宜但是不能做到免費。
那麼問題就來了效率:解決同一個問題的各種不同演算法的效率常常相差非常大,這種效率上的差距的影響往往比硬體和軟體方面的差距還要大。
3、如何選擇演算法
第一首先要保證演算法的正確性
一個演算法對其每一個輸入的實例,都能輸出正確的結果並停止,則稱它是正確的,我們說一個正確的演算法解決了給定的計算問題。不正確的演算法對於某些輸入來說,可能根本不會停止,或者停止時給出的不是預期的結果。然而,與人們對不正確演算法的看法想反,如果這些演算法的錯誤率可以得到控制的話,它們有時候也是有用的。但是一般而言,我們還是僅關注正確的演算法!
第二分析演算法的時間復雜度
演算法的時間復雜度反映了程序執行時間隨輸入規模增長而增長的量級,在很大程度上能很好反映出演算法的好壞。
㈥ 演算法為什麼重要
第一,演算法實際上不能孤立理解。演算法必須和數據、產品一起來理解。演算法的出現,實際上背後隱藏著人們閱讀行為的「數據化」。我們知道,閱讀是一種私密的行為,閱讀的行為是人們建立精神世界的支柱。那麼問題來了,我們使用產品,我們必須上傳數據。當每個人的閱讀都變為數據,實際上意味著每個人的愛好都能夠被迅速的存儲(你也可以被理解為監視)。而演算法則使得機器能夠最有效率的對人們的愛好和行為進行判斷和分析。從用戶上看,這即是方便,也是隱私的暴露。而對於商業來看,當數據和演算法達到一定水平之後,判斷人們的愛好和規律,進而製作廣告,推出吸引人的媒介產品就成了輕而易舉的事情。可以說未來的數據就是最核心,最重要的資源。
第二,演算法意味著預測,意味著在人們的意識之外,發現他還沒有找到的需求。這是很有意思的。它超出了人們的想像,機器比我們更加了解我們自己。從媒介產品角度來說,這非常有意思,傳播的生產模式可能改變了,反饋滯後的問題也會解決。而從更長遠的角度看,了解閱讀數據只是第一步,下一步可能是更加深層次的愛好,甚至是更底層的行為和思考。但從這個方面來,演算法不是人工智慧,但他意味著人工智慧。它是一個關鍵的入口,從這個地方開始,人們可以藉助機器的力量對自己的行為進行矯正,人的感性思維能力和數據得出的科學結論開始融合了,這是人走向人機合一的第一步。但反過來,我們也需要警惕,演算法的這種功能是不是掌握在社會的良性力量手裡?如果資本或者其他利益集團掌握了演算法和數據資源,是否會對社會控制又多一層牢不可破的枷鎖,一個反烏托邦的社會可能會到來。
第三,不要忘記了演算法的迭代。演算法的妙處在於它是自我成長的。人的迭代是有限的,因為人的思維模式是固定的,學習能力在成年後隨著時間遞減。但是演算法,就像Alphago的棋術,幾年內就漲了幾個量級。這是因為隨著人們使用,給予越來越多的反饋,演算法會越來越精確,發展到人們難以想像的地步,因為演算法是機器學習得出的,人們也越來越不知道演算法背後究竟是什麼東西。可以說,這是其他任何模式都無法做到的。他不知道這背後到底是什麼。
所以總的來說一句話,演算法是很有意思也很有價值的一個熱點。我們要答這個熱點,可以用到的理論既要包括新媒體、人工智慧的相關理論包括一些我們已經說到的如信息繭房、知識溝之類的問題,也要從反面用到傳播政治經濟學(考慮演算法和數據資源的所有權)、全景監視(演算法意味著對人們徹底的監視)。這樣我們答題會比較有深度,也比較完整。
㈦ 如何做演算法研究
一、DSP與TI
為什麼提到電機控制很多人首先會聯想到DSP?而談到DSP控制總繞不過TI,首先DSP晶元是一種具有特殊結構的微處理器。該晶元的內部採用程序和數據分開的哈佛結構,具有專門的硬體乘法器,提供特殊的指令,可以用來快速地實現各種數字信號處理演算法。基於DSP晶元構成的控制系統事實上是一個單片系統,因此整個控制所需的各種功能都可由DSP晶元來實現。因此,可以減小目標系統的體積,減少外部元件的個數,增加系統的可靠性。優點是穩定性好、精度高、處理速度快,目前在變頻器、伺服行業有大量使用。主流的DSP廠家有美國德州儀器(Texas Instruments,TI)、ADI、motorola、傑爾等其他廠商,其中TI的TMS320系列以數字控制和運動控制為主,以價格低廉、簡單易用、功能強大很是受歡迎。
二、常見的電機控制演算法及研究方法
1、電機控制按工作電源種類劃分:可分為直流電機和交流電機。按結構和工作原理可劃分:可分為直流電動機、非同步電動機、同步電動機。不同的電機所採用的驅動方式也是不相同的,這次主要介紹伺服電機,伺服主要靠脈沖來定位,伺服電機接收到1個脈沖,就會旋轉1個脈沖對應的角度,從而實現位移,因此,伺服電機本身具備發出脈沖的功能,所以伺服電機每旋轉一個角度,都會發出對應數量的脈沖,同時又與伺服電機接受的脈沖形成了呼應,或者叫閉環,進而很精確的控制電機的轉動,從而實現精確的定位,可以達到0.001mm。伺服電機相比較普通電機優勢在於控制精度、低頻扭矩,過載能力,響應速度等方面,所以被廣泛使用於機器人,數控機床,注塑,紡織等行業
三、PWM控制及測試結果
脈沖寬度調制是利用微處理器的數字輸出來對模擬電路進行控制的一種非常有效的技術,廣泛應用在從測量、通信到功率控制與變換的許多領域中,脈沖寬度調制是一種模擬控制方式,其根據相應載荷的變化來調制晶體管基極或MOS管柵極的偏置,來實現晶體管或MOS管導通時間的改變,從而實現開關穩壓電源輸出的改變