當前位置:首頁 » 操作系統 » 計算幾何演算法

計算幾何演算法

發布時間: 2023-07-12 19:44:31

❶ 計算幾何的全部演算法

1. 矢量減法

設二維矢量 P = (x1,y1) ,Q = (x2,y2)
則矢量減法定義為: P - Q = ( x1 - x2 , y1 - y2 )
顯然有性質 P - Q = - ( Q - P )
如不加說明,下面所有的點都看作矢量,兩點的減法就是矢量相減;

2.矢量叉積

設矢量P = (x1,y1) ,Q = (x2,y2)
則矢量叉積定義為: P × Q = x1*y2 - x2*y1 得到的是一個標量
顯然有性質 P × Q = - ( Q × P ) P × ( - Q ) = - ( P × Q )
如不加說明,下面所有的點都看作矢量,點的乘法看作矢量叉積;

叉乘的重要性質:

> 若 P × Q > 0 , 則P 在Q的順時針方向
> 若 P × Q < 0 , 則P 在Q的逆時針方向
> 若 P × Q = 0 , 則P 與Q共線,但可能同向也可能反向

3.判斷點在線段上

設點為Q,線段為P1P2 ,判斷點Q在該線段上的依據是:

( Q - P1 ) × ( P2 - P1 ) = 0 且 Q 在以 P1,P2為對角頂點的矩形內

4.判斷兩線段是否相交

我們分兩步確定兩條線段是否相交:

(1). 快速排斥試驗

設以線段 P1P2 為對角線的矩形為R, 設以線段 Q1Q2 為對角線的矩形為T,如果
R和T不相交,顯然兩線段不會相交;

(2). 跨立試驗

如果兩線段相交,則兩線段必然相互跨立對方,如圖1所示。在圖1中,P1P2跨立
Q1Q2 ,則矢量 ( P1 - Q1 ) 和( P2 - Q1 )位於矢量( Q2 - Q1 ) 的兩側,即
( P1 - Q1 ) × ( Q2 - Q1 ) * ( P2 - Q1 ) × ( Q2 - Q1 ) < 0
上式可改寫成
( P1 - Q1 ) × ( Q2 - Q1 ) * ( Q2 - Q1 ) × ( P2 - Q1 ) > 0
當( P1 - Q1 ) × ( Q2 - Q1 ) = 0 時,說明( P1 - Q1 ) 和 ( Q2 - Q1 )共線,
但是因為已經通過快速排斥試驗,所以 P1 一定在線段 Q1Q2上;同理,
( Q2 - Q1 ) ×( P2 - Q1 ) = 0 說明 P2 一定在線段 Q1Q2上。

所以判斷P1P2跨立Q1Q2的依據是:

( P1 - Q1 ) × ( Q2 - Q1 ) * ( Q2 - Q1 ) × ( P2 - Q1 ) ≥ 0

同理判斷Q1Q2跨立P1P2的依據是:

( Q1 - P1 ) × ( P2 - P1 ) * ( P2 - P1 ) × ( Q2 - P1 ) ≥ 0

至此已經完全解決判斷線段是否相交的問題。

5.判斷線段和直線是否相交

如果線段 P1P2和直線Q1Q2相交,則P1P2跨立Q1Q2,即:

( P1 - Q1 ) × ( Q2 - Q1 ) * ( Q2 - Q1 ) × ( P2 - Q1 ) ≥ 0

6.判斷矩形是否包含點

只要判斷該點的橫坐標和縱坐標是否夾在矩形的左右邊和上下邊之間。

6.判斷線段、折線、多邊形是否在矩形中

因為矩形是個凸集,所以只要判斷所有端點是否都在矩形中就可以了。

7.判斷矩形是否在矩形中

只要比較左右邊界和上下邊界就可以了。

8.判斷圓是否在矩形中

圓在矩形中的充要條件是:圓心在矩形中且圓的半徑小於等於圓心到矩形四邊的距
離的最小值。

