導航:首頁 > 源碼編譯 > 演算法管控下的例子

演算法管控下的例子

發布時間:2023-01-17 16:36:16

⑴ 什麼是演算法試從日常生活中找3個例子,描述它們的演算法

演算法就是解決問題的方法比如你要喝茶就要先找到茶葉,燒一壺開水,然後將茶葉放到杯子里,然後將開水倒入杯中,然後等一段時間再比如你要從a地到b地,中間可能有多種汽車換乘方案,是選速度最快的,還是選最省錢的,還是平衡的,制定換乘方案就是演算法。

⑵ 已親測:最優化演算法的核心思想與程序例子

蒙特卡洛: 大量隨機抽樣下的比對,最後結果就是在當前抽樣數量下篩選出的一定是最想要的那個結果。舉例:假如籃子里有1000個蘋果(你定的測試集),讓你 每次閉著眼睛找一個最大的,可以不限制挑選次數;於是,你可以閉著眼隨機拿了一個,然後再隨機拿一個與第一個比,留下大的;再隨機拿一個,與前次留下的比較,又 可以留下大的;循環往復這樣:拿的次數越多,挑出最大蘋果的可能性也就越大!但除非你把1000個蘋果都挑一遍,否則你無法肯定最終挑出來的就是最大的一個。如果有 10000個蘋果的話,繼續如此說不定就能找到更大的!

模擬退火 :「漸漸」清楚自己的目標是什麼!並不斷朝「越發」明確的目標邁進,「越來越」不被誘惑干擾。舉例:為了找出地球上最高的山,一隻兔子在開始並沒有 合適的策略,它隨機地跳了很長時間!在這期間,它可能走向高處,也可能踏入平地或溝壑。但是,隨著時間的流逝,它「漸漸清醒」! 並「直直地」朝著最高的方向跳去, 最後就到達了珠穆朗瑪峰。

粒子群 :信息的社會共享,以一個團隊的形式來搜索!團隊里成員信息共享,共同進步;避免一個人工作時出現目光短淺,沒有全局意識。舉例:就像下圍棋,只 專注於一個角落的戰斗不一定能獲取最終的勝利,只有放眼全局,把所有己方的棋子都盤活,相互間彼此幫助,才能獲得最後勝利。

蟻群 :和粒子群演算法有些相似,都是靠團隊的力量共同去找目標!蟻群演算法中特殊的是它的"信息素"揮發! 這個效果是其他演算法中沒有的!

以上所有的最優化演算法都很難做到極高的精度,這是必然的: 一是 因為全局搜索已經耗費了大量的時間和資源,再過分強調精度有些不經濟; 二是 因為全局搜索得到的最值可以理解為一精確最值的一個准確范圍!即進入這個范圍再進行精確的搜索一定可以找到精確最值;但是,全局最優的核心是隨機/概率,當進入一個准確范圍時,這個范圍肯定是很小的,如果之後精確搜索還用全局搜索的概率參數(此時來說波動范圍太大了),很可能又會跳出這個好不容易找到的精確區域!

因此: 全局最優演算法與局部最優演算法是要相結合的 !全局最優演算法負責劃定最值所在的一個精確的、較小的范圍內,即告訴局部最優演算法在這個范圍內繼續找一定可以找到精確解;局部最優演算法按照較小的步長、較高的精度繼續搜索精確最值。

常用全局最優演算法:蒙特卡洛(MC)、模擬退火(SA)、粒子群(PSO)、蟻群(AG);

常用局部最優演算法:梯度下降法、牛頓法、阻尼牛頓法、共軛梯度法;

推薦搭配1:蒙特卡洛

推薦搭配2:粒子群 + 梯度下降

推薦搭配3:蟻群 + 梯度下降 + 重檢機制

以上提到演算法的 「程序 + 詳細使用說明」 參考以下地址:

優化演算法

⑶ c語言問題: 什麼是演算法試從日常生活中找3個例子,描述它們的演算法。 詳細點,謝謝!

c語言中的演算法是指:一系列解決問題的清晰指令,用系統的方法描述解決問題的策略機制。也就是說,能夠對一定規范的輸入,在有限時間內獲得所要求的輸出。通俗說就是解決問題的方法和步驟。

