Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 欧美国产在线精品17p,91在线视频在线,日韩精品电影在线

          整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          程序員該如何學習數據結構與算法?

          數據結構與算法的重要性對程序員來說不言而喻,本文就來分享下我是如何學習數據結構與算法的,希望對你們有所幫助。

          學習算法的捷徑就是多刷題

          要說捷徑,我覺得就是腳踏實地,多刷題。

          但是,如果你是小白,也就是說你連常見的數據結構(如鏈表、樹)以及常見的算法思想(如遞歸、枚舉、動態規劃)這些都沒學過,那么,我不建議你直接去刷題。而是先去找本書先去學習這些,然后再去刷題。

          也就是說,假如你要去諸如這些網站刷題,那么你要先具備一定的基礎。這些基礎包括:

          以上列出來的算是最基本的吧。就是說你刷題之前,要把這些過一遍再去刷題。如果你連這些最基本的都不知道的話,那么你在刷題的過程中會很痛苦的,思路也會相對比較少。

          總之,千萬不要急,先把這些基本的過一遍,力求理解,再去刷題。這些基礎的數據結構與算法,我是通過看書學的。那時候看的書是:

          說實話,我那一段時間幾乎都花在數據結構與算法上,但刷的題很少,只是書本上的一些例題。所以當我把這些基本的過一遍之后,再去一些網站刷題依舊非常菜。所以千萬別指望以為自己把這些思想學完之后刷題會很牛,只有多刷題,只有多動手實踐,你的靈敏度才會提高起來。

          總結下,提高數據結構與算法沒啥捷徑,最好的捷徑就是多刷題。但是,刷題的前提是你要先學會一些基本的數據結構與算法思想。

          追求完美

          如何刷題?如何對待一道算法題?

          我覺得,在做題的時候一定要追求完美,千萬不要把一道題做出來之后,提交通過,然后就趕緊下一道。

          學習數據結構的書_電子書數據結構_數據結構通俗易懂的書

          算法能力的提升和做題的數量是有一定的關系,但并不是線性關系。也就是說,在做題的時候要力求一題多解,如果自己實在想不出來其他辦法了,可以去看看別人是怎么做的,千萬不要覺得模仿別人的做法是件丟人的事。

          我做題的時候,可能第一想法就是用很粗糙的方式做,因為很多題采用暴力法都會很容易做,就是時間復雜度很高。之后,我就會慢慢思考,看看有沒其他方法來降低時間復雜度或空間復雜度。最后,我會去看一下別人的做法,當然,并不是每道題都會這樣執行。

          衡量一道算法題的好壞無非就是時間復雜度和空間復雜度,所以我們要力求完美,就要把這兩個降到最低,令它們相輔相成。

          我舉道例題吧:

          一只青蛙一次可以跳上1級臺階,也可以跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法?

          方法1:暴力遞歸

          這道題不難,或許你會采取下面的做法:

          public?static?int?solve(int?n){
          ? ?if(n ==?1?|| n ==?2){
          ? ? ? ?return?n;
          ? ?}else?if(n <=?0){
          ? ? ? ?return?0;
          ? ?}else{
          ? ? ? ?return?solve(n-1) + solve(n-2);
          ? ?}
          }

          這種做法的時間復雜度很高,指數級別了。但是如果你提交之后僥幸通過了,然后你就接著下一道題了,那么你就要好好想想了。

          方法二:空間換時間

          力求完美,我們可以考慮用空間換時間:這道題你去仔細想一想,會發現有很多是重復執行了。所以可以采取下面的方法:

          //用一個HashMap來保存已經計算過的狀態
          static?Map?map?=?new?HashMap();
          public?static?int?solve(int?n){
          ? ?if(n <=?0)return?0;
          ? ?else?if(n <=?2){
          ? ? ? ?return?n;
          ? ?}else{//是否計算過
          ? ? ? ?if(map.containsKey(n)){
          ? ? ? ? ? ?return?map.get(n);
          ? ? ? ?}else{
          ? ? ? ? ? ?int?m = solve(n-1) + solve(n-2);
          ? ? ? ? ? ?map.put(n, m);
          ? ? ? ? ? ?return?m;
          ? ? ? ?}
          ? ?}
          }

          這樣,可以大大縮短時間。也就是說,當一道題你做了之后,發現時間復雜度很高,那么可以考慮下,是否有更好的方法,是否可以用空間換時間。

          方法三:斐波那契數列

          學習數據結構的書_電子書數據結構_數據結構通俗易懂的書

          實際上,我們可以把空間復雜度弄的更小,不需要HashMap來保存狀態:

          public?static?int?solve(int?n){
          ? ?if(n <=?0)
          ? ? ??return?0;
          ? ?if(n <=?2){
          ? ? ? ?return?n;
          ? ?}

          ? ?int?f1 =?0;
          ? ?int?f2 =?1;
          ? ?int?sum =?0;
          ? ?for(int?i =?1; i<= n; i++){
          ? ? ? ?sum = f1 + f2;
          ? ? ? ?f1 = f2;
          ? ? ? ?f2 = sum;
          ? ?}
          ? ?return?sum;
          }

          我弄這道題給你們看,并不是在教你們這道題怎么做,而是有以下目的:

          推薦一些刷題網站

          我一般是在和牛客網刷題,感覺挺不錯,題目難度不是很大。

          在牛客網那里,我主要刷劍指Offer,不過那里也有個在線刷,但里面的題量比較少。牛客網刷題有個非常方便的地方就是有個討論區,那里會有很多大佬分享他們的解題方法,不用我們去百度找題解。所以你做完后,實在想不出,可以很方便地去看別人是怎么做的。至于,大部分題目官方都有給出答案,也是個不錯的刷題網站。你們可以兩個挑選一個,或者兩個都刷。

          當然,還有其他刷題的網站,不過,其他網站沒刷過,不大清楚如何。

          再說數據結構

          前面主要是說了我平時都是怎么學習算法的。在數據結構方法,我只是列舉了你們一定要學習鏈表和樹(二叉堆),但這是最基本的,刷題之前要掌握的。對于數據結構,我列舉下一些比較重要的:

          對于這些,自己一定要動手實現一遍。你可以看書,也可以看視頻,新手可以先看視頻,不過前期看視頻后期還是要看書的。

          例如對于平衡樹,可能你跟著書本的代碼實現之后,過陣子你就忘記,不過這不要緊,雖然你忘記了,但是如果你之前用代碼實現過,理解過,那么當你再次看到的時候,會很快就記起來,很快就知道思路,而且你的抽象能力會在不知不覺中提升起來。之后再學習紅黑樹、數據結構都會學得很快。

          最后,動手去做,動手去做,動手去做。重要的話說三遍。可以先學習最基本的,然后刷題,刷題是一個需要長期堅持的事情。在刷題的過程中,當然也可以穿插學習其他數據結構。

          作者:帥地,一個熱愛編程的在校生,我的世界不只有coding,還有writing。目前維護訂閱號「苦逼的碼農」,專注于寫算法與數據結構、Java、計算機網絡。


          主站蜘蛛池模板: 国产乱码精品一区二区三| 国产成人一区二区三区电影网站 | 精品一区二区三区免费| 中文乱码字幕高清一区二区| 成人国内精品久久久久一区| 成人无号精品一区二区三区| 香蕉久久一区二区不卡无毒影院| 大屁股熟女一区二区三区| 精品女同一区二区三区在线 | 亚洲欧美国产国产综合一区| 亚洲AV美女一区二区三区 | 国产成人精品一区二区三区免费| 国产伦精品一区二区三区免费下载| 亚洲视频一区二区三区| 亚洲综合无码一区二区| 亚洲一区二区在线免费观看| 日韩精品成人一区二区三区| 久久久久人妻一区精品果冻| 秋霞鲁丝片一区二区三区| 日韩一区二区三区免费体验| 亚洲av色香蕉一区二区三区| 精品国产乱子伦一区二区三区| 高清国产精品人妻一区二区| 亚洲A∨精品一区二区三区 | 亚洲一区精品无码| 久久一区不卡中文字幕| 99久久精品国产一区二区成人| 看电影来5566一区.二区| 国产高清不卡一区二区| 精品一区二区三区东京热| 99精品一区二区三区无码吞精| 亚洲高清一区二区三区| 国内精品一区二区三区在线观看| 无码少妇一区二区三区芒果| 成人精品一区二区电影 | 精品一区狼人国产在线| 免费无码一区二区| 国产一区二区内射最近更新| 无码日韩精品一区二区免费暖暖 | 麻豆AV一区二区三区久久| 亚洲国产欧美日韩精品一区二区三区|