導航:首頁 > 源碼編譯 > 並行遞歸演算法

並行遞歸演算法

發布時間:2024-01-15 13:02:49

『壹』 怎樣利用Java開發高性能

1、開發高性能Java程序的原則和方法:
決定一個Java程序性能的好壞,是多方面的因素,包括前期的系統結構設計、底層平台架構設計、應用開發中的代碼編寫以及技巧的使用,系統平台的軟體配置,系統平台的硬體性能等等。這里只給出代碼編寫方面的一些原則和方法。
相對於Java的其他方面,在性能領域Java飽受的非議可能最多。許多人認為,Java如果想更好的發展下去必須解決性能問題。然而真正的事實是Java在編譯器、JVM以及運行期優化方面確實在不斷的進步,Java正在運行的越來越快。實際上很多的性能問題,是由於設計不佳引起的,與Java本身並無關系。在拙劣的設計和編碼面前,無論你使用多少運行期優化,無論你的編譯技術多麼先進,無論你的硬體平台性能多麼強大,最後的代碼運行依然低效。
同樣無論運行期優化技術、編譯技術以及硬體平台多麼強大,運用一些已被驗證對Java運行性能有益的技術,總是能獲得非常好的收益。
優化程序代碼的注意事項:
1.除非必須優化,否則不要輕易改動;
2.改動之後要進行仔細的測試;
3.在各個JVM產品中,優化的方式是有區別的;
2、高性能Java的編碼原則:
(1)、先把焦點放在設計、數據結構和演算法身上;
(2)、不要依賴於編譯器編譯期優化技術,正確理解運行期代碼優化技術以及正確使用運行期代碼優化;
(3)、使用StringBuffer類完成字元串連接;
(4)、將對象創建成本降至最低,即盡量創建輕量級對象;
1、合理設計對象大小
2、合理設計類的繼承深度
3、類的構造函數要短小精幹
4、不要創建非必要的對象
5、將對象的創建拖延到最後一刻,即延遲載入技術
6、可能的話要自己實現一個對象緩沖管理池,將對象的創建與回收控制在一個合理的范圍內
(5)、降低同步化帶來的影響;
1、合理識別是否一定要使用同步控制,盡量從設計上避免
2、注意控制同步代碼范圍,避免對線程活躍度造成影響
3、合理使用鎖變數,做到線程分離,提高程序並發度,更進一步提高程序吞吐量
4、用於鎖變數的對象不宜過多,當要使用多個對象作為鎖變數時,一定要確保在代碼中自始自終按照同樣的順序鎖定它們,否則可能導致死鎖
(6)、盡可能使用Stack變數和基本類型完成必要的任務;
(7)、使用static、final、private方法以促成inlining;
(8)、實例變數初始化一次就好;(即一定義就會有一個初始值,下面不需要再進行一次初始化)
(9)、集群類對象的處理;
(10)、盡可能重用對象;(11)、使用延遲載入技術;

『貳』 演算法有幾種

演算法的種類是無窮的。。
但是可以分類。
以下是我查到的資料
演算法可大致分為基本演算法、數據結構的演算法、數論與代數演算法、計算幾何的演算法、圖論的演算法、動態規劃以及數值分析、加密演算法、排序演算法、檢索演算法、隨機化演算法、並行演算法。
演算法可以宏泛的分為三類:
有限的,確定性演算法 這類演算法在有限的一段時間內終止。他們可能要花很長時間來執行指定的任務,但仍將在一定的時間內終止。這類演算法得出的結果常取決於輸入值。
有限的,非確定演算法 這類演算法在有限的時間內終止。然而,對於一個(或一些)給定的數值,演算法的結果並不是唯一的或確定的。
無限的演算法 是那些由於沒有定義終止定義條件,或定義的條件無法由輸入的數據滿足而不終止運行的演算法。通常,無限演算法的產生是由於未能確定的定義終止條件。