描述演算法的例子:

  1. 問題:從上海去到北京。

    其中的演算法:做汽車、做飛機、或者徒步。

  2. 問題:喝茶。

    其中的演算法:先找到茶葉,再燒一壺開水,然後將茶葉放到杯子里,將開水倒入杯中,等茶葉泡好。

  3. 問題:開車。

    其中的演算法:首先要打開車門,駕駛員坐好,插上車鑰匙,發動汽車。

⑷ 一文搞懂PID控制演算法

PID演算法是工業應用中最廣泛演算法之一,在閉環系統的控制中,可自動對控制系統進行准確且迅速的校正。PID演算法已經有100多年歷史,在四軸飛行器,平衡小車、汽車定速巡航、溫度控制器等場景均有應用。

之前做過循跡車項目,簡單循跡搖擺幅度較大,效果如下所示:

PID演算法優化後,循跡穩定性能較大提升,效果如下所示:

PID演算法:就是「比例(proportional)、積分(integral)、微分(derivative)」,是一種常見的「保持穩定」控制演算法。

常規的模擬PID控制系統原理框圖如下所示:

因此可以得出e(t)和u(t)的關系:

其中:

Kp:比例增益,是調適參數;

Ki:積分增益,也是調適參數;

Kd:微分增益,也是調適參數;

e:誤差=設定值(SP)- 回授值(PV);

t:目前時間。

數學公式可能比較枯燥,通過以下例子,了解PID演算法的應用。

例如,使用控制器使一鍋水的溫度保持在50℃,小於50℃就讓它加熱,大於50度就斷電不就行了?

沒錯,在要求不高的情況下,確實可以這么干,如果換一種說法,你就知道問題出在哪裡了。

如果控制對象是一輛汽車呢?要是希望汽車的車速保持在50km/h不動,這種方法就存在問題了。

設想一下,假如汽車的定速巡航電腦在某一時間測到車速是45km/h,它立刻命令發動機:加速!

結果,發動機那邊突然來了個100%全油門,嗡的一下汽車急加速到了60km/h,這時電腦又發出命令:剎車!結果乘客吐......

所以,在大多數場合中,用「開關量」來控制一個物理量就顯得比較簡單粗暴了,有時候是無法保持穩定的,因為單片機、感測器不是無限快的,採集、控制需要時間。

而且,控制對象具有慣性,比如將熱水控制器拔掉,它的「余熱」即熱慣性可能還會使水溫繼續升高一小會。

此時就需要使用PID控制演算法了。

接著咱再來詳細了解PID控制演算法的三個最基本的參數:Kp比例增益、Ki積分增益、Kd微分增益。

1、Kp比例增益

Kp比例控制考慮當前誤差,誤差值和一個正值的常數Kp(表示比例)相乘。需要控制的量,比如水溫,有它現在的 當前值 ,也有我們期望的 目標值 。

當兩者差距不大時,就讓加熱器「輕輕地」加熱一下。

要是因為某些原因,溫度降低了很多,就讓加熱器「稍稍用力」加熱一下。

要是當前溫度比目標溫度低得多,就讓加熱器「開足馬力」加熱,盡快讓水溫到達目標附近。

這就是P的作用,跟開關控制方法相比,是不是「溫文爾雅」了很多。

實際寫程序時,就讓偏差(目標減去當前)與調節裝置的「調節力度」,建立一個一次函數的關系,就可以實現最基本的「比例」控制了~

Kp越大,調節作用越激進,Kp調小會讓調節作用更保守。

若你正在製作一個平衡車,有了P的作用,你會發現,平衡車在平衡角度附近來回「狂抖」,比較難穩住。

2、Kd微分增益

Kd微分控制考慮將來誤差,計算誤差的一階導,並和一個正值的常數Kd相乘。

有了P的作用,不難發現,只有P好像不能讓平衡車站起來,水溫也控製得晃晃悠悠,好像整個系統不是特別穩定,總是在「抖動」。

設想有一個彈簧:現在在平衡位置上,拉它一下,然後鬆手,這時它會震盪起來,因為阻力很小,它可能會震盪很長時間,才會重新停在平衡位置。

請想像一下:要是把上圖所示的系統浸沒在水裡,同樣拉它一下 :這種情況下,重新停在平衡位置的時間就短得多。

此時需要一個控製作用,讓被控制的物理量的「變化速度」趨於0,即類似於「阻尼」的作用。

