資料機構與演算法分析讀書筆記 演算法分析

2022-02-23 17:03:52 字數 1761 閱讀 7464

本章內容:

演算法(algorithm)為求解乙個問題需要遵循的、被清楚指定的簡單指令的集合。

ps:演算法的幾個特性這裡就不贅述。

為了比較計算演算法的效能,需要一些正式的系統架構來計算演算法的效能,引入一些數學公式,用來比較:

注:第一條定義的意義為t(n)的相對增長率小於等於f(n)的相對增長率。

第二條定義的意義為t(n)的相對增長率大於f(n)的相對增長率。

第三條定義的意義為t(n)的相對增長率等於f(n)的相對增長率。

第四條定義的意義為t(n)的相對增長率小於f(n)的相對增長率。

主要因素是所使用的演算法以及該演算法的輸入。

一般來說,若無相反的指定,則所需要的量是最壞情況下的執行時間。

最大的子串行和問題  

ps:恩,沒錯,這本書居然把這道經常考的面試題當做分析演算法的講解例題。

解法一:

1

int maxsubsum(int a, intn)2

16return

maxsum;

17 }

view code

執行時間為o(n3),主要執行時間取決於三重迴圈。

解法二:

1

int maxsubsum(int a, intn)2

16}17return

maxsum;

18 }

view code

執行時間為o(n2),對第一這種方法進行了改進。

解法三:

1

int maxsubsum(int a, int left, int

right)225

26 maxrightbordersum = rightbordersum = 0;27

for (i = center + 1; i <= right; i++)

2833

34return max3(maxleftsum, maxrightsum, maxleftbordersum +maxrightbordersum);

35 }

view code

執行時間為o(n*logn),該方法採用了分治的設計思想,運用遞迴進行實現。除了小輸入外,一定會比前兩個快。

值得一提的是分析該執行時間時運用到了學校上課講的遞推的思想,那我必須說一下了:

該演算法的時間可以用乙個線性時間o(n)加上兩個求解子串行問題的時間。即

ps:不清楚,這裡是加號,n在遞推時可以代替o(n)

令n=2k    且n為偶數,則有

首先t(n/2)=2*t(n/22)+n/2

所以t(n)=2*[2*t(n/22)+n/2]+n=22*t(n/22)+2*n

以此類推,有t(n)=2k*t(n/2k

)+k*n

=2k*t(1)+k*n

=n*1+k*n

又k=log2n,所以,t(n)=n+n*log2n,所以該演算法的執行時間為o(n*logn)

在這裡我們體會了如何分析演算法執行時間,演算法的執行時間還有其他的情況,如:

對數(二分查詢、歐幾里得演算法)

冪   (計算xn)

學會分析乙個演算法的複雜度是很重要的,以後有機會我們會深入拓展。

數值分析與演算法 讀書筆記(三)

線性方程組的直接解法 線性方程組 linear equation system 可寫成如下形式 a11x 1 a12 x2 a1n xn b 1a21x 1 a22 x2 a2n xn b 2 am 1x1 am2x 2 amnx n bm 若m n,這種線性方程組稱為超定方程組 若 m n,線性方...

演算法和資料機構學習筆記之佇列

init 初始化操作 enquene self,item 若佇列存在,插入新元素item到佇列中,並成為隊尾元素 dequene self 刪除佇列中隊頭元素,並返回隊頭元素 思路 陣列實現佇列時,要注意,隨著不斷進隊,出隊,head和tail都會持續往後移動。當tail移動到最右邊,即使陣列中還有...

演算法分析與實踐 作業13 讀書筆記

演算法競賽高階指南 讀書筆記 在學習了演算法設計與分析基礎這門課後,我還翻閱了 演算法競賽高階指南 這本書,這本書根據ccf noi資訊學奧利匹克競賽涉及的知識體系進行編寫,對計算機程式設計的基本技能 資料結構與演算法進行了深入的講解。我覺得通過這本書,我了解到的東西還是比較豐富的。比如字典樹的概念...