演算法設計與分析的基本方法1.遞推法
遞推法是利用問題本身所具有的一種遞推關系求問題解的一種方法。它把問題分成若干步,找出相鄰幾步的關系,從而達到目的,此方法稱為遞推法。
2.遞歸
遞歸指的是一個過程:函數不斷引用自身,直到引用的對象已知
3.窮舉搜索法
窮舉搜索法是對可能是解的眾多候選解按某種順序進行逐一枚舉和檢驗,並從眾找出那些符合要求的候選解作為問題的解。
4.貪婪法
貪婪法是一種不追求最優解,只希望得到較為滿意解的方法。貪婪法一般可以快速得到滿意的解,因為它省去了為找最優解要窮盡所有可能而必須耗費的大量時間。貪婪法常以當前情況為基礎作最優選擇,而不考慮各種可能的整體情況,所以貪婪法不要回溯。
5.分治法
把一個復雜的問題分成兩個或更多的相同或相似的子問題,再把子問題分成更小的子問題……直到最後子問題可以簡單的直接求解,原問題的解即子問題的解的合並。
6.動態規劃法
動態規劃是一種在數學和計算機科學中使用的,用於求解包含重疊子問題的最優化問題的方法。其基本思想是,將原問題分解為相似的子問題,在求解的過程中通過子問題的解求出原問題的解。動態規劃的思想是多種演算法的基礎,被廣泛應用於計算機科學和工程領域。
7.迭代法
迭代是數值分析中通過從一個初始估計出發尋找一系列近似解來解決問題(一般是解方程或者方程組)的過程,為實現這一過程所使用的方法統稱為迭代法。

『叄』 什麼是G-p演算法

遺傳編程(GP)屬於進化計算(Evolutionary Computation,EC)模型的一種。EC是一種借鑒自然界進化機制而產生的並行隨機搜索演算法。進化演算法的基本原理是選擇和改變,它區別於其他搜索方法有兩個顯著特徵:首先這些演算法都是基於種群(population)的;其次在種群中個體(indvial)之間存在競爭。 為搜索特定的(感興趣的)查詢需要一種工具,這種工具可智能生成一組查詢並以它們是否能導出與用戶給定的同樣的對象集來進行評價。GP演算法對這一類問題是很實用的。
1 函數集與端點集
一般GP中可生成的程序集是使用者定義的函數集和端點集。表1給出了相應的函數集和端點集,其中函數集由1.3中定義的查詢運算元、邏輯運算運算元以及比較運算元所組成。
函數集 {SEL,REL,G-REL,RES},{UNI,INT,DIF},{AND,OR,NOT}, {>,>=,=,<,<=} 端點集類集,屬性集,值集
表1 函數集和端點集
在我們的應用中還有一些具有不同句法的查詢運算元。每個運算元具有不同的句法且假定的資料庫是面向對象的。因此,它具有為創建個體而使用的特別的函數集(或運算元集)和端點集。從而,構成種群的所有個體的創建必然受到每個運算元的約束[3]。約束可以是運算元的句法和查詢的類型,或者是為創建查詢選擇適當屬性值的領域知識。比較運算元和邏輯運算元只使用於查詢的謂詞。當比較符號操作數時,僅使用'='。
端點集由CLASS-SET、SLOT-SET和VALUE-SET組成。CLASS-SET由1.2中定義的類名組成,SLOT-SET由每個類的所有屬性構成,VALUE-SET由數值和符號值所構成(它們均為屬性值)。數值由整型或實型數構成,其數值范圍由所用資料庫模式定義。符號值由字元串表示的符號屬性值構成。
[編輯本段]
2 創建初始種群
為了創建一個個體(查詢),首先必須確定特定查詢所返回的對象類型。結果類型被選擇後,從所選類型返回例子的運算元集中隨機地選擇一個運算元,這個過程對查詢的每個參數遞歸地進行。最初,那些句法正確的預定義數量的查詢被隨機地產生,形成初始種群。
[編輯本段]
3 選擇屬性值
由於可選擇范圍大,要從某個查詢的值集中選擇一個屬性值(數值或符號常數)是相當困難的。對於一個范圍為[1,10000]的整數集,隨機選到一個特定整數的概率僅為1/10000。而對於符號常數,則需要很強的背景知識。因此,我們僅就發生在資料庫里的范圍選擇屬性值。
[編輯本段]
4 繁殖新一代種群
每個個體用預定義的適應函數來進行評價。較適應的查詢有較高的概率被選來繁殖新種群,這個過程用三個遺傳運算元:選擇、雜交和變異來完成。為了產生下一代,選擇運算元根據個體的適應值來選擇個體。我們用一個樹來表示一個查詢,雜交運算元用交換兩個父輩的子樹來創建兩個後代。變異運算元用一個新的子樹來代替一個父輩的子樹,從而產生一個新的後代。選擇-雜交-變異循環反復地進行直到終止標准被滿足。
[編輯本段]
5 評價(適應函數測量)
我們使用如下的適應函數f來評價種群中的個體查詢i :
f ( ni , hi ) = T - ( hi * hi ) / ni ,
其中:ni > 0 , T ≥ hi , 且 i = 1 ,2 ,… ,種群的大小(T是被確定的對象集的勢,hi是一個個體查詢i 被選中的次數,ni是查詢 i 結果集的勢)。
上述適應函數依賴於hi和ni ,如果一個查詢沒有被選中(hi=0),則函數的值為T,這是最差的一個適應值。另一方面,如果查詢結果能夠很好地匹配提交給系統的對象集,那麼它的適應值為0(在這種情況下hi = ni = T )。如果種群中出現個體適應值遠遠超過種群平均適應值,該個體很快就會在群體中佔有絕對的比例,從而出現過早收斂的現象。另一方面,在搜索過程的後期,群體的平均適應值可能會接近群體的最優適應值,從而導致搜索目標難以得到改善,出現停滯現象[4]。為了防止上述情況的發生,我們將對一個個體查詢的例子個數 ni 作為分母。