因為,當比較接近目標時,P的控製作用就比較小了,越接近目標,P的作用越溫柔,有很多內在的或者外部的因素,使控制量發生小范圍的擺動。

D的作用就是讓物理量的速度趨於0,只要什麼時候,這個量具有了速度,D就向相反的方向用力,盡力剎住這個變化。

Kd參數越大,向速度相反方向剎車的力道就越強,如果是平衡小車,加上P和D兩種控製作用,如果參數調節合適,它應該可以站起來了。

3、Ki積分增益

Ki積分控制考慮過去誤差,將誤差值過去一段時間和(誤差和)乘以一個正值的常數Ki。

還是以熱水為例,假如有個人把加熱裝置帶到了非常冷的地方,開始燒水了,需要燒到50℃。

在P的作用下,水溫慢慢升高,直到升高到45℃時,他發現了一個不好的事情:天氣太冷,水散熱的速度,和P控制的加熱的速度相等了。

這可怎麼辦?

P兄這樣想:我和目標已經很近了,只需要輕輕加熱就可以了。

D兄這樣想:加熱和散熱相等,溫度沒有波動,我好像不用調整什麼。

於是,水溫永遠地停留在45℃,永遠到不了50℃。

根據常識,我們知道,應該進一步增加加熱的功率,可是增加多少該如何計算呢?

前輩科學家們想到的方法是真的巧妙,設置一個積分量,只要偏差存在,就不斷地對偏差進行積分(累加),並反應在調節力度上。

這樣一來,即使45℃和50℃相差不是太大,但是隨著時間的推移,只要沒達到目標溫度,這個積分量就不斷增加,系統就會慢慢意識到:還沒有到達目標溫度,該增加功率啦!

到了目標溫度後,假設溫度沒有波動,積分值就不會再變動,這時,加熱功率仍然等於散熱功率,但是,溫度是穩穩的50℃。

Ki的值越大,積分時乘的系數就越大,積分效果越明顯,所以,I的作用就是,減小靜態情況下的誤差,讓受控物理量盡可能接近目標值。

I在使用時還有個問題:需要設定積分限制,防止在剛開始加熱時,就把積分量積得太大,難以控制。

PID演算法的參數調試是指通過調整控制參數(比例增益、積分增益/時間、微分增益/時間) 讓系統達到最佳的控制效果 。

調試中穩定性(不會有發散性的震盪)是首要條件,此外,不同系統有不同的行為,不同的應用其需求也不同,而且這些需求還可能會互相沖突。

PID演算法只有三個參數,在原理上容易說明,但PID演算法參數調試是一個困難的工作,因為要符合一些特別的判據,而且PID控制有其限制存在。

1、穩定性

若PID演算法控制器的參數未挑選妥當,其控制器輸出可能是不穩定的,也就是其輸出發散,過程中可能有震盪,也可能沒有震盪,且其輸出只受飽和或是機械損壞等原因所限制。不穩定一般是因為過大增益造成,特別是針對延遲時間很長的系統。

2、最佳性能

PID控制器的最佳性能可能和針對過程變化或是設定值變化有關,也會隨應用而不同。

兩個基本的需求是調整能力(regulation,干擾拒絕,使系統維持在設定值)及命令追隨 (設定值變化下,控制器輸出追隨設定值的反應速度)。有關命令追隨的一些判據包括有上升時間及整定時間。有些應用可能因為安全考量,不允許輸出超過設定值,也有些應用要求在到達設定值過程中的能量可以最小化。

3、各調試方法對比

4、調整PID參數對系統的影響

⑸ 分治演算法幾個經典例子

分治法,字面意思是「分而治之」,就是把一個復雜的1問題分成兩個或多個相同或相似的子問題,再把子問題分成更小的子問題直到最後子問題可以簡單地直接求解,原問題的解即子問題的解的合並,這個思想是很多高效演算法的基礎。

圖二

大整數乘法

Strassen矩陣乘法

棋盤覆蓋

合並排序

快速排序

線性時間選擇

最接近點對問題

循環賽日程表

漢諾塔

⑹ 動態規劃演算法程序例子

