談談數據結構和算法這2個好基友[數據結構和算法]

本文爲小甲魚數據結構和算法教學視頻的學習筆記


第一章:談談數據結構和算法這2個好基友

 

一、聊聊數據結構


1、爲什麼學數據結構?編程能力有質的飛越,不再停留在調用現成的API,做一個上檔次的程序員。


2、什麼是數據結構?數據結構是一門研究非數值計算的程序設計問題中的操作對象,以及他們之間的關係和操作等相關問題的學科。

思考:好吧,簡單來說程序設計 =數據結構 + 算法,數據結構就是關係,就是數據元素之間存在的一種或多種特定關係的集合。


3、數據結構分爲邏輯結構和物理結構,前者指數據對象中數據元素之間的相互關係,否則指邏輯結構在計算機中的存儲形式

思考:數據結構  =邏輯結構 +物理結構


4、邏輯結構有四種如下所示:

  • 集合結構:除了同屬一個集合外,沒有其他任何關係

  • 線性結構:數據元素之間是一對一的關係

  • 樹形結構:數據元素之間是一對多的關係

 

  • 圖形結構:數據元素之間是多對多的關係

思考:如果從人的交合方面說明4大邏輯結構,集合 =  2個陌生人,線性結構 =  1對夫妻,樹形結構一男多女3p4p5p,圖形結構 = 聚衆淫亂


5、物理結構是指如何將數據元素存儲到計算機的存儲器中,此處的存儲器主要針對內存而言,像硬盤、光盤能外部存儲器的數據組織通常用文件結構來描述。

思考:如果說邏輯結構是關係,那麼物理結構就是關係在內存的存儲關係


6、數據元素的存儲結構形式有兩種:

  • 順序存儲:指數據元素存放在地址聯繫的存儲單元裏,其數據間邏輯關係和物理關係是一致的,比如數組

  • 鏈式存儲:面對時常變化的元素,比順序存儲靈活多了,就是把數據元素存放在任意的存儲單元裏,這組存儲單元可以是連續的,也可以是不連續的。所以說鏈式存儲結構的數據元素存儲關係並不能反應其邏輯關係,因此需要用一個指針存放數據元素的地址,這樣子通過地址就可以找到關聯數據元素的位置。比如:銀行叫號機

思考:存儲結構順序存儲 +鏈式存儲,前者就是排排坐,後者多了指針指向元素地址,就可以找到下一個元素在哪裏,就是叫號系統

 

二、聊聊算法

1、不明白數據結構和算法的關係?,見下圖



2、算法是什麼?算法宅計算機中表現爲指令的有限序列,並且每一條指令表示一個或者多個操作。一個問題可以由多個算法解決,一個算法也不可能具有通解所有的問題。

思考1:算法就是你泡妞的技巧和方式,對不同的妞兒要有不同的喜好,可以有多個追求的方式,一種追求方式不可能對通喫所有的妞兒,不同的追求方式就有差別,有的追的快,有的追得慢。學會針對不同的妞兒採取適合的泡妞技巧才能夠快速的泡到妞

思考2:儘管算法不唯一,但是我們要學習掌握好一些號的算法,對我們解決問題很有幫助。


3、算法的5個基本特徵:輸入、輸出、有窮性、確定性和可行性

  • 輸入:有0個或者多個輸入
  • 輸出:有1個或者多個輸出(如果沒有反饋要他幹嘛?)
  • 有窮性:有限的步驟後,有限的時間
  • 確定性:沒有二義性(愛or不愛)
  • 可行性:每一步可以實現的

4、算法的要求:正確性、可讀性、健壯性、時間效率高、存儲量低


5、算法的正確性:算法的正確性是指算法至少應該具有輸入、輸出和加工處理無歧義性,能正確反映問題的需求、能夠得到問題的正確答案。大體分爲以下四個層次:

  • 算法程序沒有語法錯誤
  • 算法程序對於合法輸入能夠產生滿足要求的輸出
  • 算法程序對於非法輸入能夠產生滿足規格的說明
  • 算法程序對於故意刁難的測試輸入都有要求的輸出結果

思考:對於非法輸入和故意刁難的測試都有輸出滿足規格結果很重要


6、算法的可讀性:算法設計的另一個目的就是爲了便於閱讀、理解和交流。我們寫代碼的目的除了讓計算機執行,還有就是爲了便於他人閱讀和修改

思考:代碼的可讀性要強


7、算法的健壯性:當輸入數據不合法時,算法也能夠做出相關的處理,而不是產生異常、崩潰或者莫名其妙的結果。

思考:健壯性,簡而言之就是不會因爲別人亂輸入就把你的程序搞崩潰了


8、算法的時間效率高和存儲量要低:執行的效率很高,使用變量少,少用內存資源

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章