java冒泡排序經(jīng)典代碼 為什么有些算法崗位,需要用C 而不是python?
為什么有些算法崗位,需要用C 而不是python?C/C是一種相對(duì)低級(jí)的語言,它可以很好地控制CPU/內(nèi)存和其他計(jì)算機(jī)資源,尤其是硬件。在算法運(yùn)算最精細(xì)的時(shí)候使用它們是很自然的。但它們的優(yōu)點(diǎn)也是缺點(diǎn)
為什么有些算法崗位,需要用C 而不是python?
C/C是一種相對(duì)低級(jí)的語言,它可以很好地控制CPU/內(nèi)存和其他計(jì)算機(jī)資源,尤其是硬件。在算法運(yùn)算最精細(xì)的時(shí)候使用它們是很自然的。
但它們的優(yōu)點(diǎn)也是缺點(diǎn)。精細(xì)的操作自然需要精細(xì)的編程,精細(xì)的編程自然需要復(fù)雜的語言設(shè)置,比如什么是指針,什么是指針函數(shù),什么是函數(shù)指針當(dāng)你理解了這些概念,你可能就沒有編寫代碼的沖動(dòng)了。更重要的是,如果你想編寫高性能的代碼,你必須精通這些概念
Python的一個(gè)非常重要的特性就是所謂的“粘合語言”,也就是說它可以將用不同語言編寫的代碼模塊組合起來,然后通過Python調(diào)用它們。實(shí)際上,大多數(shù)算法庫都是用C/C語言編寫的,然后提供Python接口供用戶使用。畢竟,大多數(shù)人只需要知道如何調(diào)用封裝的算法。但是如果你想實(shí)現(xiàn)你自己的算法,你必須知道C/C
例如,Python就像一個(gè)電視遙控器,C/C就像遙控器中的電路板。通常,如果你想換臺(tái),只需按一下按鈕。但有一天你只需要一個(gè)將屏幕旋轉(zhuǎn)90度的功能,遙控器沒有這個(gè)功能,但可以通過卸下遙控板,插入幾個(gè)組件來實(shí)現(xiàn)。你是做什么的?
學(xué)Python一定要會(huì)算法嗎?
開始時(shí),您不必很好地學(xué)習(xí)算法。但是隨著技術(shù)的發(fā)展,仍然需要算法,否則只能做一些工作。
1. 學(xué)好軟件開發(fā)離不開計(jì)算機(jī)理論基礎(chǔ),比如數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng)、網(wǎng)絡(luò)技術(shù)、算法研究等,如果你喜歡這項(xiàng)技術(shù),那就不是問題。先開始,你可以彌補(bǔ)。
2. 算法是軟件開發(fā)的靈魂。好的算法寫不出好的程序。
3. 如何學(xué)習(xí)算法,首先選擇經(jīng)典算法教材?;镜目梢詮臄?shù)據(jù)結(jié)構(gòu)中學(xué)習(xí),其中包含一些基本的算法,然后再學(xué)習(xí)特殊的算法(實(shí)際上,在數(shù)據(jù)結(jié)構(gòu)領(lǐng)域?qū)W習(xí)算法一般就足夠了)。網(wǎng)上還有很多論壇、算法網(wǎng)站,為了吸引眼球,它們一般都很通俗易懂。大多數(shù)算法都是C語言,但是語言在算法層次上是相互聯(lián)系的,因此理解算法模型是最重要的。
4. 萬事開頭難。只要你開始,剩下的就是慢慢操作這項(xiàng)技術(shù)。該算法在實(shí)際應(yīng)用中是最快、最強(qiáng)的。
希望對(duì)您有所幫助
如果是基礎(chǔ)的,我想找一個(gè)在線網(wǎng)站學(xué)習(xí)如何開始是可以的。如果你想系統(tǒng)地學(xué)習(xí),我建議從不同的方向?qū)W習(xí)會(huì)更有效率。例如下面三個(gè),分別為安全域、數(shù)據(jù)分析、網(wǎng)絡(luò)爬蟲等。如果是游戲指導(dǎo)或機(jī)器學(xué)習(xí),找另一個(gè)。。
從哪本書開始學(xué)習(xí)Python比較好?
對(duì)于那些使用了多種開發(fā)語言(Java、C#、nodejs、Erlang)然后轉(zhuǎn)用Python進(jìn)行機(jī)器學(xué)習(xí)的人,我想談?wù)勎业目捶ā?/p>
首先,Python真的很慢嗎?我的回答是真的。非常慢。for循環(huán)比CPP慢兩個(gè)數(shù)量級(jí)。
那么為什么要使用Python呢?如果我們遍歷超過一億個(gè)數(shù)據(jù),兩個(gè)數(shù)量級(jí)的差異是不可接受的。但是,如果我們使用Python來執(zhí)行頂層邏輯并阻塞數(shù)以億計(jì)的數(shù)據(jù),Python只會(huì)循環(huán)十幾次,剩下的就留給CPU和GPU了。所以兩個(gè)數(shù)量級(jí)無關(guān)緊要?一毫秒和100毫秒在整個(gè)系統(tǒng)中并不重要。
Python最大的優(yōu)點(diǎn)是它可以非常優(yōu)雅地將數(shù)據(jù)拋出到高效的C、CUDA中進(jìn)行計(jì)算。Numpy、panda、numba這些優(yōu)秀的開源庫可以非常方便高效地處理海量數(shù)據(jù),借助ZMQ、cell等還可以做分布式計(jì)算,gevent借助epoll系統(tǒng)IO優(yōu)化。因此,它不需要花費(fèi)太多的精力就可以優(yōu)雅高效地完成海量數(shù)據(jù)處理和機(jī)器學(xué)習(xí)任務(wù)。這就是Python如此流行的原因。
好好想想。同樣的性能,代碼只有CPP或Java的三分之一或更少,不是很吸引人嗎?