給你導彈攔截的吧:
[問題描述]
某國為了防禦敵國的導彈襲擊,發展出一種導彈攔截系統。但是這種導彈攔截系統有一個缺陷:雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能高於前一發的高度。某天,雷達捕捉到敵國的導彈來襲。由於該系統還在試用階段,所以只有一套系統,因此有可能不能攔截所有的導彈。
輸入導彈依次飛來的高度(雷達給出的高度數據是不大於30000的正整數,每個數據之間至少有一個空格),計算這套系統最多能攔截多少導彈,如果要攔截所有導彈最少要配備多少套這種導彈攔截系統。

[輸入輸出樣例]
INPUT:
389 207 155 300 299 170 158 65
OUTPUT:
6(最多能攔截的導彈數)
2(要攔截所有導彈最少要配備的系統數)

[問題分析]
我們先解決第一問。一套系統最多能攔多少導彈,跟它最後攔截的導彈高度有很大關系。假設a[i]表示攔截的最後一枚導彈是第i枚時,系統能攔得的最大導彈數。例如,樣例中a[5]=3,表示:如果系統攔截的最後一枚導彈是299的話,最多可以攔截第1枚(389)、第4枚(300)、第5枚(299)三枚導彈。顯然,a[1]~a[8]中的最大值就是第一問的答案。關鍵是怎樣求得a[1]~a[8]。
假設現在已經求得a[1]~a[7](註:在動態規劃中,這樣的假設往往是很必要的),那麼怎樣求a[8]呢?a[8]要求系統攔截的最後1枚導彈必須是65,也就意味著倒數第2枚被攔截的導彈高度必須不小於65,則符合要求的導彈有389、207、155、300、299、170、158。假如最後第二枚導彈是300,則a[8]=a[4]+1;假如倒數第2枚導彈是299,則a[8]=a[5]+1;類似地,a[8]還可能是a[1]+1、a[2]+1、……。當然,我們現在求得是以65結尾的最多導彈數目,因此a[8]要取所有可能值的最大值,即a[8]=max{a[1]+1,a[2]+1,……,a[7]+1}=max{a[i]}+1 (i=1..7)。
類似地,我們可以假設a[1]~a[6]為已知,來求得a[7]。同樣,a[6]、a[5]、a[4]、a[3]、a[2]也是類似求法,而a[1]就是1,即如果系統攔截的最後1枚導彈是389,則只能攔截第1枚。
這樣,求解過程可以用下列式子歸納:
a[1]=1
a[i]=max{a[j]}+1 (i>1,j=1,2,…,i-1,且j同時要滿足:a[j]>=a[i])
最後,只需把a[1]~a[8]中的最大值輸出即可。這就是第一問的解法,這種解題方法就稱為「動態規劃」。

第二問比較有意思。由於它緊接著第一問,所以很容易受前面的影響,多次採用第一問的辦法,然後得出總次數,其實這是不對的。要舉反例並不難,比如長為7的高度序列「7 5 4 1 6 3 2」, 最長不上升序列為「7 5 4 3 2」,用多次求最長不上升序列的結果為3套系統;但其實只要2套,分別擊落「7 5 4 1」與「6 3 2」。所以不能用「動態規劃」做,那麼,正確的做法又是什麼呢?
我們的目標是用最少的系統擊落所有導彈,至於系統之間怎麼分配導彈數目則無關緊要,上面錯誤的想法正是承襲了「一套系統盡量多攔截導彈」的思維定勢,忽視了最優解中各個系統攔截數較為平均的情況,本質上是一種貪心演算法,但貪心的策略不對。如果從每套系統攔截的導彈方面來想行不通的話,我們就應該換一個思路,從攔截某個導彈所選的系統入手。
題目告訴我們,已有系統目前的瞄準高度必須不低於來犯導彈高度,所以,當已有的系統均無法攔截該導彈時,就不得不啟用新系統。如果已有系統中有一個能攔截該導彈,我們是應該繼續使用它,還是另起爐灶呢?事實是:無論用哪套系統,只要攔截了這枚導彈,那麼系統的瞄準高度就等於導彈高度,這一點對舊的或新的系統都適用。而新系統能攔截的導彈高度最高,即新系統的性能優於任意一套已使用的系統。既然如此,我們當然應該選擇已有的系統。如果已有系統中有多個可以攔截該導彈,究竟選哪一個呢?當前瞄準高度較高的系統的「潛力」較大,而瞄準高度較低的系統則不同,它能打下的導彈別的系統也能打下,它夠不到的導彈卻未必是別的系統所夠不到的。所以,當有多個系統供選擇時,要選瞄準高度最低的使用,當然瞄準高度同時也要大於等於來犯導彈高度。
解題時用一個數組sys記下當前已有系統的各個當前瞄準高度,該數組中實際元素的個數就是第二問的解答。