9.判斷點是否在多邊形中

以點P為端點,向左方作射線L,由於多邊形是有界的,所以射線L的左端一定在多
邊形外,考慮沿著L從無窮遠處開始自左向右移動,遇到和多邊形的第一個交點的
時候,進入到了多邊形的內部,遇到第二個交點的時候,離開了多邊形,……所
以很容易看出當L和多邊形的交點數目C是奇數的時候,P在多邊形內,是偶數的話
P在多邊形外。

但是有些特殊情況要加以考慮。如果L和多邊形的頂點相交,有些情況下交點只能
計算一個,有些情況下交點不應被計算(自己畫個圖就明白了);如果L和多邊形
的一條邊重合,這條邊應該被忽略不計。為了統一起見,我們在計算射線L和多邊
形的交點的時候,1。對於多邊形的水平邊不作考慮;2。對於多邊形的頂點和L相
交的情況,如果該頂點是其所屬的邊上縱坐標較大的頂點,則計數,否則忽略;
3。對於P在多邊形邊上的情形,直接可判斷P屬於多邊行。由此得出演算法的偽代碼
如下:

1. count ← 0;
2. 以P為端點,作從右向左的射線L;
3. for 多邊形的每條邊s
4. do if P在邊s上
5. then return true;
6. if s不是水平的
7. then if s的一個端點在L上且該端點是s兩端點中縱坐標較大的端點
9. then count ← count+1
10. else if s和L相交
11. then count ← count+1;
12. if count mod 2 = 1
13. then return true
14. else return false;

其中做射線L的方法是:設P'的縱坐標和P相同,橫坐標為正無窮大(很大的一個正
數),則P和P'就確定了射線L。這個演算法的復雜度為O(n)。

10.判斷線段是否在多邊形內

線段在多邊形內的一個必要條件是線段的兩個端點都在多邊形內;

如果線段和多邊形的某條邊內交(兩線段內交是指兩線段相交且交點不在兩線段的
端點),因為多邊形的邊的左右兩側分屬多邊形內外不同部分,所以線段一定會有
一部分在多邊形外。於是我們得到線段在多邊形內的第二個必要條件:線段和多邊
形的所有邊都不內交;

線段和多邊形交於線段的兩端點並不會影響線段是否在多邊形內;但是如果多邊形
的某個頂點和線段相交,還必須判斷兩相鄰交點之間的線段是否包含與多邊形內部。
因此我們可以先求出所有和線段相交的多邊形的頂點,然後按照X-Y坐標排序,這樣
相鄰的兩個點就是在線段上相鄰的兩交點,如果任意相鄰兩點的中點也在多邊形內,
則該線段一定在多邊形內。證明如下:

命題1:

如果線段和多邊形的兩相鄰交點P1 ,P2的中點P' 也在多邊形內,則P1, P2之間的
所有點都在多邊形內。

證明:

假設P1,P2之間含有不在多邊形內的點,不妨設該點為Q,在P1, P'之間,因為多邊
形是閉合曲線,所以其內外部之間有界,而P1屬於多邊行內部,Q屬於多邊性外部,
P'屬於多邊性內部,P1-Q-P'完全連續,所以P1Q和QP'一定跨越多邊形的邊界,因此
在P1,P'之間至少還有兩個該線段和多邊形的交點,這和P1P2是相鄰兩交點矛盾,故
命題成立。證畢

由命題1直接可得出推論:

推論2:

設多邊形和線段PQ的交點依次為P1,P2,……Pn,其中Pi和Pi+1是相鄰兩交點,線段
PQ在多邊形內的充要條件是:P,Q在多邊形內且對於i =1, 2,……, n-1,Pi ,Pi+1
的中點也在多邊形內。

在實際編程中,沒有必要計算所有的交點,首先應判斷線段和多邊形的邊是否內交
,倘若線段和多邊形的某條邊內交則線段一定在多邊形外;如果線段和多邊形的每
一條邊都不內交,則線段和多邊形的交點一定是線段的端點或者多邊形的頂點,只
要判斷點是否在線段上就可以了。

