資料結構學習筆記(緒論二)

2021-06-29 15:57:55 字數 1467 閱讀 3861

計算任意n個整數之和。

使用不同的演算法求和,比較優劣。

典型演算法

int sum_array_claassical(int a,int n)
該演算法複雜度:t(

n)=o

(n)

線性遞迴

遞迴:減而治之,將大問題分解成乙個小的子問題和另乙個稍大的問題,一步一步自頂向下分解稍大問題,最終解決問題。

int sum_array_recursion(int a,int n)
複雜度分析:

1)遞迴跟蹤分析:檢查每個例項,累計時間。

sum(a,n)->sum(a,n-1)->sum(a,n-2)->…->sum(a,1)->sum(a,0)

因此 t(n

)=o(

n)

2)遞推方程分析:由遞迴關係求複雜度遞推方程。

遞迴基:sum(a,0) =>t(0)=o(1)

遞推方程: t(

n)=t

(n−1

)+o(

1)=t

(n−2

)+o(

1)+o

(1)=

t(n−

3)+o

(1)+

o(1)

+o(1

)=..

....

=o(1

)+..

.+o(

1)+o

(1)+

o(1)

=n∗o

(1)=

o(n)

由以上可知:t(n)=o(n)

尾遞迴(拓展)

尾遞迴實際就是線性迭代。參考csdn上的一篇部落格:**線性遞迴和尾遞迴

二分遞迴

實質就是將陣列逐級分解到單個元素,再將單個元素返回求和累加,注意最後的return語句的右半部分的起始序號必須加1,否則會進入死迴圈。

int sum_array_dichotomy(int a,int lo,in hi)
t(

n)=o

(n)

比較不同版本的陣列倒置演算法,統一介面void reverse(int *a,int lo,int hi).

遞迴版

//核心部分

if(lo

迭代版
//迭代原始版

next;

if(lo--;

goto next;

}

//迭代精簡版

while(loa[lo++],a[hi++]);

資料結構學習筆記(1) 緒論

好了進入正題吧!資料結構是一門 研究非數值計算的程式設計問題中 的操作物件,以及它們之間的關係和操作等相關問題的學科。程式設計 資料結構 演算法 資料 是描述客觀事物的符號,是計算機中可以操作的物件,是能被計算機識別,並輸入給計算機處理的符號集合。資料元素 是組成資料的 有一定意義的基本單位 不是最...

資料結構學習筆記 資料結構緒論

資料 是描述客觀事物的符號,是計算機中可以操作的物件,是能夠被計算機識別,並輸入給計算機處理的符號集合。資料元素 是組成資料的 具有一定意義的基本單位,在計算機中通常作為整體處理。也被稱為記錄。資料項 乙個資料元素可以由若干資料項組成。資料項是資料不可分割的最小單位。資料物件 是性質相同的資料元素的...

資料結構學習筆記 1 資料結構緒論

1.1 資料結構起源 現實中,我們利用計算機更多的不是解決數值計算的問題,而是需要一些更科學有效的手段 比如表 樹和圖等資料結構 的幫助,才能更好地處理問題。資料結構是一門研究非數值計算的程式設計問題中的操作物件,以及它們之間的關係和操作等相關問題的學科。1.2 基本概念和術語 資料元素 是組成資料...