遞迴
遞迴是呼叫自己的函式;快速排序遞迴函式有基線條件和遞迴條件,決定結束和遞迴;
遞迴呼叫會產生呼叫棧;
棧有壓入和彈出兩種操作;
呼叫鏈越長,呼叫棧就會越長,所占用的記憶體就多;
尾遞迴可以解決呼叫棧過長的問題。
快速排序使用了分而治之的方法狄克斯特拉演算法分而治之:遞迴式問題解決方法
d&c分而治之的原理:
1.找出簡單的基線條件
2.確定如何縮小問題的規模,使其符合基線條件
基線條件是陣列為空或只有乙個元素。
遞迴條件是quicksort(less)+[基數值]+quicksort(greater)
工作原理:首先,在陣列中找乙個基準值,然後,將陣列分成小於基準值(less)和大於基準值(greater)的兩個陣列,再對兩個陣列分別使用快速排序。
快速排序的效能高度依賴於你選擇的基準值。
快速排序最糟糕的情況下時間複雜度是o(n2)。
快速排序平均情況時間複雜度是o(nlogn)。
平均情況是選擇的基準值能夠將陣列分成兩個不為空的子陣列,此時呼叫棧的長度為o(logn)。
最糟糕情況下每次選擇的基準值分成的兩個陣列,總有乙個為空,此時呼叫棧的長度為o(n)。
狄克斯特拉演算法:找出加權圖中前往x的最短路徑,步驟如下:(1) 找出最便宜的節點,即可在最短時間內前往的節點。
(2) 對於該節點的鄰居,檢查是否有前往它們的更短路徑,如果有,就更新其開銷。
(3) 重複這個過程,直到對圖中的每個節點都這樣做了。
(4) 計算最終路徑。
注意:1.狄克斯特拉演算法只適用於有向無環圖
2.狄克斯特拉演算法背後的關鍵理念:找出圖中最便宜的節點,並確保沒有到該節點的更
便宜的路徑!
3.不能將狄克斯拉演算法用於包含負權邊的圖,因為該演算法基於乙個這樣的假設:對於乙個已經處理的節點,沒有前往該節點的更短路徑。而這種假設僅在沒有負權邊的圖中才成立。而貝爾曼-福德演算法可用於在含有負權邊的圖中尋找最短路徑。
實現:1.建立三張雜湊表,圖表、開銷表、父節點表
圖表:儲存節點的鄰節點及其開銷
開銷表:儲存從起點到達每個節點需要的開銷
父節點表:儲存每個節點的父節點
2.建立乙個陣列用於存放已經處理過的節點
3.執行演算法:
基礎回顧(二) CSS
1 css概念 2 css規則 內嵌式外聯式 在html檔案中,新增link外部的css檔案,link的屬性值分別有 匯入式 樣式語法規則 3 風格1 常用樣式 文字三屬性 字型 font family arial 宋體 字型大小 font size 絕對長度 盒子三屬性基礎選擇器 id選擇器 na...
linux 學習二 之回顧基礎
個人來說,看書比較慢。今天花了大概一天的時間,才將 鳥哥的私房菜 基礎學習篇 的前三章看完。看完之後,收穫比較豐富。在以前,零零散散的受到身邊的同學 同事或者技術 上的一些影響,對linux大概有一些了解。知道有很炫酷的命令列介面,也因為工作的原因接觸了一些基礎性的概念和指令。但是還是覺得它很神秘。...
PHP基礎回顧之表單(二)
get post 和 request 的區別?get 變數接受所有以 get 方式傳送的請求,及瀏覽器位址列中的 之後的內容。在 html 表單中使用 method get 時,所有的變數名和值都會顯示在 url 中,並且不適合大型的變數值。post 變數接受所有以 post 方式傳送的請求。pos...