至此我們得出演算法如下:

1. if 線端PQ的端點不都在多邊形內
2. then return false;
3. 點集pointSet初始化為空;
4. for 多邊形的每條邊s
5. do if 線段的某個端點在s上
6. then 將該端點加入pointSet;
7. else if s的某個端點在線段PQ上
8. then 將該端點加入pointSet;
9. else if s和線段PQ相交 // 這時候可以肯定是內交
10. then return false;
11. 將pointSet中的點按照X-Y坐標排序,X坐標小的排在前面,
對於X坐標相同的點,Y坐標小的排在前面;
12. for pointSet中每兩個相鄰點 pointSet[i] , pointSet[ i+1]
13. do if pointSet[i] , pointSet[ i+1] 的中點不在多邊形中
14. then return false;
15. return true;

這個演算法的復雜度也是O(n)。其中的排序因為交點數目肯定遠小於多邊形的頂點數
目n,所以最多是常數級的復雜度,幾乎可以忽略不計。

11.判斷折線在多邊形內

只要判斷折線的每條線段是否都在多邊形內即可。設折線有m條線段,多邊形有n個
頂點,則復雜度為O(m*n)。

12.判斷多邊形是否在多邊形內

只要判斷多邊形的每條邊是否都在多邊形內即可。判斷一個有m個頂點的多邊形是
否在一個有n個頂點的多邊形內復雜度為O(m*n)。

13.判斷矩形是否在多邊形內

將矩形轉化為多邊形,然後再判斷是否在多邊形內。

14.判斷圓是否在多邊形內

只要計算圓心到多邊形的每條邊的最短距離,如果該距離大於等於圓半徑則該圓在
多邊形內。計算圓心到多邊形每條邊最短距離的演算法在後文闡述。

15.判斷點是否在圓內

計算圓心到該點的距離,如果小於等於半徑則該點在圓內。

16.判斷線段、折線、矩形、多邊形是否在圓內

因為圓是凸集,所以只要判斷是否每個頂點都在圓內即可。

17.判斷圓是否在圓內

設兩圓為O1,O2,半徑分別為r1, r2,要判斷O2是否在O1內。先比較r1,r2的大小
,如果r1<r2則O2不可能在O1內;否則如果兩圓心的距離大於r1 - r2 ,則O2不在
O1內;否則O2在O1內。

18.計算點到線段的最近點

如果該線段平行於X軸(Y軸),則過點point作該線段所在直線的垂線,垂足很容
易求得,然後計算出垂足,如果垂足在線段上則返回垂足,否則返回離垂足近的端
點;

如果該線段不平行於X軸也不平行於Y軸,則斜率存在且不為0。設線段的兩端點為
pt1和pt2,斜率為:
k = ( pt2.y - pt1. y ) / (pt2.x - pt1.x );
該直線方程為:
y = k* ( x - pt1.x) + pt1.y
其垂線的斜率為 - 1 / k,
垂線方程為:
y = (-1/k) * (x - point.x) + point.y
聯立兩直線方程解得:
x = ( k^2 * pt1.x + k * (point.y - pt1.y ) + point.x ) / ( k^2 + 1)
y = k * ( x - pt1.x) + pt1.y;

然後再判斷垂足是否在線段上,如果在線段上則返回垂足;如果不在則計算兩端點
到垂足的距離,選擇距離垂足較近的端點返回。

19.計算點到折線、矩形、多邊形的最近點

只要分別計算點到每條線段的最近點,記錄最近距離,取其中最近距離最小的點即
可。

20.計算點到圓的最近距離

如果該點在圓心,則返回UNDEFINED
連接點P和圓心O,如果PO平行於X軸,則根據P在O的左邊還是右邊計算出最近點的
橫坐標為centerPoint.x - radius 或 centerPoint.x + radius, 如圖4 (a)所示;
如果PO平行於Y軸,則根據P在O的上邊還是下邊計算出最近點的縱坐標為
centerPoint.y + radius 或 centerPoint.y - radius, 如圖4 (b)所示。

