iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 1
3
Software Development

擁抱「資料結構」的「演算法」系列 第 1

擁抱「資料結構」的「演算法」(01) - 何謂資料結構

參賽緣由

學生時期念的是資訊相關科系,想當初「資料結構」與「演算法」常常都會出現大刀級的老師,就算是小刀級的,也經常是哀鴻遍野,更別提升學考,一定有這兩科,應該是大多數同學心中的痛,雖然自己有如期拿到學分與順利升學,但總覺得自己沒學到什麼,就如同船過水無痕一般(被老師揍飛)

就業之後,大多是處理網頁表單的資料新增、刪除、修改或讀取,接觸演算法的機率並不高,較常使用到的可能就是陣列 Array 或是串列 List,就足以處理大部分的工作內容,直到工作內容有了改變,才發現自己真的對於資料結構與演算法非常非常的陌生,像是要計算這個算式 1 + 2 * 2 + 4 / 2 的結果,雖然心裡知道要先乘除,後加減,但是要透過程式實作時,竟然發現自己不會寫耶!對於要如何處理先乘除,後加減完全沒有想法,那一刻真的有嚇到,覺得自己真的會寫程式嗎?

但千萬不要因為這樣就覺得自己要轉職,其實資料結構與演算法常常在我們不經意下被使用,只是有些可能很常使用,有一些偶爾才會碰到,或是根本不會碰到,絕大部分跟工作內容有很大的關係,如果真的不懂也無妨,因為弱者我都可以混一口飯吃了(被揍),相信你也可以,也許工作上碰不到,也非常歡迎你帶著好奇心,每天來晃晃,也許哪天碰到某些問題,就會靈光一閃找到解答

接下來的 30 天,希望將自己學習「資料結構」與「演算法」的體會記錄下來,會先分享資料結構的部分,再深入到演算法,也順便幫自己找回學生時代的記憶XD,透過生活中的實例去認識資料結構與演算法,將它們融入在生活當中,並用自己的話,將理解的部分說出來,這樣想忘記也很困難吧XD,也感謝有鐵人賽的舉辦,讓我可以透過 30 天的發文來與大家一起努力共學!加油~

差點忘記最重要的一點,這系列文章大多以自己的學習心得做為分享,並結合生活中的事務來例子,並不會有太理論或是深奧的程式碼(因為我也不懂XD),適合初學者閱讀,但可能會有傷害國家幼苗的疑慮,所以如有不適,請自行就醫(被揍飛),若有不正確的地方歡迎大家指正哦,讓我有進步的機會!


參考書籍

資料結構 洪逸
資料結構:使用Java 2 實作(第二版) 胡昭民
演算法 洪逸

目錄

資料結構

演算法


何謂資料結構

https://ithelp.ithome.com.tw/upload/images/20200914/20129841sH5yrT7PGA.jpg
圖片來源:https://unsplash.com/photos/Q9y3LRuuxmg

你有沒有填寫過紙本初診單的經驗嗎?有想過這麼多就診者的紙本資料最後是存放在那邊呢?

答案就是上圖的病歷櫃,有些診所,在每一次看診時,會先去找出病歷,並將最新的就診紀錄繼續寫在上面,要如何透過好的分類去歸檔,搭配好的存放方式來快速的找到就診者的資料就十分重要

為什麼會舉這個例子,是因為我去了一家好幾年沒去的診所,結果櫃台小姐花了半小時再找我的病歷,過程中還一直跑來跟我道歉,請我再多等一下,看他這麼慌張的樣子讓我很印象深刻,也引發我的好奇心,診所是如何管理這些紙本資料,櫃台小姐是遇到什麼問題而導致找不到

而病歷櫃其實就是一種資料儲存的方式,你可以看到照片中的櫃子是一格一格的,每一格裡面都存放著很多份的紙本病歷,而有些診所或醫院,甚至會有整面牆或是整間房間都擺滿病歷櫃,這可能也是紙本電子化興起的原因之一吧XD

在了解資料都需要一個空間來存放之後,你還有觀察到圖片上什麼嗎?沒錯!就是格子外有貼上一些標籤或是分類的文字,可以方便讓診所人員查找,所以資料有所屬的存放位置分類與所屬的排序,例如:以出生月份分類,然後以出生日期排序,較小的排在前面

王曉明 2020-09-01 >>> 歸類在 9 月份的格子
陳小美 2020-01-01 >>> 歸類在 1 月份的格子
李大同 2018-01-05 >>> 歸類在 1 月份的格子

排序 姓名 月份 日期
#1 王曉明 9 1
排序 姓名 月份 日期
#1 陳小美 1 1
#2 李大同 1 5

在我們生活中,還有沒有其他類似的例子呢?需要將資料分類排序存放在某一空間下的例子?下面再來舉一個例子,會不會跟你想到的一樣呢?

第二個例子就是圖書館,聚集著眾多的紙本書籍,圖書館通常都蓋得很大間,才足以容納這些書籍(會不會也是電子書興起的原因之一XD),並且必須規劃好的儲存方式,搭配適合分類排序方式,才會利於讀者快速查找,透過下圖可以觀察到,每個靠近中間走廊的櫃子上方外側,都有白色的告示牌,上面會標示分類範圍,而每一本書上面也會貼著自己所屬的索書號,讓讀者可以在茫茫書海中,快速找到想借閱的書籍

https://ithelp.ithome.com.tw/upload/images/20200914/20129841kIjYh9h80F.jpg
圖片來源:https://unsplash.com/photos/18G6v__JsbU

以上舉了兩個生活中的例子,可能剛好也是你有的經驗,那麼你會不會好奇,這些紙本的病歷或書籍如果想要以電子化的方式來管理,在電腦的世界裡,又是那如何存放資料,分類與排序的呢?而這些都是 「資料結構」 所涵蓋的範圍


今日小節

資料結構就是資料是以何種方式儲放在電腦裡面,並以何種方式進行分類排序,在現實生活中,也有非常多的東西以不同的形式被儲存著,就像飲料放在冰箱裡,或將重要資料記錄在筆記本裡,不管是人、事或者是物,都以某種的規律存在這個地球上,而在電腦的世界裡,也包含了多種資料結構,根據不同的情境,將有不同的儲存方式,是不是十分有趣,你有沒有發現什麼有趣的例子呢?歡迎在下方留言,也歡迎明天繼續收看,我們明天見囉~


明日謎題

希望可以將每日提到的知識內容,另外設計成謎題,一邊學一邊玩,歡迎大家每天來解謎哦! (今日除外,明天再開始XD)


下一篇
擁抱「資料結構」的「演算法」(02) - 陣列 Array
系列文
擁抱「資料結構」的「演算法」30

尚未有邦友留言

立即登入留言