演算法導論學習筆記 頁碼 9 16

2022-07-17 03:24:20 字數 1174 閱讀 5826

前面演算法在生活中不談,演算法的重要性不談,直接說演算法。

第2章 演算法基礎

2.1 插入排序

書中主要介紹了插入排序的思想,即對於陣列a[0 ~ n - 1],長度為n。那麼,公升序的插入排序的過程即是從a[1]開始,先和a[0]比較,如果比a[0]小,那麼將a[0]的元素順序後移放置在a[1]中,將原本a[1]的元素插入在a[0]的位置上,同理再拿a[5]舉例,如果比a[4]小,那麼a[4]後移,繼續比較a[3],如果還是小,a[3]後移,直到找到合適的位置進行插入,原書中提供的偽**,我這裡提供對應的c語言**實現,方便各等級程式設計師閱讀。

然後演算法導論為我們提供了乙個稱之為迴圈不變式的概念,這個迴圈不變式能夠有效的幫我們驗證自己所寫演算法的正確性,說是迴圈不變式很神奇,本質就是我們演算法開始和終止的那個條件,諸如上面的**for迴圈僅僅是負責基本的loop,而while迴圈的判定條件也就是反證這個迴圈不變式。迴圈不變式有三個特徵(如插入演算法為例,倘若一開始的陣列就已經按照目的順序,也就是不需要排序的話,那麼應該無法進入反證迴圈不變式要求的條件),第乙個特徵即是初始化條件為真,i >= 0 and (留待插入的數字 大於 前乙個數字) 這就是乙個反證的迴圈不變式,這個式子的目的是保證符合條件的情況能進入正確的插入流程,所以現在說迴圈不變式在這裡也就是每一次開始前要準備插入的數字前面的序列應該已經是有序的了,當插入完成後,下乙個數字前的序列還是有序的,這也就是保持的意義,迭代之前為真,下一次迭代之前還為真,當終止時也就是整個迴圈到達了length長度外,那麼為我們提供的性質也就是通過保持可以得到性質,a[n]這個元素之前的部分a[0 ~ n - 1],都應該是有序的。

之後演算法導論為我們提供了一些偽**的約定和案例,看過的,或者有一定c語言基礎 || 其他語言基礎的程式設計師們都比較好理解了。

習題敲了乙個2.1-4

然後是演算法的分析,其實就是為後面的時間複雜度做一定的鋪墊,通過計算演算法最優和最劣的情況,將演算法可能執行的時間進行抽象。

習題中有選擇排序,先貼**把,準備睡覺

《演算法導論》學習筆記

4.5.1 二分查詢 乙個經典的問題 如何在乙個嚴格遞增序列a中找出給定的數x 最直接的辦法是 線性掃瞄序列中的所有元素,如果當前元素恰好為x,則表明查詢成功 如果掃瞄完整個序列都沒有發現給定的數x,則表明查詢失敗,說明序列中不存在數x。這種順序查詢的時間複雜度為o n 更好的辦法便是使用二分查詢 ...

演算法導論學習筆記 (1)

乙個acm若菜,趁著acm淡季,開始學習演算法導論了,經過一年的acm學習,逐漸的發現,學東西,深入才是王道,以前學習乙個演算法,總是看懂了就開始做題,到後來才發現很多題目,會演算法,卻不知道是用這個演算法,這就是演算法理解的不到位的後果,從今天開始,定下目標 1.深入系統的學習演算法,2.學會紙上...

演算法導論學習筆記(2)

big o notation 模擬為小於等於 n2 o n o n2 big omega notation 模擬為 大於等於 模擬為等於 嚴格符號 小o與小 模擬為小於和大於 解遞迴方法 1 替換法 guess the form,verify by induction,solve the const...