如果PO不平行於X軸和Y軸,則PO的斜率存在且不為0,如圖4(c)所示。這時直線PO
斜率為
k = ( P.y - O.y )/ ( P.x - O.x )
直線PO的方程為:
y = k * ( x - P.x) + P.y
設圓方程為:
(x - O.x ) ^2 + ( y - O.y ) ^2 = r ^2,
聯立兩方程組可以解出直線PO和圓的交點,取其中離P點較近的交點即可。

21.計算兩條共線的線段的交點

對於兩條共線的線段,它們之間的位置關系有圖5所示的幾種情況。
圖5(a)中兩條線段沒有交點;圖5 (b) 和 (d) 中兩條線段有無窮焦點;圖5 (c)
中兩條線段有一個交點。設line1是兩條線段中較長的一條,line2是較短的一條,
如果line1包含了line2的兩個端點,則是圖5(d)的情況,兩線段有無窮交點;如
果line1隻包含line2的一個端點,那麼如果line1的某個端點等於被line1包含的
line2的那個端點,則是圖5(c)的情況,這時兩線段只有一個交點,否則就是
圖5(c)的情況,兩線段也是有無窮的交點;如果line1不包含line2的任何端點,
則是圖5(a)的情況,這時兩線段沒有交點。

22.計算線段或直線與線段的交點

設一條線段為L0 = P1P2,另一條線段或直線為L1 = Q1Q2 ,要計算的就是L0和L1
的交點。

1.首先判斷L0和L1是否相交(方法已在前文討論過),如果不相交則沒有交點,
否則說明L0和L1一定有交點,下面就將L0和L1都看作直線來考慮。

2.如果P1和P2橫坐標相同,即L0平行於Y軸
a)若L1也平行於Y軸,
i.若P1的縱坐標和Q1的縱坐標相同,說明L0和L1共線,假如L1是直線的話他們有
無窮的交點,假如L1是線段的話可用"計算兩條共線線段的交點"的演算法求他們
的交點(該方法在前文已討論過);
ii.否則說明L0和L1平行,他們沒有交點;
b)若L1不平行於Y軸,則交點橫坐標為P1的橫坐標,代入到L1的直線方程中可以計
算出交點縱坐標;
3.如果P1和P2橫坐標不同,但是Q1和Q2橫坐標相同,即L1平行於Y軸,則交點橫
坐標為Q1的橫坐標,代入到L0的直線方程中可以計算出交點縱坐標;
4.如果P1和P2縱坐標相同,即L0平行於X軸
a)若L1也平行於X軸,
i.若P1的橫坐標和Q1的橫坐標相同,說明L0和L1共線,假如L1是直線的話他們
有無窮的交點,假如L1是線段的話可用"計算兩條共線線段的交點"的演算法求
他們的交點(該方法在前文已討論過);
ii.否則說明L0和L1平行,他們沒有交點;

b)若L1不平行於X軸,則交點縱坐標為P1的縱坐標,代入到L1的直線方程中可以計
算出交點橫坐標;
5.如果P1和P2縱坐標不同,但是Q1和Q2縱坐標相同,即L1平行於X軸,則交點縱坐標
為Q1的縱坐標,代入到L0的直線方程中可以計算出交點橫坐標;
6.剩下的情況就是L1和L0的斜率均存在且不為0的情況
a)計算出L0的斜率K0,L1的斜率K1 ;
b)如果K1 = K2
i.如果Q1在L0上,則說明L0和L1共線,假如L1是直線的話有無窮交點,假如L1
是線段的話可用"計算兩條共線線段的交點"的演算法求他們的交點(該方法在
前文已討論過);
ii.如果Q1不在L0上,則說明L0和L1平行,他們沒有交點。
c)聯立兩直線的方程組可以解出交點來