[參考程序]
program noip1999_2;
const max=1000;
var i,j,current,maxlong,minheight,select,tail,total:longint;
height,longest,sys:array [1..max] of longint;
line:string;
begin
write('Input test data:');
readln(line); {輸入用字元串}
i:=1;
total:=0; {飛來的導彈數}
while i<=length(line) do {分解出若干個數,存儲在height數組中}
begin
while (i<=length(line)) and (line[i]=' ') do i:=i+1; {過濾空格}
current:=0; {記錄一個導彈的高度}
while (i<=length(line)) and (line[i]<>' ') do {將一個字元串變成數}
begin
current:=current*10+ord(line[i])-ord('0');
i:=i+1
end;
total:=total+1;
height[total]:=current {存儲在height中}
end;
longest[1]:=1; {以下用動態規劃求第一問}
for i:=2 to total do
begin
maxlong:=1;
for j:=1 to i-1 do
begin
if height[i]<=height[j]
then if longest[j]+1>maxlong
then maxlong:=longest[j]+1;
longest[i]:=maxlong {以第i個導彈為結束,能攔截的最多導彈數}
end;
end;
maxlong:=longest[1];
for i:=2 to total do
if longest[i]>maxlong then maxlong:=longest[i];
writeln(maxlong); {輸出第一問的結果}
sys[1]:=height[1]; {以下求第二問}
tail:=1; {數組下標,最後也就是所需系統數}
for i:=2 to total do
begin
minheight:=maxint;
for j:=1 to tail do {找一套最適合的系統}
if sys[j]>height[i] then
if sys[j]<minheight then
begin minheight:=sys[j]; select:=j end;
if minheight=maxint {開一套新系統}
then begin tail:=tail+1; sys[tail]:=height[i] end
else sys[select]:=height[i]
end;
writeln(tail)
end.

[部分測試數據]
輸入1:300 250 275 252 200 138 245
輸出1:
5
2

輸入2:181 205 471 782 1033 1058 1111
輸出2:
1
7

輸入3:465 978 486 476 324 575 384 278 214 657 218 445 123
輸出3:
7
4

輸入4:236 865 858 565 545 445 455 656 844 735 638 652 659 714 845
輸出4:
6
7
夠詳細的吧

⑺ 典型案例 | 京東物流——面向製造業的柔性線邊物流機器人及管控平台

京東物流集團基於雲端柔性線邊物流管控平台,將電商物流的工藝流程和管理經驗移植到製造業中,運用大數據、人工智慧及物流機器人等,在3C、 汽車 等製造行業實現兩業深度融合創新發展。

一、做法和經驗

(一)結合製造工藝定製研發多款物流機器人。重點針對3C、 汽車 、消費品等製造行業生產物料多、組合復雜、規格多樣、出庫流量低但線路多變等難點痛點,突破多種智能裝備混合作業和物流靈活組單技術,研發線邊高密度立體倉儲系統,基於視覺激光混合導航的水平移動機器人等,實現柔性製造、敏捷製造。

(二)自主開發雲端柔性線邊物流管控平台。通過物聯網、互聯網、雲計算、人工智慧等技術構建雲-邊協同機制,將機器人集成控制、智能調度、演算法等集成到雲端平台,實現智能物流機器人復雜業務的智能化、數字化、自動化管控。通過智能設備網關實現感知網路與通信網路,以及不同類型感知網路之間的協議轉換,統一不同設備、不同設備廠商、不同系統技術上的介面對接標准;通過智能邊緣計算將智能物流設備數據聚合、優化、篩選進行本地化預分析,在邊緣處對數據進行處理,保證實時交互場景下的響應要求,同時將高價值數據上傳雲端進行復雜業務處理,降低數據量的傳輸,提高伺服器與邊緣側的通信效率。通過數據採集、數據處理、數據存儲,經過自感知、自適應、自驅動的智能數據管控,提供在線實時運營分析及資源配置建議等。

