迴圈不變式主要用來理解演算法的真確性;
有三個必須證明的性質:
初始化:迴圈的第一次迭代之前,它為真,
保持:如果迴圈的某次迭代之前它為真,那麼下次迭代之前它仍為真,
終止:在迴圈終止時,不變式為我們提供乙個有用的性質,該性質有助於證明演算法是真確的。
分析乙個演算法時,需要乙個實現技術的代價,包括描述所用資源及其代價的模型。
ram模型:
均勻的空間耗費:是指計算中曾經使用過的暫存器的總數。均勻的時間耗費是指自始自終被執行的指令和轉移的總條數。
對數耗費:此時空間耗費指計算中普通暫存器存過的自然數的最大長度之和。時間耗費則指被執行的每條指令的時間耗費之和。而一條指令的時間耗費則被認為與被運算的自然數的長度成正比的。
對於ram,還可以定義巡迴(虛擬的並行時間)。它是計算中周相的總數,而乙個周相則是 ram工作的乙個階段,在此階段中,沒有任何乙個普通暫存器先被寫入然後又被讀出。
通常把乙個程式的執行時間描述成其輸入規模的函式。
輸入規模的最佳概念依賴於研究的問題。
代價可以抽象為
執行時間的增長量級或增長率。
分治法:
(1)分解原問題為若干子問題,這些子問題是原問題的規模較小的例項;
(2)解決這些子問題,遞迴地求解各子問題。然而若子問題的規模足夠小,則直接求解。
(3)合併這些子問題的解成原問題的解。
演算法導論(1)
分治策略 1.遞迴式 用來描述遞迴求解的分治演算法的執行時間。求解遞迴式有三種方法 1 代入法,猜測乙個界,然後用數學歸納法證明這個界是正確的。2 遞迴樹法,將遞迴式轉換為一棵樹,利用遞迴式,將每層的代價以及深度都表示出來,節點代表不同層次產生的代價,最後利用邊界和技術求解。遞迴樹法常用來生成乙個好...
演算法導論學習1
第一章 演算法在計算中的作用 演算法的定義 簡單的說就是定義良好的計算過程,由輸入得到輸出!演算法的作用 應用非常廣泛,許多問題都涉及到演算法!演算法的重要性 是否擁有紮實的演算法知識和技術基礎,是區分真正熟練的程式設計師與新手的一項重要特徵。第二章 演算法入門 學習演算法的目的,不僅僅是很快理解演...
演算法導論筆記 1
略過 2.1 插入排序這種方法類似於數學歸納法,只不過,數學歸納法是無限迭代的,而該方法在for或者while語句停止時,歸納停止,運用這種方法,可以幫我們有條理的證明某演算法在for或while迴圈上正確完備的達到了我們的期望。2.2 分析演算法 演算法的複雜度通常有以下幾種情況 2.3 設計演算...