說明:這個演算法並不復雜,但是要分情況討論清楚,尤其是當兩條線段共線的情況
需要單獨考慮,所以在前文將求兩條共線線段的演算法單獨寫出來。另外,一開始就
先利用矢量叉乘判斷線段與線段(或直線)是否相交,如果結果是相交,那麼在後
面就可以將線段全部看作直線來考慮。

23.求線段或直線與折線、矩形、多邊形的交點

分別求與每條邊的交點即可。

24.求線段或直線與圓的交點

設圓心為O,圓半徑為r,直線(或線段)L上的兩點為P1,P2。
1.如果L是線段且P1,P2都包含在圓O內,則沒有交點;否則進行下一步
2.如果L平行於Y軸,
a)計算圓心到L的距離dis
b)如果dis > r 則L和圓沒有交點;
c)利用勾股定理,可以求出兩交點坐標,如圖6(a)所示;但要注意考慮L和圓的相
切情況
3.如果L平行於X軸,做法與L平行於Y軸的情況類似;
4.如果L既不平行X軸也不平行Y軸,可以求出L的斜率K,然後列出L的點斜式方程
,和圓方程聯立即可求解出L和圓的兩個交點;
5.如果L是線段,對於2,3,4中求出的交點還要分別判斷是否屬於該線段的范圍內。

❷ 都說程序執行的效率跟演算法有關,究竟什麼是計算機的演算法呢怎麼理解的怎麼使用

