數(shù)據(jù)結構之算法淺談
算法:
1.確定性,有窮性,可行性,輸入和輸出性
2.設計范式
貪心法,分治法,動態(tài)規(guī)劃法,線性規(guī)劃法,搜索和枚舉法。
3:實現(xiàn)方法
順序執(zhí)行,并行執(zhí)行(包括分布式計算),遞歸算法和迭代算法
順序執(zhí)行
求數(shù)組當中元素最大值:
關于循環(huán):
優(yōu)美的遞歸:二叉排序樹的搜索
尾遞歸是尾調用的一種特殊情況,也是遞歸結構的一種特殊形式。
編譯器一般都可以對尾遞歸進行優(yōu)化(尾調用消除技術)
直接利用當前函數(shù)的棧幀,將尾調用處理成循環(huán)的形式
尾調用:是指一個函數(shù)里的最后一個動作是調用一個函數(shù)的情形,這個函數(shù)調用的返回值直接被當前函數(shù)作為返回值
遞歸結構使用的函數(shù)遞歸調用,會增加任務的棧空間使用,用遞歸方法解決問題的規(guī)模受系統(tǒng)??臻g的約束,
除此之外函數(shù)調用時的參數(shù)入棧和出棧也會降低算法的效率
分支和跳轉
閏年:?
過長的多分支結構常被視為軟件當中的不良結構。違背了OCP原則(開放,封閉原則)
環(huán)形隊列demo:一致性處理,包括函數(shù)表
對隊尾指針移動的處理:rear = (rear+1) % N
如果不采取對N取模,則每次指針移動時都要做是否已經(jīng)達到表尾的判斷處理
算法實現(xiàn)與數(shù)據(jù)結構
邏輯結構:
線性結構,關聯(lián)結構(集合,映射),樹形結構,圖形結構
線性表:
數(shù)組,鏈表,棧,隊列是四種最常見的線性表
數(shù)組:
訪問方式:下標訪問
查找無開銷,插入和刪除需要大量移動元素。
查找元素:O(n) if 數(shù)組有序? 二分查找 O(logn)
鏈表:
適用于線性表的長度不確定的場合。
兩個域構成:數(shù)據(jù)域 and 指針域
易于插入和刪除,查找困難。
優(yōu)勢:鏈表長度可以動態(tài)增長,比數(shù)組具有很大的優(yōu)勢
表頭結點的好處:
1:無論鏈表是否為空表,始終有一個能標識鏈表的頭節(jié)點,可以用一致性處理空鏈表和非空鏈表
2:對鏈表進行插入,刪除和遍歷操作時,不需要對數(shù)據(jù)元素的首節(jié)點和中間節(jié)點做差異化處理,對每個結點的操作可以做到一致性