Easyfun Easy fun Easy to play

資料結構II

今天繼續介紹資料結構的常用的種類 鏈結串列(Linked List) 鏈結串列是由許多相同資料型態的項目,依照特定順序排列而成的線性串列,在電腦中位置是不連續、隨機的方式儲存,好處是資料的插入或刪除都方便。當有新資料加入就像系統要一塊記憶體空間,資料刪除後就把空間還給系統,不需要大量移動資料。 在動態配置記憶體空間時,最常使用的就是「單向鏈結串列」(Single Linked List)。一個單向鏈結串列節點是由兩個欄位,即資料欄及指標欄(鏈結欄位)組成,而指標欄將會指向下一個元素的記憶體所在位置。 像是網頁中的超連結是鏈結串列的概念,每個超連結都指向另一個網頁,你可以點擊這些連結在不同的網頁之間做導航。 在單向鏈結串列中第一個節點是 單向鏈結具有’值’和’下一個’字段... Read more

資料結構

資料結構 一想到資料結構就感到很複雜的一些觀念 最早使用電腦的主因是要用來儲存及管理一些資料,這也是資料結構觀念的由來。當我們要求電腦解決問題時,必須以電腦了解的模式來描述問題,資料結構是資料的表示法,也就是電腦中儲存資料的方法。 認識資料結構 資料結構就是資料進入電腦化處理的一套完美邏輯。像程式設計師必須用資料結構來進行資料的新增、刪除、修改、儲存等動作,如果在選擇資料結構時做了錯的選擇,那你整個程式會變得沒效率或者變慢,甚至選錯資料型態那真的是會埋了更大的雷。 例如:圖書館會建立所有書的資料,管理人員會依照各個不同的書做種類分類,如年齡分級、書籍類型、作者或主題。分類好把檔案存起來日後有人要來借書時,只要查詢書籍類型作者名稱這樣,即可快速找出所需的書,而這些儲存的分類就是資... Read more

演算法簡介二

常見演算法簡介二 動態規劃法(Dynamic Programming Algorithm) 動態規劃法主要是如果一個問提答案與子問題相關的話,就能將大問題拆解成各個小問題,其中與分治法不同的地方是可以讓每一個子問題的答案被儲存起來,以供下次求解時直接取用。 這樣的做法不但能減少再次需要計算的時間,並將這些解組合成大問題的答案,故使用動態規劃將可以解決重複計算的缺點。 這邊用動態規劃法來改寫費柏那序列,已計算過資料不必計算,也不會再往下遞迴,會達到增進效能的目的。 例如想取得第四個費柏那Fib(4),他的遞迴可以利用動態規劃法 這邊得知遞迴呼叫9次,而執行加法運算4次,Fib(1)重複執行3次,浪費了效能。 fn factorial_dynamic(n: i32) -&g... Read more

演算法簡介

常見演算法簡介 這邊要來介紹比較常用的演算法,來暸解不同演算法觀念以及技巧。 分治法(Divide and conquer) 分治法核心在將一個難以直接解決大問題依照相同的概念,分割成兩個或更多的子問題,以變各個擊破。問題越小越容易直接求解, 由於分割問題也是遇到大問題時的解決方式,可以將小問題規模不斷縮小,直到這些子問題簡單到可以解決,最後將各子問題的解合併得到原問題的解答。 舉例:如果有8張很難的圖,我們可以分成二組各四幅畫來完成,若還是覺得太複雜,繼續分成四組,每組各兩幅畫來完成,利用相同模式反覆分割問題,這就是最簡單的分治法核心精神。 遞迴法(Recursion) 遞迴法跟分治法都是將一個複雜的演算法問題規模變得越來越小,最終使子問題容易求解。對於我們實作「函數... Read more

Algorithm

滿滿的演算法嗎?? 演算法是計算機科學與程式設計領域中重要的。也是我們人利用電腦解決問題的技巧之一,但不僅用於電腦領域上,包括數學、物理或是生活和工作都可以用演算法來描述. 接下來可能會說說演算法的意思,但知道有時候幾個字或是程式碼會讓人不太懂,所以會用圖解的方式來讓人來理解,但會介紹比較普遍的演算法或是常使用的為主. 演算法定義 演算法被定義為: 「 在有限步驟內解決數學問題的程式.」運用在計算領域中,我們也可以把演算法定義成: 「為了解決某個工作或問題,所需要有限數目的機械性或重複性指令與計算步驟. 」 演算法的條件 描述演算法所需五個條件. 演算法特性 內容&說明 輸... Read more