演算法(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.迭代法 迭代是數值分析中通過從一個初始估計出發尋找一系列近似解來解決問題(一般是解方程或者方程組)的過程,為實現這一過程所使用的方法統稱為迭代法。 [編輯本段]演算法分類 演算法可大致分為基本演算法、數據結構的演算法、數論與代數演算法、計算幾何的演算法、圖論的演算法、動態規劃以及數值分析、加密演算法、排序演算法、檢索演算法、隨機化演算法、並行演算法。 演算法可以宏泛的分為三類: 有限的,確定性演算法 這類演算法在有限的一段時間內終止。他們可能要花很長時間來執行指定的任務,但仍將在一定的時間內終止。這類演算法得出的結果常取決於輸入值。 有限的,非確定演算法 這類演算法在有限的時間內終止。然而,對於一個(或一些)給定的數值,演算法的結果並不是唯一的或確定的。 無限的演算法 是那些由於沒有定義終止定義條件,或定義的條件無法由輸入的數據滿足而不終止運行的演算法。通常,無限演算法的產生是由於未能確定的定義終止條件。

❸ 求 計算幾何 演算法與應用 第三版(清華大學出版社) 的習題答案

你到網上搜《演算法設計與實驗題解》找個電子版下就行了。同一個作者所著,包含你要的主教材習題解答。

❹ 數學的各種演算法

演算法(Algorithm)是指解題方案的准確而完整的描述,是一系列解決問題的清晰指令,演算法代表著用系統的方法描述解決問題的策略機制。也就是說,能夠對一定規范的輸入,在有限時間內獲得所要求的輸出。如果一個演算法有缺陷,或不適合於某個問題,執行這個演算法將不會解決這個問題。不同的演算法可能用不同的時間、空間或效率來完成同樣的任務。一個演算法的優劣可以用空間復雜度與時間復雜度來衡量。
演算法中的指令描述的是一個計算,當其運行時能從一個初始狀態和(可能為空的)初始輸入開始,經過一系列有限而清晰定義的狀態,最終產生輸出並停止於一個終態。一個狀態到另一個狀態的轉移不一定是確定的。隨機化演算法在內的一些演算法,包含了一些隨機輸入。
形式化演算法的概念部分源自嘗試解決希爾伯特提出的判定問題,並在其後嘗試定義有效計算性或者有效方法中成形。這些嘗試包括庫爾特·哥德爾、Jacques Herbrand和斯蒂芬·科爾·克萊尼分別於1930年、1934年和1935年提出的遞歸函數,阿隆佐·邱奇於1936年提出的λ演算,1936年Emil Leon Post的Formulation 1和艾倫·圖靈1937年提出的圖靈機。即使在當前,依然常有直覺想法難以定義為形式化演算法的情況。
一個演算法應該具有以下五個重要的特徵:
有窮性
(Finiteness)
演算法的有窮性是指演算法必須能在執行有限個步驟之後終止;
確切性
(Definiteness)
演算法的每一步驟必須有確切的定義;
輸入項
(Input)
一個演算法有0個或多個輸入,以刻畫運算對象的初始情況,所謂0個輸入是指演算法本身定出了初始條件;
輸出項
(Output)
一個演算法有一個或多個輸出,以反映對輸入數據加工後的結果。沒有輸出的演算法是毫無意義的;
可行性
(Effectiveness)
演算法中執行的任何計算步驟都是可以被分解為基本的可執行的操作步,即每個計算步都可以在有限時間內完成(也稱之為有效性)。
一、數據對象的運算和操作:計算機可以執行的基本操作是以指令的形式描述的。一個計算機系統能執行的所有指令的集合,成為該計算機系統的指令系統。一個計算機的基本運算和操作有如下四類:[1]
1.算術運算:加減乘除等運算
2.邏輯運算:或、且、非等運算
3.關系運算:大於、小於、等於、不等於等運算
4.數據傳輸:輸入、輸出、賦值等運算[1]
二、演算法的控制結構:一個演算法的功能結構不僅取決於所選用的操作,而且還與各操作之間的執行順序有關。
演算法可大致分為基本演算法、數據結構的演算法、數論與代數演算法、計算幾何的演算法、圖論的演算法、動態規劃以及數值分析、加密演算法、排序演算法、檢索演算法、隨機化演算法、並行演算法,厄米變形模型,隨機森林演算法。
演算法可以宏泛地分為三類:
一、有限的,確定性演算法 這類演算法在有限的一段時間內終止。他們可能要花很長時間來執行指定的任務,但仍將在一定的時間內終止。這類演算法得出的結果常取決於輸入值。
二、有限的,非確定演算法 這類演算法在有限的時間內終止。然而,對於一個(或一些)給定的數值,演算法的結果並不是唯一的或確定的。
三、無限的演算法 是那些由於沒有定義終止定義條件,或定義的條件無法由輸入的數據滿足而不終止運行的演算法。通常,無限演算法的產生是由於未能確定的定義終止條件。
希望我能幫助你解疑釋惑。

❺ 編程語言都有哪些演算法

(一)基本演算法 : 1.枚舉 2.搜索: 深度優先搜索 廣度優先搜索 啟發式搜索 遺傳演算法 (二)數據結構的演算法 (三)數論與代數演算法 (四)計算幾何的演算法:求凸包 (五)圖論 演算法: 1.哈夫曼編碼 2.樹的遍歷 3.最短路徑 演算法 4.最小生成樹 演算法 5.最小樹形圖 6.網路流 演算法 7.匹配演算法 (六)動態規劃 (七)其他: 1.數值分析 2.加密演算法 3.排序 演算法 4.檢索演算法 5.隨機化演算法

希望採納

❻ 設計計算幾何演算法的編程語言是什麼,也是c、c++之類嗎

你問的這個很片面啊,如果是C語言中的 sqrt()函數,就是開方,當然是用C語言編的,C++也有很多同樣的啊,像VB JAVA都有演算法啊,windows就是用多種語言實現不同的功能的。。每種語言都有他自己的演算法,也有自己的區別 ,就像C是面向過程,而C++是面向對象,C++有繼承和多態等性質什麼的,

❼ 五種常用演算法

五種常用演算法主要有以下幾種:

1.回歸演算法。回歸演算法是試圖採用對誤差的衡量來探索變數之間的關系的一類演算法,是統計機器學習的利器。

2.基於實例的演算法。基於實例的演算法常常用來對決策問題建立模型,這樣的模型常常先選取一批樣本數據,然後根據某些近似性把新數據與樣本數據進行比較。用戶通過這種方式來尋找最佳的匹配,因此,基於實例的演算法常常也被稱為「贏家通吃」學習或者「基於記憶的學習」。

3.正則化方法。正則化方法是其他演算法(通常是回歸演算法)的延伸,根據演算法的復雜度對演算法進行調整,通常對簡單模型予以獎勵,而對復雜演算法予以懲罰。

演算法分類編輯演算法可大致分為:基本演算法、數據結構的演算法、數論與代數演算法、計算幾何的演算法、圖論的演算法、動態規劃以及數值分析、加密演算法、排序演算法、檢索演算法、隨機化演算法、並行演算法,厄米變形模型,隨機森林演算法。

❽ 演算法是什麼急!!!!

分類: 電腦/網路 >> 程序設計 >> 其他編程語言
解析:

演算法 Algorithm

演算法是在有限步驟內求解某一問題所使用的一組定義明確的規則。通俗點說,就是計算機解題的過程。在這個過程中,無論是形成解題思路還是編寫程序,都是在實施某種演算法。前者是推理實現的演算法,後者是操作實現的演算法。

一個演算法應該具有以下五個重要的特徵:

1、有窮性: 一個演算法必須保證執行有限步之後結束;

2、確切性: 演算法的每一步驟必須有確切的定義;

3、輸入:一個演算法有0個或多個輸入,以刻畫運算對象的初始情況,所謂0個輸入是指演算法本身定除了初始條件;

4、輸出:一個演算法有一個或多個輸出,以反映對輸入數據加工後的結果。沒有輸出的演算法是毫無意義的;

5、可行性: 演算法原則上能夠精確地運行,而且人們用筆和紙做有限次運算後即可完成。

演算法的設計要求

1)正確性(Correctness)