(三)引入模擬技術和大數據演算法實現管理精益化。模擬技術和大數據演算法對於智能製造具有至關重要的作用,京東物流在原有成熟的電商物流數據與模擬團隊基礎上,組建專門面向智能製造行業的數據與模擬團隊,實踐檢驗可大幅縮短系統整體性能爬坡周期,助力精益化製造目標。

二、融合效果

京東物流自主研發的綜合導航、智能機器人、調度控制演算法等技術,特別是物流中心儲位動態精準調配、任務優化調配和貨物優化路徑儲運技術等在京東物流運營體系不斷檢驗優化,並應用到製造企業賦能案例中,助力企業降本增效。如在服務某知名家電企業過程中,京東物流通過流程重塑、存儲布局規劃、系統管理標准化運營、自動化設備應用等綜合解決方案,幫助該家電製造企業整體成本降低10%,庫存利用率提升13%,作業效率提升20%,同步實現全程可視化運營。

⑻ c語言中什麼是演算法有哪些描述演算法的例子

1、有窮性(有限性)。任何一種提出的解題方法都是在有限的操作步驟內可以完成的。
如果在有限的操作步驟內完不成,得不到結果,這樣的演算法將無限的執行下去,永遠不會停止。除非手動停止。例如操作系統就不具有有窮性,它可以一直運行。
2、一個演算法應該具有以下七個重要的特徵:
1)有窮性(finiteness)
演算法的有窮性是指演算法必須能在執行有限個步驟之後終止
2)確切性(definiteness)
演算法的每一步驟必須有確切的定義;
3)輸入項(input)
一個演算法有0個或多個輸入,以刻畫運算對象的初始情況,所謂0個輸入是指演算法本身定出了初始條件;
4)輸出項(output)
一個演算法有一個或多個輸出,以反映對輸入數據加工後的結果.沒有輸出的演算法是毫無意義的;
5)可行性(effectiveness)
演算法中執行的任何計算步都是可以被分解為基本的可執行的操作步,即每個計算步都可以在有限時間內完成;
6)
高效性(high
efficiency)
執行速度快,佔用資源少;
7)
健壯性(robustness)
健壯性又稱魯棒性,是指軟體對於規范要求以外的輸入情況的處理能力。所謂健壯的系統是指對於規范要求以外的輸入能夠判斷出這個輸入不符合規范要求,並能有合理的處理方式。

⑼ 演算法優化例子

最大連續子序列和問題:給定(可能是負的)整數序列 ,尋找(並標識) 的值為最大的序列。如果所有的整數都是負的,那麼最大連續子序列的和是0。

最簡單的演算法是直接的窮盡查找,即蠻力演算法(Brute Force Algorithm),找出所有子序列並求和,遍歷所有求和結果找出最大值。

這一演算法非常簡單易於理解,最外層循環需要執行n次,第二層循環需要執行n-i次,第三層循環執行j-i次,由此可得時間復雜度為 ,即 。
在該演算法中嵌套循環幾乎貢獻了所有的時間復雜度,簡單的理解一個循環有N的時間復雜度,那麼三層嵌套就是N的三次方。

由蠻力演算法可知,導致時間復雜度的主要是循環,通過減少循環就可以降低時間復雜度。分析蠻力演算法可得,第三層循環計算 thisSum 有太多的重復步驟,沒必要每次都重新求和,利用 在第二層循環累加即可。

由於循環只有兩層,所以時間復雜度降低為 。

3、線性演算法
從平方演算法降低到線性演算法還需要再刪除一個循環,但是平方演算法降低到線性演算法,不能只是簡單的改變程序,需要思想。前兩種演算法本質上還是窮盡法,只不過有一些巧妙的改進,想要得到線性演算法就需要改變思想。

可以通過分析來排除一些可能的子序列。如果一個子序列是負的,那麼它絕對不會出現在最大連續子序列的開始部分,這非常容易理解,因為如果開始部分是負的,顯然起到減小作用,為什麼又要包含進去呢?以某一序列 {a, b, c, d, e, f, g, h, i, j, k......y, z} 為例,如果a是負的,肯定不會以a開頭;如果cdef是負的,可以直接跳到g開始,可能會問為什麼不從d開始呢?原因在於c肯定不會是負的,見a情況,那麼整個是負的,c又是正的,那麼def也肯定是負的,沒有必要再考慮了。