『肆』 python中的鎖都具有哪些

大致羅列一下:
一、全局解釋器鎖(GIL)
1、什麼是全局解釋器鎖
每個CPU在同一時間只能執行一個線程,那麼其他的線程就必須等待該線程的全局解釋器,使用權消失後才能使用全局解釋器,即使多個線程直接不會相互影響在同一個進程下也只有一個線程使用cpu,這樣的機制稱為全局解釋器鎖(GIL)。GIL的設計簡化了CPython的實現,使的對象模型包括關鍵的內建類型,如:字典等,都是隱含的,可以並發訪問的,鎖住全局解釋器使得比較容易的實現對多線程的支持,但也損失了多處理器主機的並行計算能力。
2、全局解釋器鎖的好處
1)、避免了大量的加鎖解鎖的好處
2)、使數據更加安全,解決多線程間的數據完整性和狀態同步
3、全局解釋器的缺點
多核處理器退化成單核處理器,只能並發不能並行。
4、GIL的作用:
多線程情況下必須存在資源的競爭,GIL是為了保證在解釋器級別的線程唯一使用共享資源(cpu)。
二、同步鎖
1、什麼是同步鎖?
同一時刻的一個進程下的一個線程只能使用一個cpu,要確保這個線程下的程序在一段時間內被cpu執,那麼就要用到同步鎖。
2、為什麼用同步鎖?
因為有可能當一個線程在使用cpu時,該線程下的程序可能會遇到io操作,那麼cpu就會切到別的線程上去,這樣就有可能會影響到該程序結果的完整性。
3、怎麼使用同步鎖?
只需要在對公共數據的操作前後加上上鎖和釋放鎖的操作即可。
4、同步鎖的所用:
為了保證解釋器級別下的自己編寫的程序唯一使用共享資源產生了同步鎖。
三、死鎖
1、什麼是死鎖?
指兩個或兩個以上的線程或進程在執行程序的過程中,因爭奪資源或者程序推進順序不當而相互等待的一個現象。
2、死鎖產生的必要條件?
互斥條件、請求和保持條件、不剝奪條件、環路等待條件
3、處理死鎖的基本方法?
預防死鎖、避免死鎖(銀行家演算法)、檢測死鎖(資源分配)、解除死鎖:剝奪資源、撤銷進程
四、遞歸鎖
在Python中為了支持同一個線程中多次請求同一資源,Python提供了可重入鎖。這個RLock內部維護著一個Lock和一個counter變數,counter記錄了acquire的次數,從而使得資源可以被多次require。直到一個線程所有的acquire都被release,其他的線程才能獲得資源。遞歸鎖分為可遞歸鎖與非遞歸鎖。
五、樂觀鎖
假設不會發生並發沖突,只在提交操作時檢查是否違反數據完整性。
六、悲觀鎖
假定會發生並發沖突,屏蔽一切可能違反數據完整性的操作。
python常用的加鎖方式:互斥鎖、可重入鎖、迭代死鎖、互相調用死鎖、自旋鎖大致羅列一下:
一、全局解釋器鎖(GIL)
1、什麼是全局解釋器鎖
每個CPU在同一時間只能執行一個線程,那麼其他的線程就必須等待該線程的全局解釋器,使用權消失後才能使用全局解釋器,即使多個線程直接不會相互影響在同一個進程下也只有一個線程使用cpu,這樣的機制稱為全局解釋器鎖(GIL)。GIL的設計簡化了CPython的實現,使的對象模型包括關鍵的內建類型,如:字典等,都是隱含的,可以並發訪問的,鎖住全局解釋器使得比較容易的實現對多線程的支持,但也損失了多處理器主機的並行計算能力。
2、全局解釋器鎖的好處
1)、避免了大量的加鎖解鎖的好處
2)、使數據更加安全,解決多線程間的數據完整性和狀態同步
3、全局解釋器的缺點
多核處理器退化成單核處理器,只能並發不能並行。
4、GIL的作用:
多線程情況下必須存在資源的競爭,GIL是為了保證在解釋器級別的線程唯一使用共享資源(cpu)。
二、同步鎖
1、什麼是同步鎖?
同一時刻的一個進程下的一個線程只能使用一個cpu,要確保這個線程下的程序在一段時間內被cpu執,那麼就要用到同步鎖。
2、為什麼用同步鎖?
因為有可能當一個線程在使用cpu時,該線程下的程序可能會遇到io操作,那麼cpu就會切到別的線程上去,這樣就有可能會影響到該程序結果的完整性。
3、怎麼使用同步鎖?
只需要在對公共數據的操作前後加上上鎖和釋放鎖的操作即可。
4、同步鎖的所用:
為了保證解釋器級別下的自己編寫的程序唯一使用共享資源產生了同步鎖。
三、死鎖
1、什麼是死鎖?
指兩個或兩個以上的線程或進程在執行程序的過程中,因爭奪資源或者程序推進順序不當而相互等待的一個現象。
2、死鎖產生的必要條件?
互斥條件、請求和保持條件、不剝奪條件、環路等待條件
3、處理死鎖的基本方法?
預防死鎖、避免死鎖(銀行家演算法)、檢測死鎖(資源分配)、解除死鎖:剝奪資源、撤銷進程
四、遞歸鎖
在Python中為了支持同一個線程中多次請求同一資源,Python提供了可重入鎖。這個RLock內部維護著一個Lock和一個counter變數,counter記錄了acquire的次數,從而使得資源可以被多次require。直到一個線程所有的acquire都被release,其他的線程才能獲得資源。遞歸鎖分為可遞歸鎖與非遞歸鎖。
五、樂觀鎖
假設不會發生並發沖突,只在提交操作時檢查是否違反數據完整性。
六、悲觀鎖
假定會發生並發沖突,屏蔽一切可能違反數據完整性的操作。
python常用的加鎖方式:互斥鎖、可重入鎖、迭代死鎖、互相調用死鎖、自旋鎖

閱讀全文

與並行遞歸演算法相關的資料

熱點內容
小米桌面文件夾亂碼怎麼回事 瀏覽:854
點歌台app怎麼連接 瀏覽:316
大學電腦編程學什麼好 瀏覽:346
上哪裡取消應用加密 瀏覽:170
電氣控制與可編程式控制制器pdf 瀏覽:85
cad圖紙不能跨文件夾粘貼 瀏覽:254
學生雲伺服器主機 瀏覽:885
單片機狀態周期 瀏覽:620
lua中的android 瀏覽:441
加密貴還是植發貴 瀏覽:662
陽光壓縮機繼電器 瀏覽:969
修改阿里雲伺服器密碼 瀏覽:815
lk4102加密晶元 瀏覽:588
怎麼更改app店面 瀏覽:489
設備部門如何做好伺服器 瀏覽:849
androido下載 瀏覽:478
神奇高量戰法副圖源碼 瀏覽:830
匯編語言設計凱撒密碼加密器 瀏覽:392
主次梁加密是加在哪裡 瀏覽:664
模板匹配演算法matlab 瀏覽:825