有4個層次:

A.程序不含語法錯誤;

B.程序對幾組輸入數據能夠得出滿足規格要求的結果;

C.程序對精心選擇的、典型的、苛刻的、帶有刁難性的幾組輸入數據能夠得出滿足規格要求的結果;

D.程序對一切合法的輸入數據都能產生滿足規格要求的結果。

2)可讀性(Readability)

演算法的第一目的是為了閱讀和交流;

可讀性有助於對演算法的理解;

可讀性有助於對演算法的調試和修改。

3)高效率與低存儲

處理速度快;存儲容量小

時間和空間是矛盾的、實際問題的求解往往是求得時間和空間的統一、折中。

演算法的描述 演算法的描述方式(常用的)

演算法描述 自然語言

流程圖 特定的表示演算法的圖形符號

偽語言 包括程序設計語言的三大基本結構及自然語言的一種語言

類語言 類似高級語言的語言,例如,類PASCAL、類C語言。

演算法的評價 演算法評價的標准:時間復雜度和空間復雜度。

1)時間復雜度 指在計算機上運行該演算法所花費的時間。用「O(數量級)」來表示,稱為「階」。

常見的時間復雜度有: O(1)常數階;O(logn)對數階;O(n)線性階;O(n^2)平方階

2)空間復雜度 指演算法在計算機上運純和行所佔用的存儲空間。度量同時間復雜度。

時間復雜度舉例

(a) X:=X+1 ; O(1)

(b) FOR I:=1 TO n DO

X:= X+1; O(n)

(c) FOR I:= 1 TO n DO

FOR J:= 1 TO n DO

X:= X+1; O(n^2)

「演算法」一詞最早來自公元 9世紀 波斯數學家比阿勒·霍瓦里松的一本影響深遠的著作《代數對話錄》。20世紀的 英國 數學家 圖靈 提出了著名的圖靈論點,並抽象出了一台機器,這台機器被我們稱之為 圖靈機 。圖靈的思想對演算法的發展起到了重要的作用。

