♥made by Randq
♥ ^_^
算法
數據結構編程
->用程序代碼把現實世界的問題信息化 eg:金錢信息化,點餐隊列信息化,人際關係信息化數據結構
->用計算機高效的處理這些信息從而創造價值編程語言
->農業-工業-信息化函數
數據是信息的載體,是描述客觀事物屬性的數,字符及全部能輸入到計算機中並被計算機識別和處理的符號的集合。性能
數據是計算機程序加工的原料。指針
數據元素是數據的基本單位,一般做爲一個總體進行考慮和處理。eg:海底撈一波顧客code
一個數據元素可由若干數據項組成,數據項是構成數據元素的不可分割的最小單位。對象
eg:號數,取號時間(組合項:年,日,月),就餐人數blog
要根據實際的業務需求來肯定什麼是數據元素,什麼是數據項。
數據結構是相互之間存在一種或多種特定關係的數據元素的集合。eg:某個特定門店的排隊顧客信息和它們之間的關係。
數據對象是具備相同性質的數據元素的集合,是數據的一個子集。eg:全國全部門店的排隊的顧客信息。
數據類型是一個值的集合和定義在此集合上的一組操做的總稱。
- 原子類型。其值不可再分的數據類型。eg:int bool
- 結構類型。其值能夠再分解爲若干成分的數據類型。
- 抽象數據類型。
抽象數據類型(Abstract Data Type,ADT)是抽象數據組織及與之相關的操做。
ADT用數學化的語言定義數據的邏輯結構,定義運算。與具體的實現無關。
一般用(數據對象 數據關係 基本操做集)這樣的三元組來表示抽象數據類型
- 集合:各個元素同屬一個集合,別無其餘關係。
- 線性結構:數據元素之間是一對一的關係。除了第一個元素,全部元素都有惟一前驅;除了最後一個元素,全部元素都有惟一後繼。
- 樹形結構:數據元素之間是一對多的關係。
- 圖形結構(網狀結構):數據元素之間是多對多的關係。
順序存儲:把邏輯上相鄰的元素存儲在物理位置上也相鄰的存儲單元中,元素之間的關係由存儲單元的鄰接關係來體現。
鏈式存儲:把邏輯上相鄰的元素能夠在物理位置上不相鄰,藉助指示元素存儲地址的指針來表告訴元素之間的邏輯關係。
索引存儲:在存儲元素信息的同時,還創建附加的索引表。索引表中的每項稱爲索引項,索引項的通常形式是(關鍵字,地址)。
散列存儲:根據元素的關鍵字直接計算出該元素的存儲地址,又稱哈希存儲。
後面三個都爲非順序存儲。
優勢 缺點 順序存儲 可隨機存取,存儲密度高 要求大片連續空間,改變容量不方便。 鏈式存儲 不要求大片連續空間,改變容量方便 不可隨機存取,要耗費必定的指針空間。 索引存儲 檢索速度快 增長了附加的索引表,會佔用較多的存儲空間。另外,再增長和刪除元素時要修改索引表,於是會花費較多的時間。 散列存儲 檢索,增長和刪除結點的操做都很快 若是散列函數很差可能出現元素存儲單元的衝突,而解決衝突會增長時間和空間的開銷
施加在數據上的運算包括運算的定義和實現。
運算的定義是針對邏輯結構的,指出運算的功能;eg:隊列:出隊,入隊,輸出隊列長度。
運算的實現是針對存儲結構的,指出運算的具體操做步驟。
數據結構是要處理的信息,算法是處理信息的步驟。
有窮性:一個算法必須在執行有窮步後結束,且每一步均可在有窮時間內完成
算法必須是有窮的,而程序能夠是無窮的
肯定性:算法的每條指令必須有明確的指令,對於相同的輸入必須獲得相同的輸出
可行性:能夠用已有的基本操做實現算法
輸入
輸出
- 正確性
- 可讀性
- 健壯性
- 高效率與低存儲需求:省時省內存,時間複雜度和空間複雜度低。
過後估計運行時間?
不可取。不能排除與算法自己無關的外界因素:時間與機器性能有關,編程語言有關(越高級的語言執行效率越低),與編譯程序產生的機器指令質量有關;且有些算法不能過後統計,eg:導彈控制算法
事前預估算法時間開銷T(n)與問題規模n的關係
空間開銷(內存開銷)與問題規模n之間的關係
算法原地工做:算法所需內存空間爲常量