由於只用到一個至多循環n次的循環,所以是一個線性演算法。

演算法效率提升有兩種,一是程序上的優化,一是設計思想上的優化。思想上的優化是本質上的改變。

⑽ 什麼是演算法,都什麼,舉個例子,謝謝

根據我個人的理解:
演算法就是解決問題的具體的方法和步驟,所以具有以下性質:

1、有窮性: 一個演算法必須保證執行有限步之後結束(如果步驟無限,問題就無法解決)
2、確切性:步驟必須明確,說清楚做什麼。
3、輸入:即解決問題前我們所掌握的條件。
4、輸出:輸出即我們需要得到的答案。
5、可行性:邏輯不能錯誤,步驟必須有限,必須得到結果。

演算法通俗的講:就是解決問題的方法和步驟。在計算機發明之前便已經存在。只不過在計算機發明後,其應用變得更為廣泛。通過簡單的演算法,利用電腦的計算速度,可以讓問題變得簡單。

譬如:計算 1×2×3×4。。。。×999999999×1000000000
如果人為計算,可想而知,即使你用N卡車的紙張都很難計算出來,即使算出來了,也很難保證其准確性。
如果用VB演算法:
dim a as integer
a=1
For i =1 to 1000000000
a=a*i
next i
input a
就這樣,簡單的演算法,通過計算機強大的計算能力,問題就解決了。
關於這段演算法的解釋:i每乘一次,其數值都會增大1,一直乘到1000000000,這樣,就將從1到1000000000的每個數都乘了。而且每乘一次,就將結束賦給a,這樣,a就代表了前面的相乘的所有結果,一直乘到1000000000。最後得到的a,就是我們想要的。

〓以下是網路復制過來的,如果你有足夠耐心,可以參考一下。

