哪些情況需要提高演算法的效率
A. 大數據自上而下提升統計和演算法的效率
大數據自上而下提升統計和演算法的效率
我們在去開發這些計算體系時,不管是軟體、計算,其實都是在談大數據分析的概念性,什麼時候出現問題,我們如何達到高准確度,這只是這個問題的開始。其實作為一個計算科學家,我們經常會遇到很多的問題,有些是統計學方面的問題,但是我們沒有聯合統計學家一起考慮和解決這些問題。
比如說這個結果的一致性,那麼還有引導程序的理論,那麼就像常規的引導程序一樣,都會達到一些限值,從上至下的計算,統計學的利弊權衡,什麼意思呢?我們對數據計算的理解,也就是說更多的數據需要更多的計算,更多的計算能力。我們如何來做?到底是並行處理?還是子樣抽取等等。你給我更多的數據,我會更高興,因為我能夠獲得更高的准確度,我的錯誤會更小,我會以更低的成本獲得更正確的答案。對於統計學家來說這是好的,但是對於做計算的來說這個不大好,因為我們將這樣思考這個問題。也就是說給我一些數據,那麼我們有一個新的觀念,叫做控制的演算法弱化,比如說我的數據量不夠,我可以快速的處理它。數據太多,我的處理速度會慢下來。從計算角度來說,控制的演算法能夠讓我更快速的處理數據,也就是演算法的弱化。統計學的角度來說,能夠處理更多的數據,獲得更好的統計學上的答案性能提高。盡管計算的預算成本不變,但是我們能夠處理更多的數據,以更快的速度,我們付出的代價就是演算法的弱化。
那麼,這個坐標你們不經常看,橫軸指我們取樣的數量,縱軸代表的是運行時間。我們看一下到底有多少的錯誤。我們現在就要思考固定風險。比如說在我們錯誤率是0.01,這個座標的區域,對於統計學家來說,如果要固定風險的話,那麼必須有一定數量的樣品,才能夠獲得這樣的結果。所以,這是一個叫做典型的預計理論,大家都非常了解。同樣對於在計算機科學方面,我們有所謂的負載均衡的概念,不管你有多少個樣本,但是你一定要有足夠的運營時間,否則的話,你是無法解決這個問題的,這是非常明確的一點。
所以,我們看一下實際的演算法。有一定的運行時間,有固定的風險,在右邊使用的所有演算法,把演算法弱化,我們就可以處理更多的數據。下面我來談一下,這就是我們所說的問題降噪,所謂降噪就是在數據方面有一些屬於製造噪音的數據。我們如何做降噪?首先,我們假設可能的答案是X這樣的一個分樣,然後用高准確度覆蓋它,所以這是一個推理預估的過程。比如說我要找到X的值,它和Y是非常相似的,這是一個自然的預估。現在X是一個非常復雜的值,我無法做,所以我要做一個凸形的值域,我要做定性,同時可以獲得最優點,我需要把它放在一個可行的規模大小之內,那麼也就是任何一個固定風險都是基於X的。左邊是風險,我需要它的一半,這里存在復雜性,如果想知道更多的復雜性,你們可以看一些所謂理論處理方面的文獻,你們可以讀一下,來做這樣均衡的曲線。
我們看一下相關的內容,如果你要達到一定的風險,你必須要有一定的取樣點。這是一個C,也許這個C也是計算方面很難算出來的,所以我們需要做C子集的,把這個子集進行弱化,這樣我們就可以更好的計算了。我們可以做分層的層級,我們稱為池域,並且根據計算的復雜度進行排序的。同時,還有統計學的復雜性,然後進行一個權衡。你們可以從數學計算出這個曲線。在這里舉個例子,比如說X,剛才已經有人介紹過子集是什麼意思,然後你們可以定運行時間,還有取樣的復雜性,然後可以算出答案。你們看一下簡單的C,復雜的C,然後你們看一下運行的時間是在下降,復雜性是一個恆值,這樣你的演算法更簡單,可以用於大數據,既不會不會增加風險,也可以在舉證方面更加簡化。如果是一個信號的圖值,你的運行時間由PQ值決定,你們還有一個域值的話,我們會有一個恆定的取樣,大家可以同時按照「列」計算,獲得我們預期的准確度,而運行時間不變,大家可以自己看這些公式。
那麼,這種分析我希望大家能夠記住的是和這種理論計算科學,重點就是能夠把准確度放到一個水平。因為我們要去關心有關質量方面、統計學方面的風險,計算科學方面的演算法能夠幫助我們解決比較大的問題,就是大數據帶來的大問題。同時,我們還有很多的數據理論可以適用,我們不要從統計學簡單的角度來考慮,而是從計算的角度考慮。
也許你們還要去學一些統計學方面的基本理論,當然如果你們是學統計學的話,你們也要參加計算機科學的課程。對於兩門都學的人,你們應該把這兩個學科放到一起思考,不是統計學家只考慮統計學,計算機科學家只考慮計算機方面,我們需要解決統計學方面的風險。因此,我們可以更好的處理十萬個采樣點,都不會遇到問題。
B. 騫惰岄仐浼犵畻娉曞備綍鎻愰珮鏁堢巼錛
鍦ㄨ$畻鏈轟紭鍖栭棶棰樼殑奼傝В棰嗗煙錛屾湁涓縐嶅己澶х殑鎼滅儲鏂規硶鍙鍋騫惰岄仐浼犵畻娉錛岄氬父綆縐頒負PGA錛屽嵆Parallel Genetic Algorithm銆傚畠鏄涓縐嶅熀浜庨仐浼犳満鍒剁殑騫惰屽寲絳栫暐錛屽叾鏍稿績鍘熺悊鏄妯℃嫙鑷鐒墮夋嫨鍜岄仐浼犲彉寮傜殑榪囩▼錛岄氳繃緹や綋鐨勫崗鍚岃繘鍖栨潵瀵繪壘鏈浼樿В銆
閬椾紶綆楁硶鍥犲叾鍐呭湪鐨勫苟琛岀壒鎬э紝涓哄苟琛岃捐℃彁渚涗簡騫塊様鐨勭┖闂淬傚叾騫惰屾т綋鐜板湪澶氫釜鏂歸潰錛氶栧厛錛屾瘡涓涓浣撶殑榪涘寲榪囩▼鍙浠ョ嫭絝嬭繘琛岋紝榪欎嬌寰楃畻娉曞彲浠ュ湪澶氫釜澶勭悊鍣ㄦ牳蹇冧笂鍚屾椂鎵ц岋紝鏋佸ぇ鍦版彁楂樹簡璁$畻鏁堢巼銆傚叾嬈★紝縐嶇兢涓鐨勫氫唬榪浠d篃鍙浠ュ苟琛屽寲錛屾瘡涓浠g殑綣佹畺鍜屽彉寮傛搷浣滃彲浠ュ悓鏃跺湪涓嶅悓鐨勫瓙緹や綋涓榪涜屻
鍦ㄥ綋鍓嶇殑璁$畻鏈虹‖浠剁幆澧冧腑錛岀壒鍒鏄澶氭牳澶勭悊鍣ㄥ凡緇忔垚涓轟富嫻侀厤緗錛岃繖縐嶅苟琛岄仐浼犵畻娉曠殑浼樺娍鏇翠負鏄庢樉銆傚畠鑳藉熷厖鍒嗗埄鐢ㄨ繖浜涘勭悊鍣ㄧ殑鏍稿績錛岄氳繃騫跺彂璁$畻鐨勬柟寮忥紝鏄捐憲鍑忓皯鎼滅儲鏃墮棿錛屾彁鍗囨眰瑙eぇ瑙勬ā闂棰樼殑鑳藉姏銆傛葷殑鏉ヨ達紝 PGA 鏄涓縐嶉傚簲鐜頒唬紜浠剁幆澧冿紝鎻愰珮璁$畻鏁堢巼鐨勬湁鏁堝伐鍏鳳紝瀵逛簬瑙e喅澶嶆潅浼樺寲闂棰樺叿鏈夐噸瑕佹剰涔夈
C. 影響演算法設計的因素有哪些
影響演算法設計的有以下因素:
針對機器:空間復雜性和時間復雜性。
針對程序員:演算法表達和實現的簡單性。
針對問題:演算法對問題及問題輸入規模的普適性。
影響演算法效率的因素
1、從大的方面來講,所選擇的語言對演算法的效率影響很大。一般來說,使用越高級的語言所需要的時間和空間就越大。另外,不同編譯器產生的代碼質量不同,這對演算法的效率也會有影響。
2、存儲結構
數據的存儲結構,分為順序存儲結構和鏈式存儲結構。順序存儲結構的特點是藉助元素在存儲器中的相對位置來表示數據元素之間的邏輯關系;鏈式存儲結構則是藉助指示元素存儲地址的指針表示數據元素之間的邏輯關系。不同的問題求解選用不同的存儲結構。
3、指針操作
在使用指針時,指針的有秩序掃描非常重要。例如在模式匹配中,如果直接進行匹配,當有不完全匹配時,主串的指針需要回溯。
在KMP演算法中,我們先可以求出每個元素的next函數值,從而在發生不完全匹配時,主串的指針不必要回溯,只需要模式串的元素回到當前元素的next函數值所指的元素再進行匹配即可。當主串和模式串有很多不完全匹配時,KMP演算法可以大大提高效率。
4、查找的效率
有很多快速查找的演算法都可以提高查找的效率,如建立索引,折半查找等,都是在記錄和關鍵字之間進行比較,從而尋求關系。這一類查找建立在比較的基礎之上。查找的效率依賴於查找過程中所進行的比較次數。
在哈希表中,使得記錄的存儲位置和關鍵字之間建立一個確定的存儲關系,因而在查找時,只需要根據這個對應的關系f 找到給定值K 的像f(k)。用這個思想建立哈希表。如在基因組匹配時,用哈希表非常方便。
5、數據類型的選擇
數據類型的選擇也會影響演算法效率,在對時間和空間要求非常嚴格時,盡可能的使用佔用空間較小的數據類型。使用動態開辟空間會使得效率降低,所有在能確定或估計出需要的空間大小的情況下盡量使用靜態數字。個人覺得用vector雖然方便,但是效率並不高。
6、存儲方式
用堆操作還是用棧操作,對於不同的問題需要仔細選擇。在串和隊列的有關操作中用堆操作合適,在樹的操作中用棧操作合適,如建立二叉樹中序遍歷的遞歸演算法或非遞歸演算法,用棧操作好。
D. 演算法的高效性是指
算雀薯宏法的高效性指的是,在解決特定問題的過程中,演算法能夠在合理的時間復雜度和空間復雜度下完成其任務。具體而言,高效性可以從以下幾個方面來衡量:時間復雜度:即演算法解決問題所需要的時間成本,通常用大 O 記號來表示。一般情況下,時間復雜度越低,演算法的效率就越高。空間復雜度:即手嘩演算法解決問題所需要佔用的空間成本,也通常用大 O 記號來表示。與時間復雜度類似,一般情況下,空間復雜度越低,演算法的效率也越高。演算法的正確性:即演算法在處理問題時,所得出的解是否正確,可以得到正確的結果。演算法的高效性對於實際應用非常重要。例如,在大規模數據處理、計算機視覺、自然語言處理等領域,高效的演算法可以顯著提高計算效頃冊率,縮短處理時間,提高工作效率。同時,在一些需要實時響應的場景,對演算法的高效性要求更高,例如實時搜索、網路爬蟲等。要實現高效的演算法,需要結合具體的問題和實現方式來進行優化,包括但不限於演算法設計、數據結構的選擇、演算法實現的優化等。同時,對於某些特殊的問題,可能需要結合領域專家的經驗來進行優化,例如某些圖像處理演算法、自然語言處理演算法等。
E. 闃愯堪鍥炴函綆楁硶鍜屽垎鏋濋檺鐣岀畻娉曠殑鍏卞悓鐐瑰拰涓嶅悓鐐,鎻愰珮綆楁硶鏁堢巼鐨勫叧閿鏄浠涔堬紵
鍥炴函綆楁硶鍜屽垎鏀闄愮晫綆楁硶閮芥槸鍦ㄩ棶棰樼殑瑙g┖闂翠笂鎼滅儲闂棰樿В鐨勭畻娉曪紝瀹冧滑鏈変竴浜涚浉鍚岀偣鍜屼笉鍚岀偣錛
鐩稿悓鐐癸細
閮芥槸涓縐嶆棦甯︽湁緋葷粺鎬у張甯︽湁璺寵穬鎬х殑鎼滅儲綆楁硶銆
閮芥槸鍩轟簬絀蜂婦鎼滅儲鐨勭畻娉曪紝閮介渶瑕佽懼畾涓涓鍒濆嬭В錛岀劧鍚庨氳繃涓嶆柇鍦版灇涓炬悳緔㈡潵閫愭ユ帴榪戞渶浼樿В銆
閮藉彲浠ュ簲鐢ㄤ簬闈炵嚎鎬ц勫垝闂棰樼殑奼傝В銆
奼傝В鐩鏍囦笉鍚岋細鍥炴函娉曠殑奼傝В鐩鏍囨槸鎵懼嚭鎵鏈夋弧瓚崇害鏉熸潯浠剁殑瑙o紝鑰屽垎鏀闄愮晫娉曠殑奼傝В鐩鏍囧垯鏄鎵懼嚭浣跨洰鏍囧嚱鏁板艱揪鍒版瀬澶ф垨鏋佸皬鐨勮В錛屾垨鏄鍦ㄦ弧瓚崇害鏉熸潯浠剁殑瑙d腑鎵懼嚭鏈浼樿В銆
鎼滅儲鏂瑰紡涓嶅悓錛氬洖婧娉曢氬父閲囩敤灝濊瘯浼樺厛鎼滅儲錛岃屽垎鏀闄愮晫娉曞垯閫氬父閲囩敤騫垮害浼樺厛鎼滅儲銆
瀵硅妭鐐瑰瓨鍌ㄧ殑瑕佹眰涓嶅悓錛氬垎鏀闄愮晫娉曢氬父闇瑕佸瓨鍌ㄤ竴浜涢濆栫殑淇℃伅浠ュ埄浜庤繘涓姝ュ湴灞曞紑鎼滅儲錛岃屽洖婧娉曞垯涓嶉渶瑕併
瀛樺偍絀洪棿鐨勮佹眰涓嶅悓錛氬垎鏀闄愮晫娉曠殑綆楁硶妗嗘灦涓錛屾瘡涓涓媧葷粨鐐瑰彧鏈変竴嬈℃満浼氭垚涓烘墿灞曠粨鐐癸紝鑰屽洖婧娉曞垯娌℃湁榪欐牱鐨勯檺鍒躲
涓嶅悓鐐癸細
鎻愰珮綆楁硶鏁堢巼鐨勫叧閿鏄鍒嗘敮闄愮晫綆楁硶銆備笌鍥炴函綆楁硶鐩告瘮錛屽垎鏀闄愮晫綆楁硶閲囩敤浜嗕竴嬈℃т駭鐢熸墍鏈夊効瀛愮粨鐐圭殑鏂瑰紡錛岄伩鍏嶄簡鍥炴函綆楁硶涓闇瑕佷笉鏂榪涜岀姸鎬佽漿縐誨拰鍥炴函鐨勮繃紼嬶紝浠庤屾彁楂樹簡綆楁硶鏁堢巼銆傛ゅ栵紝鍒嗘敮闄愮晫綆楁硶榪樺彲浠ラ氳繃浣跨敤闃熷垪寮忔垨浼樺厛闃熷垪寮忕殑瀛樺偍鏂瑰紡錛屾潵閬垮厤鍥炴函綆楁硶涓闇瑕佽繘琛岀殑棰濆栫姸鎬佽漿縐繪搷浣滐紝榪涗竴姝ユ彁楂樼畻娉曟晥鐜囥