国产成人毛片视频|星空传媒久草视频|欧美激情草久视频|久久久久女女|久操超碰在线播放|亚洲强奸一区二区|五月天丁香社区在线|色婷婷成人丁香网|午夜欧美6666|纯肉无码91视频

快速冪算法原理 作為一名程序員,需要精通高深的算法嗎?為什么?

作為一名程序員,需要精通高深的算法嗎?為什么?太深的算法可以適當(dāng)學(xué)習(xí)一些,但是比較常用的算法一定能做到。不僅算法崗需要學(xué)習(xí)這么多算法,開發(fā)崗也需要學(xué)習(xí)很多常用算法,這樣才能在開發(fā)過程中編寫出高性能的代

作為一名程序員,需要精通高深的算法嗎?為什么?

太深的算法可以適當(dāng)學(xué)習(xí)一些,但是比較常用的算法一定能做到。不僅算法崗需要學(xué)習(xí)這么多算法,開發(fā)崗也需要學(xué)習(xí)很多常用算法,這樣才能在開發(fā)過程中編寫出高性能的代碼。我舉個(gè)例子。以前,我用MR處理一段數(shù)據(jù)。在reduce階段,我需要根據(jù)某個(gè)值保持頂部,但是如果不能使用其他算法,可以調(diào)用quick sort。最壞的時(shí)間復(fù)雜度是O(n^2)。當(dāng)數(shù)據(jù)很大時(shí),你不能用完。如果能夠維護(hù)大頂堆或bfprt算法,時(shí)間復(fù)雜度會大大降低。所以算法是非常重要的。

那么,我們需要學(xué)習(xí)哪些算法?我將列出以下方向

常見的圖論算法,如并集搜索、最短路徑算法、二部圖匹配、網(wǎng)絡(luò)流、拓?fù)渑判虻?/p>

例如常見的二分搜索、三分搜索,特別是二分搜索、訪談常問、深度優(yōu)先搜索和廣度優(yōu)先搜索,經(jīng)典的八道數(shù)字題等等。還有一些啟發(fā)式搜索算法,如模擬退火算法、遺傳算法、粒子群算法、蟻群算法等。

Dijkstra算法用于尋找最短路徑、最大子段和、數(shù)字DP等

這一類比較大,特別是在機(jī)器學(xué)習(xí)、人工智能、密碼學(xué)等領(lǐng)域。比如數(shù)論中的大數(shù)分解,大素?cái)?shù)的判定,擴(kuò)展歐幾里德算法,中國剩余定理,盧卡斯定理等等,組合數(shù)學(xué)中的博弈問題,卡特蘭數(shù)公式,包含排除原理,波利亞計(jì)數(shù)等等,計(jì)算幾何中的極性排序、凸包問題、旋轉(zhuǎn)卡盤問題、多邊形核問題、平面最近點(diǎn)對問題等。另外,還有一些矩陣的構(gòu)造計(jì)算,如矩陣的快冪等。

如果要做算法作業(yè),除了上面的一些應(yīng)用算法外,主要是機(jī)器學(xué)習(xí)、深度學(xué)習(xí)算法。

大數(shù)相乘,快速算法?

有一個(gè)快速算法來計(jì)算功率,它不是用暴力一個(gè)接一個(gè)地乘以。例如,如果你想計(jì)算2^10000,計(jì)算機(jī)將首先計(jì)算2^5000,然后計(jì)算平方,即兩個(gè)數(shù)的乘法。為了計(jì)算2^5000,計(jì)算機(jī)將首先計(jì)算2^2500,然后將其平方。這種算法稱為快速冪算法。對于2^n的計(jì)算,如果每次乘法的時(shí)間復(fù)雜度為O(1),則總體時(shí)間復(fù)雜度僅為O(logn)級。R一般來說,為了實(shí)現(xiàn)快速冪算法,我們首先對指數(shù)進(jìn)行二進(jìn)制表示。例如,如果要計(jì)算a的23次方,可以將23分解為16421。然后計(jì)算B=a^2,C=B^2=a^4,d=(C^2)^2=a^16。最后的結(jié)果是ABCD的乘法。但這里乘法的復(fù)雜度不是o(1),因?yàn)樗菬o限精度的,稱為大數(shù)乘法。大數(shù)乘法也有許多算法。最簡單的方法類似于手工計(jì)算。復(fù)雜度為O(n^2)。其它方法有分治法、復(fù)雜度O(n^1.58)、FFT法、復(fù)雜度O(n logn logn)等,在快冪大數(shù)乘法的O(logn)次中,最復(fù)雜的是最后一次,即2^5000次。前一個(gè)幾何級數(shù)的復(fù)雜度會衰減,因此總體復(fù)雜度就是最后一次計(jì)算的復(fù)雜度。如果使用FFT方法,復(fù)雜度比線性的要高一些。一般來說,它可以在計(jì)算機(jī)上隨意計(jì)算。R CPU不能全速運(yùn)行,因?yàn)檫@個(gè)程序只使用一個(gè)內(nèi)核進(jìn)行計(jì)算,而您顯示的是總利用率,所以它將保持在大約四分之一的水平。R是否使用shift操作涉及Python大數(shù)操作的具體設(shè)計(jì),我不太了解。但原則上,這也是很有可能的。如果位串用于存儲大量數(shù)字,則2^n的計(jì)算只需在數(shù)組的第n位設(shè)置1,其余可以設(shè)置為0。然后轉(zhuǎn)換成十進(jìn)制是這段代碼中計(jì)算成本最高的部分。右