演算法(Algorithm)是一系列解決問題的清晰指令,也就是說,能夠對一定規范的輸入,在有限時間內獲得所要求的輸出。如果一個演算法有缺陷,或不適合於某個問題,執行這個演算法將不會解決這個問題。不同的演算法可能用不同的時間、空間或效率來完成同樣的任務。一個演算法的優劣可以用空間復雜度與時間復雜度來衡量。
演算法可以理解為有基本運算及規定的運算順序所構成的完整的解題步驟。或者看成按照要求設計好的有限的確切的計算序列,並且這樣的步驟和序列可以解決一類問題。
一個演算法應該具有以下五個重要的特徵:
1、有窮性: 一個演算法必須保證執行有限步之後結束;
2、確切性: 演算法的每一步驟必須有確切的定義;
3、輸入:一個演算法有0個或多個輸入,以刻畫運算對象的初始情況,所謂0個輸入是指演算法本身定除了初始條件;
4、輸出:一個演算法有一個或多個輸出,以反映對輸入數據加工後的結果。沒有輸出的演算法是毫無意義的;
5、可行性: 演算法原則上能夠精確地運行,而且人們用筆和紙做有限次運算後即可完成。
計算機科學家尼克勞斯-沃思曾著過一本著名的書《數據結構十演算法= 程序》,可見演算法在計算機科學界與計算機應用界的地位。
[編輯本段]演算法的復雜度
同一問題可用不同演算法解決,而一個演算法的質量優劣將影響到演算法乃至程序的效率。演算法分析的目的在於選擇合適演算法和改進演算法。一個演算法的評價主要從時間復雜度和空間復雜度來考慮。
時間復雜度
演算法的時間復雜度是指演算法需要消耗的時間資源。一般來說,計算機演算法是問題規模n 的函數f(n),演算法的時間復雜度也因此記做
T(n)=Ο(f(n))
因此,問題的規模n 越大,演算法執行的時間的增長率與f(n) 的增長率正相關,稱作漸進時間復雜度(Asymptotic Time Complexity)。
空間復雜度
演算法的空間復雜度是指演算法需要消耗的空間資源。其計算和表示方法與時間復雜度類似,一般都用復雜度的漸近性來表示。同時間復雜度相比,空間復雜度的分析要簡單得多。
詳見網路詞條"演算法復雜度"
[編輯本段]演算法設計與分析的基本方法
1.遞推法
遞推法是利用問題本身所具有的一種遞推關系求問題解的一種方法。它把問題分成若干步,找出相鄰幾步的關系,從而達到目的,此方法稱為遞推法。
2.遞歸
遞歸指的是一個過程:函數不斷引用自身,直到引用的對象已知
3.窮舉搜索法
窮舉搜索法是對可能是解的眾多候選解按某種順序進行逐一枚舉和檢驗,並從眾找出那些符合要求的候選解作為問題的解。
4.貪婪法
貪婪法是一種不追求最優解,只希望得到較為滿意解的方法。貪婪法一般可以快速得到滿意的解,因為它省去了為找最優解要窮盡所有可能而必須耗費的大量時間。貪婪法常以當前情況為基礎作最優選擇,而不考慮各種可能的整體情況,所以貪婪法不要回溯。
5.分治法
把一個復雜的問題分成兩個或更多的相同或相似的子問題,再把子問題分成更小的子問題……直到最後子問題可以簡單的直接求解,原問題的解即子問題的解的合並。
6.動態規劃法
動態規劃是一種在數學和計算機科學中使用的,用於求解包含重疊子問題的最優化問題的方法。其基本思想是,將原問題分解為相似的子問題,在求解的過程中通過子問題的解求出原問題的解。動態規劃的思想是多種演算法的基礎,被廣泛應用於計算機科學和工程領域。
7.迭代法
迭代是數值分析中通過從一個初始估計出發尋找一系列近似解來解決問題(一般是解方程或者方程組)的過程,為實現這一過程所使用的方法統稱為迭代法。
[編輯本段]演算法分類
演算法可大致分為基本演算法、數據結構的演算法、數論與代數演算法、計算幾何的演算法、圖論的演算法、動態規劃以及數值分析、加密演算法、排序演算法、檢索演算法、隨機化演算法、並行演算法。
[編輯本段]舉例
經典的演算法有很多,如:"歐幾里德演算法"。
[編輯本段]演算法經典專著
目前市面上有許多論述演算法的書籍,其中最著名的便是《計算機程序設計藝術》(The Art Of Computer Programming) 以及《演算法導論》(Introction To Algorithms)。
[編輯本段]演算法的歷史
「演算法」即演演算法的大陸中文名稱出自《周髀算經》;而英文名稱Algorithm 來自於9世紀波斯數學家al-Khwarizmi,因為al-Khwarizmi在數學上提出了演算法這個概念。「演算法」原為"algorism",意思是阿拉伯數字的運演算法則,在18世紀演變為"algorithm"。歐幾里得演算法被人們認為是史上第一個演算法。 第一次編寫程序是Ada Byron於1842年為巴貝奇分析機編寫求解解伯努利方程的程序,因此Ada Byron被大多數人認為是世界上第一位程序員。因為查爾斯·巴貝奇(Charles Babbage)未能完成他的巴貝奇分析機,這個演算法未能在巴貝奇分析機上執行。 因為"well-defined procere"缺少數學上精確的定義,19世紀和20世紀早期的數學家、邏輯學家在定義演算法上出現了困難。20世紀的英國數學家圖靈提出了著名的圖靈論題,並提出一種假想的計算機的抽象模型,這個模型被稱為圖靈機。圖靈機的出現解決了演算法定義的難題,圖靈的思想對演算法的發展起到了重要作用的。

閱讀全文

與演算法管控下的例子相關的資料

熱點內容
求圓的周長最快演算法 瀏覽:188
安卓熱點怎麼減少流量 瀏覽:270
北京代交社保用什麼app 瀏覽:855
第一眼解壓視頻 瀏覽:725
文件夾err是什麼 瀏覽:97
qt4編程pdf 瀏覽:572
區域網伺服器下如何連續看照片 瀏覽:254
經過加密的數字摘要 瀏覽:646
加密鎖9000變列印機 瀏覽:694
程序員的職業發展前途 瀏覽:639
安卓是世界上多少個程序員開發 瀏覽:45
解壓器官方免費 瀏覽:85
單片機p10開發 瀏覽:487
做什麼app賺錢 瀏覽:84
博途編譯失敗聯系客戶支持部門 瀏覽:928
金蝶旗艦版編譯 瀏覽:52
萬象伺服器斷電後啟動不了怎麼辦 瀏覽:357
我的世界蘋果版的2b2t伺服器地址咋查 瀏覽:97
xlsx轉換pdf 瀏覽:102
3dmax擠出命令英語 瀏覽:906