演算法是 計算機 處理信息的本質,因為 計算機程序 本質上是一個演算法,告訴計算機確切的步驟來執行一個指定的任務,如計算職工的薪水或列印學生的成績單。 一般地,當演算法在處理信息時,數據會從輸入設備讀取,寫入輸出設備,可能保存起來以供以後使用侍銷。

這是演算法的一個簡單的例子。

我們有一串隨機數列。我們的目的是找到這個數列中最大的數。如果將數列中的每一個數字看成是一顆豆子的大老褲游小 可以將下面的演算法形象地稱為「撿豆子」:

首先將第一顆豆子(數列中的第一個數字)放入口袋中。

從第二顆豆子開始檢查,直到最後一顆豆子。如果正在檢查的豆子比口袋中的還大,則將它撿起放入口袋中,同時丟掉原先的豆子。 最後口袋中的豆子就是所有的豆子中最大的一顆。

下面是一個形式演算法,用近似於 編程語言 的 偽代碼 表示

給定:一個數列「list",以及數列的長度"length(list)" largest = list[1] for counter = 2 to length(list): if list[counter] > largest: largest = list[counter] print largest

符號說明:

= 用於表示賦值。即:右邊的值被賦予給左邊的變數。

List[counter] 用於表示數列中的第 counter 項。例如:如果 counter 的值是5,那麼 List[counter] 表示數列中的第5項。

<= 用於表示「小於或等於」。

演算法的分類

(一)基本演算法 :

1.枚舉

2.搜索:

深度優先搜索

廣度優先搜索

啟發式搜索

遺傳演算法

(二)數據結構的演算法

(三)數論與代數演算法

(四)計算幾何的演算法:求凸包

(五)圖論 演算法:

1.哈夫曼編碼

2.樹的遍歷

3.最短路徑 演算法

4.最小生成樹 演算法

5.最小樹形圖

6.網路流 演算法

7.匹配演算法

(六)動態規劃

(七)其他:

1.數值分析

2.加密演算法

3.排序 演算法

4.檢索演算法

5.隨機化演算法

❾ 演算法可以分為哪兩大類

演算法可以分為多項式演算法和指數型演算法大類。

演算法可大致分為基本演算法、數據結構的演算法、數論與代數演算法、計算幾何的演算法、圖論的演算法、動態規劃以及數值分析、加密演算法、排序演算法、檢索演算法、隨機化演算法、並行演算法,厄米變形模型,隨機森林演算法。

三、無限的演算法 是那些由於沒有定義終止定義條件,或定義的條件無法由喊脊銀輸入的數據滿足而不終止運行的演算法。通常,無限演算法的產生是由於未能確定的定義終止條件。

經典的演算法有很多,如歐幾里德演算法,割圓術,秦九韶演算法。

隨著計算機的發展,演算法在計算機方面已有廣泛的發展及應用,如用隨機森林演算法來進行頭部姿勢的估計,用遺傳演算法來解決彈葯裝載問題,使用信息加密演算法進行網路傳輸,使用並行演算法進行數據挖掘,以及協同過濾演算法在個性化推薦中的應用等。

熱點內容
linux分區表查看 發布:2025-03-16 21:20:17 瀏覽:643
java多個if 發布:2025-03-16 21:15:46 瀏覽:694
可樂存儲 發布:2025-03-16 21:15:07 瀏覽:871
ios遷移安卓用什麼助手 發布:2025-03-16 20:12:42 瀏覽:720
python異常值處理 發布:2025-03-16 20:12:42 瀏覽:581
POtn編程 發布:2025-03-16 20:06:11 瀏覽:776
競彩資金怎麼配置 發布:2025-03-16 20:01:57 瀏覽:10
在終端中打開編譯環境 發布:2025-03-16 19:57:34 瀏覽:601
sqlserver安裝資料庫 發布:2025-03-16 19:57:01 瀏覽:36
如何關掉廣告推送安卓 發布:2025-03-16 19:43:32 瀏覽:959