持續學習,持續開發,是目前主流IT業界程序員的一個生活常規,在現代技術迭代速度非常快的情況下型罩,只有不斷保持自我學習和探索才不會與時代脫節。無論是專業的IT從業者還是IT小白,都需要培養自己的算卜兄鬧法思維。南邵電腦培訓發現擁有良好演算法思維後的直接好處有:更高的面試成功機會,和更快的日常問題處理能力。
何為演算法思維,並不是對一些已經設計好的優秀代碼的反復背誦和背板,而是自己對於問題的抽象能力的練習,即從抽象問題到實際進行編碼或者設計程序解決問題的一個能力,如果單純對於一些演算法進行背誦的話,我們的思維能力不會得到提升,最多就是熟練的碼農而已。所以,當看到別人設計的優秀演算法後,我們一定要探尋演算法背後那「曲徑通幽」的思維之路。只有經歷了思維之路的磨難,才能永遠佔有一個演算法,並有可能舉一反三,或者是設計一個巧妙演算法。
個人認為,對於提升演算法思維的方法,首先我們需要深入思考各種苦惱的問題,例如:
假設我喜歡租車出行,那麼對於某一個地方的停車點一般在什麼時候有車的機率最大?有車的概率是否與天氣,溫度等因素有關?
我希望可以在回家之前通過手機APP讓家裡的空調提前工作起來,但塵飢是我非常Geek,不想使用現成的產品而想自己實現一個,和同學吹牛的時候可以更加脫穎而出?
在明確了這些問題以後我們就可以開始思考如何嘗試寫一個小的程序來幫助自己解決,這個時候如果手頭有一個習慣的語言就非常合適了(比如我個人就喜歡python,有很多庫可以使用,而且入門非常容易),如果沒有的話,可以去看看各個語言合適的場景,不過對於爬蟲、數據分析相關個人認為更加貼合日常生活的項目來看,還是考慮直接從Python3起步比較好,後期如果想用樹莓派做點智能家居相關的項目的話Python也是非常合適的。
對於Python的學習,目前有很多非常成熟的課程,可以覆蓋各個不同的能力范圍,這里著重推薦Coursera的視頻課程,配合本地IPython或者LeetCodePlayground一起調試和練習,可以獲得很好的效果。
B. 做為一個初學者,如何才能學好演算法呢,感覺自己很菜
凡事都講究動機,你學習演算法的目的是什麼呢?目的不同,學法不同側重不同。
如果你是准備跳槽,以面試為目的,可以先從cracking the coding interview入手,題目是按照鏈表,樹圖,遞歸這種章節安排的,每章都有題目,難度適中,第一遍自己寫不出來很正常,畫圖分析,然後再做第二遍,第二遍就快很多,理解也深刻了,實在理解不了的演算法,沒辦法,背吧,說不定到後面不知什麼時候就理解了,所謂讀書百遍,其意自現,演算法也一樣。
如果你是半路出家的程序員,看書覺得看不下去,可以試著看看視頻,現在網路這么發達,網上有很多免費的精品視頻,比如潭州教育老師的數據結構以及清華鄧俊輝老師的數據結構都是特別好的課程。
最後一種就是你對演算法理論和精髓確實感興趣,且有一定的數學功底,你可以嘗試研究下《演算法導論》,甚至《計算機程序設計藝術》(反正我是看不下去)。
其實,無論出於哪種目學習演算法,其實最重要的一點就是:多編程實踐,多思考,這是廢話,但這也是真理。
C. 不會寫演算法的程序員的上限是什麼
這個問題就是你最起碼要會簡單的演算法,比較困難的肯定很多人都不會。我下面具體說一下。
對於大多數程序員來說,在工作中不是必需的,但是你在找工作,特別是那些剛從學校畢業的學生,想要進入更大的公司(BAT),是必須學習演算法的。此外,我認為在這個過程中提高自己的技術水平,喜歡讀一些好的代碼,還需要演算法技巧,喜歡看到leveldb,復述,來源,必須知道跳錶是什麼,至少,Linux內核文件系統代碼必須知道紅黑樹是什麼?
上面這些就是我自己看法希望可以幫到你。
D. python寫演算法不好
基於以下三個原因,我們選擇Python作為實現機器學習演算法的編程語言:(1) python的語法清晰;(2) 易於操作純文本文件;(3) 使用廣泛,存在大量的開發文檔。
可執行偽代碼
Python具有清晰的語法結構,大家也把它稱作可執行偽代碼(executable pseudo-code)。默認安裝的Python開發環境已經附帶了很多高級數據類型,如列表、元組、字典、集合、隊列等,無需進一步編程就可以使用這些數據類型的操作。使用這些數據類型使得實現抽象的數學概念非常簡單。此外,讀者還可以使用自己熟悉的編程風格,如面向對象編程、面向過程編程、或者函數式編程。
Python語言處理和操作文本文件非常簡單,非常易於處理非數值型數據。Python語言提供了豐富的正則表達式函數以及很多訪問Web頁面的函數庫,使得從HTML中提取數據變得非常簡單直觀。
Python比較流行
Python語言使用廣泛,代碼範例也很多,便於讀者快速學習和掌握。此外,在開發實際應用程序時,也可以利用豐富的模塊庫縮短開發周期。
在科學和金融領域,Python語言得到了廣泛應用。SciPy和NumPy等許多科學函數庫都實現了向量和矩陣操作,這些函數庫增加了代碼的可讀性,學過線性代數的人都可以看懂代碼的實際功能。另外,科學函數庫SciPy和NumPy使用底層語言(C和Fortran)編寫,提高了相關應用程序的計算性能。本書將大量使用Python的NumPy。
Python的科學工具可以與繪圖工具Matplotlib協同工作。Matplotlib可以繪制2D、3D圖形,也可以處理科學研究中經常使用到的圖形,所以本書也將大量使用Matplotlib。
Python開發環境還提供了互動式shell環境,允許用戶開發程序時查看和檢測程序內容。
Python開發環境將來還會集成Pylab模塊,它將NumPy、SciPy和Matplotlib合並為一個開發環境。在本書寫作時,Pylab還沒有並入Python環境,但是不遠的將來我們肯定可以在Python開發環境找到它。
Python語言的特色
諸如MATLAB和Mathematica等高級程序語言也允許用戶執行矩陣操作,MATLAB甚至還有許多內嵌的特徵可以輕松地構造機器學習應用,而且MATLAB的運算速度也很快。然而MATLAB的不足之處是軟體費用太高,單個軟體授權就要花費數千美元。雖然也有適合MATLAB的第三方插件,但是沒有一個有影響力的大型開源項目。
Java和C等強類型程序設計語言也有矩陣數學庫,然而對於這些程序設計語言來說,最大的問題是即使完成簡單的操作也要編寫大量的代碼。程序員首先需要定義變數的類型,對於Java來說,每次封裝屬性時還需要實現getter和setter方法。另外還要記著實現子類,即使並不想使用子類,也必須實現子類方法。為了完成一個簡單的工作,我們必須花費大量時間編寫了很多無用冗長的代碼。Python語言則與Java和C完全不同,它清晰簡練,而且易於理解,即使不是編程人員也能夠理解程序的含義,而Java和C對於非編程人員則像天書一樣難於理解。
所有人在小學二年級已經學會了寫作,然而大多數人必須從事其他更重要的工作。
——鮑比·奈特
也許某一天,我們可以在這句話中將「寫作」替代為「編寫代碼」,雖然有些人對於編寫代碼很感興趣,但是對於大多數人來說,編程僅是完成其他任務的工具而已。Python語言是高級編程語言,我們可以花費更多的時間處理數據的內在含義,而無須花費太多精力解決計算機如何得到數據結果。Python語言使得我們很容易表達自己的目的。
Python語言的缺點
Python語言唯一的不足是性能問題。Python程序運行的效率不如Java或者C代碼高,但是我們可以使用Python調用C編譯的代碼。這樣,我們就可以同時利用C和Python的優點,逐步地開發機器學習應用程序。我們可以首先使用Python編寫實驗程序,如果進一步想要在產品中實現機器學習,轉換成C代碼也不困難。如果程序是按照模塊化原則組織的,我們可以先構造可運行的Python程序,然後再逐步使用C代碼替換核心代碼以改進程序的性能。C++ Boost庫就適合完成這個任務,其他類似於Cython和PyPy的工具也可以編寫強類型的Python代碼,改進一般Python程序的性能。
如果程序的演算法或者思想有缺陷,則無論程序的性能如何,都無法得到正確的結果。如果解決問題的思想存在問題,那麼單純通過提高程序的運行效率,擴展用戶規模都無法解決這個核心問題。從這個角度來看,Python快速實現系統的優勢就更加明顯了,我們可以快速地檢驗演算法或者思想是否正確,如果需要,再進一步優化代碼。
E. c語言咋么學啊能看懂例題,自己編程不會啊沒有思路!
一 ,怎樣學習C語言
很多人對學習C語言感到無從下手,經常問我同一個問題:究竟怎樣學習C語言?我是一個教師,已經開發了很多年的程序,和很多剛剛起步的人一樣,學習的第一個計算機語言就是C語言。經過這些年的開發,我深深的體會到C語言對於一個程序設計人員多麼的重要,如果不懂C語言,你想寫底層程序這幾乎聽起來很可笑,不懂C語言,你想寫出優秀高效的程庌輌這簡直就是天方夜譚。為什麼C語言如此重要呢?
第一:C語言語法結構很簡潔精妙,寫出的程序也很高效,很便於描述演算法,大多數的程序員願意使用C語言去描述演算法本身,所以,如果你想在程序設計方面有所建樹,就必須去學它。
第二:C語言能夠讓你深入系統底層,你知道的操作系統,哪一個不是C語言寫的?所有的windows,Unix,Linux,Mac,os/2,沒有一個里外的,如果你不懂C語言,怎麼可能深入到這些操作系統當中去呢?更不要說你去寫它們的內核程序了。
第三:很多新型的語言都是衍生自C語言,C++,Java,C#,J#,perl...哪個不是呢?掌握了C語言,可以說你就掌握了很多門語言,經過簡單的學習,你就可以用這些新型的語言去開發了,這個再一次驗證了C語言是程序設計的重要基礎。還有啊,多說一點:即使現在招聘程序員,考試都是考C語言,你想加入it行業,那麼就一定要掌握好C語言。
那麼究竟怎樣學習C語言呢?
1:工欲善其事,必先利其器 這里介紹幾個學習C語言必備的東東: 一個開發環境,例如turbo C 2.0,這個曾經占據了DOS時代開發程序的大半個江山。但是現在windows時代,用turbo C有感覺不方面,編輯程序起來很吃力,並且拖放,更沒有函數變數自動感應功能,查詢參考資料也不方便。建議使用Visual C++,這個東西雖然比較大塊頭,但是一旦安裝好了,用起來很方便。
一本學習教程,現在C語言教材多如牛毛,但推薦大家使用《C語言程序設計》譚浩強主編 第二版 清華大學出版社,此書編寫的很適合初學者,並且內容也很精到。
除此以外,現在有很多輔助學習的軟體,畢竟現在是Window時代了,學習軟體多如牛毛,不象我們當初學習,只有讀書做題這么老套。我向大家推薦一個「集成學習環境(C語言)」,里邊的知識點總結和常式講解都非常好,還有題庫測試環境,據說有好幾千題,甚至還有一個windows下的trubo C,初學者甚至不用裝其它的編譯器,就可以練習編程了,非常適合初學者。還有一個「C語言學習系統」軟體,不過感覺只是一個題庫系統,如果你覺得題做的不夠,不妨也可以試試。
2:葵花寶典 學習計算機語言最好的方法是什麼?答曰:讀程序。
沒錯,讀程序是學習C語言入門最快,也是最好的方法。如同我,現在學習新的J#,C#等其他語言,不再是抱著書本逐行啃,而是學習它們的常式。當然,對於沒有學過任何計算機語言的初學者,最好還是先閱讀教程,學習完每一章,都要認真體會這一章的所有概念,然後不放過這一章中提到的所有常式,然後仔細研讀程序,直到每一行都理解了,然後找幾個編程題目,最好是和常式類似的或一樣的,自己試圖寫出這段已經讀懂的程序,不要以為常式你已經讀懂了,你就可以寫出和它一樣的程序,絕對不一定,不相信你就試一試吧,如果寫不出來,也不要著急,回過頭來再繼續研究常式,想想自己為什麼寫不出來,然後再去寫這段程序,反反復復,直到你手到擒來為止,祝賀你,你快入門了。
3:登峰造極 寫程序的最高境界其實就是掌握各種解決問題的手段(數據結構)和解決問題的方法(演算法)。
是不是寫出底層程序就是程序設計高手呢?非也,寫底層程序,無非是掌握了硬體的結構,況且硬體和硬體還不一樣,要給一個晶元寫驅動程序,無非就是掌握這塊晶元的各種寄存器及其組合,然後寫值讀值,僅此而已。這不過是熟悉一些io函數罷了。那麼怎樣才算精通程序設計呢?怎樣才能精通程序設計呢?舉個例子:你面前有10個人,找出一個叫「張三」的人,你該怎麼辦?第一種方法:直接對這10個人問:「誰叫張三」。第2種方法:你挨個去問「你是不是張三?」,直到問到的這個人就是張三。第三種方法:你去挨個問一個人「你認不認識張三,指給我看」。不要小看這個問題,你說當然會選第一種方法,沒錯恭喜你答對了,因為這個方法最快,效率最高,但是在程序設計中找到解決問題的最優方法和你用的手段卻是考驗一個程序員程序設計水平的重要標志,而且是不容易達到的。剛才這個問題類似於數據結構和演算法中的:Map數據結構,窮舉查找和折半查找。所以掌握好數據結構和一些常用演算法,是登峰造極的必然之路。最後給大家推薦嚴尉敏的《數據結構》清華大學出版社,希望每一個想成為程序設計高手的人研讀此書。
有問題可以追問我;
如果對我的回答還滿意
請隨手採納下啊!
謝謝樓主:!
F. c語言題目,演算法看不懂,還有裡面的sigh和sum等都是什麼意思啊~!希望一步一步的說清楚,先謝啦~!
看來這個問題難住你的不是演算法本身,而是英文, 程序員需要良好的英語基礎和數學基礎。
sign:
中文含義 為符號, 用來代表這個演算法裡面的當前 正負號;
sum:
中文含義為總和, 用來代表求和的和。
deno:
denominator 的縮寫,denominator中文含義為分母。
有了上面的解釋,這個演算法的偽代碼相信就很容易懂了
1-1/2+1/3-1/4+.....1/99-1/100
= 1 + (-1)(1/2)+ 1/3 + (-1)(1/4) + ... + 1/99 + (-1)(1/100)
S1: 設為正數
S2: 和 = 1 //加上第一個數
S3: 分母為2 // 為了接著計算 (-1)(1/2)
S4: 正負變號//對應上面的算式每項輪流反號
S5:讓term 為當前項 //現在是 (-1)(1/2)
S6: 這步寫錯了,應該是sum = sum + term, 即在和上加上當前項(-1)(1/2),於是計算出了 1 + (-1)(1/2)的值了,目前
S7: 分母+1//為了計算 後面的1/3
S8: 如果分母小於等於100, 返回S4,這樣可以繼續計算並累加後面的項; 否則,當前的sum里已經包含了所有項的和了,結束。
G. 怎麼看待程序員普遍缺乏數據結構和演算法的知識
在很多程序員看來,數據結構,演算法這一類的東西感覺沒用,在實踐中都不常用,所以都會很忽視這類內容,但是在很多公司看來,尤其是大公司看來數據結構和演算法這種東西確實最有用,而且經常在筆試和面試中出現。
2、數據結構和演算法在面試的時候最容易量化和體現能力什麼意思呢?在面試或者筆試的時候,面試數據結構和演算法,可以面出你的思維能力,思考能力,這個能力對於編程來說很重要。比如:如果面試你使用過什麼框架嗎?你說:會,使用過,然後你談了談使用這些框架的一些知識和遇到的坑,以及怎麼解決的?通過這樣的問題,不能看出的思維能力和編程能力,只能看出你確實會用這個東西。而面試演算法和數據結構不一樣了,以為面試這種東西可以讓你寫出來,或者寫偽代碼,而且這些能力如果你有,你的成長空間也高。
面試你編程的實踐能力,不可能讓你上機去敲一個模塊的實現吧?而讓你寫個演算法和數據結構卻很方便,也可以量化。所以,很多人平時不用演算法和數據結構,在跳槽的時候,也會提前去復習演算法和數據結構的知識,因為這是面試中很常見的問題。但是我還是建議大家能夠一直有這種能力。不要因為不常用而忽視這些基本的東西,這些東西才是精華。