擁抱「資料結構」的「演算法」(30) - 完賽心得

 

前言

耶呼~~~ 終於 30 天了!喔耶!因為參加鐵人賽瘦了 2 公斤,因為寫文章實在太燒腦啦XDDD,一起來看看我的心得感想吧


心得

首先,非常謝謝 iT 邦幫忙鐵人賽,透過這 30 天,讓我好好的嗑了我念書時期的書跟筆記本(差點消化不良),從過程中了解到自己其實還有許多不懂的地方,需要好好認真面對,學會專業的內容之後,再進一步的內化並用自己的話說出來,透過舉例子(想謎題跟例子真的是想破頭XD),分享的動作加深自己的印象,透過 30 天的學習,真的明顯感受到自己的進步,非常開心,也謝謝大家的陪伴,如果有任何理解錯誤或不適合的內容請告訴我,讓我有機會改善 XD

再來想跟大家分享資料結構與演算法對我工作上的影響,原本的我早已把大學學過的東西通通還給老師了,等到真的發現自己在撰寫程式遇到瓶頸時,大概是畢業後的第 6 年,因為過程中其實大多是接觸前端畫面的處理,或是後端的資料庫存取,就是資料的呈現與儲存而已,等到開始接觸一些推薦系統或是 LeetCode 才發現我不會寫程式了耶!

發現自己對於如何將輸入的資料儲存成適合的資料結構會有障礙,因為資料結構會影響到後續程式排序資料或尋找資料的方便性,再來如何讀取特定的資料結構並將資料轉成自己想要呈現的結果,也卡關 XD,就像是二元樹如何使用陣列表示早知忘光,整個不知所以然,只能用慘字形容,只能好好 K 書,發現當年理解的並非真的理解

而演算法的部份更是悲慘到極點,基本排序通通不懂,剛好因為工作內容需要換成其他語言,發現比較底層的語言排序要自己寫耶,如何在一串數字中快速完成排序,又再次卡關,實在是很掉漆,頓時覺得資料結構真的很重要,這個觀念沒有架構好,演算法更是舉步維艱,覺得再這樣下去我可能工作不保,於是有開始念書,但過程中因為自己的拖延症又停擺了,剛好遇到鐵人賽,所以握緊機會參賽,果然滿載而歸

現在面對工作上的需求或是寫 LeetCode 都會先分析需求,再去了解題目的架構,需要搭配哪些資料結構來儲存相關的資料,最後再實作演算法的部分(甚至會有一些混和式的作法),讓結果符合需求,發現念書之後整個思考方式都改變了,感覺基礎觀念真的非常重要,像是求兩數的最大公因數,可以使用暴力法,也可以使用輾轉相除法,去分析兩者之間的優缺點,雖然說自己還有很多不太了解的部分,但會想繼續努力,去加強這些觀念,對於自己工作上或思考事情上面都有幫助,最大的部份應該是表達,試著用別人可以理解的方式去舉例子,而不是用自己堅持的對,去要求對方理解 XD

最後感謝我的家人,包容我 30 天,讓我可以好好的利用時間寫文章,而且我每一天都會請家人閱讀然後解謎題(好可憐XD),辛苦他們了,工作之餘還要看他們不懂的內容,感覺他們壓力好大,不過看著他們有順利通過謎題時,會覺得很開心,其實資料結構與演算法跟我們生活有許多連結,其實不像刻板印象中的那麼艱深,不過有一陣子家人會反映說他們看不懂程式碼,所以分享的內文大多是以觀念的部分在述說,程式碼的部分並沒有做說明,希望這些文章能夠讓初學者覺得資料結構與演算法是有趣的,而不是一開始就被程式碼嚇跑XD,回想到念書時期很多同學都是因為看到程式碼而放棄,連基礎觀念都還沒打好就因為誤解而離開了,真的蠻可惜的

最後的最後,謝謝資料結構與演算法陪我度過這 30 天,真的花了很多時間跟心力在跟這兩位打交道,我們應該是好朋友了(相擁而泣),也謝謝大家,下台一鞠躬(揮手)


回顧

30天的分享內容,分為兩大部分資料結構演算法

資料結構

演算法

畫圖

由於資料結構與演算法會使用到很多圖表,所以這段時間捲子袖子畫了很多張圖(擦汗),醜醜的還請大家見諒,還有每篇的謎題也有部分需要借助圖片,就來挑幾張來回顧一下吧XD



昨日解謎

謎題說明:找出公里數最少的路徑,然後將各國國名的字首拼起來,就會得到DIJKSTRA就是戴克斯特拉演算法



留言

這個網誌中的熱門文章

CPE 一顆星選集題目說明與解答 - Java 筆記與心得分享

Visual Studio 自動排版格式化程式碼

1. Vito's family (CPE10406, UVA10041) - CPE一顆星解答與說明