資料結構與演算法 緒論

2021-10-14 07:48:12 字數 2694 閱讀 6863

重要性

使用者資訊表usersid

name

***001

bigsai

man002

smallsai

man003

菜虛鯤woman

users的pojo物件

class users

//list和woman是資料

listlist;//資料物件list

listwoman;//資料物件woman

list.add(new users(001,"bigsai","man"));//新增資料元素 乙個users由(001,bigsai,man)三個資料項組成

list.add(new users(002,"smallsai","man"));//資料元素

list.add(new users(003,"菜虛鯤","woman"));//資料元素

woman.add(list.get(2));//003,"菜虛鯤","woman"三個資料項構成的乙個資料元素

上述表中的三條使用者資訊的記錄就是資料(也可能多表多集合)。這些資料一般都是使用者輸入或者是自定義構造完成。當然,還有一些影象、聲音也是資料。

抽象資料型別(adt):抽象資料型別(adt)是乙個實現包括儲存資料元素的儲存結構以及實現基本操作的演算法。使得只研究和使用它的結構而不用考慮它的實現細節成為可能。比如我們使用arraylist。二叉樹等等只需要new 乙個而不需要去具體考慮他的內部實現方式。只需要了解他的api和性質即可。其實各個框架的思想也是這樣,對資料、介面進行封裝、繼承使得我們只需要會用而不需要弄清楚它的具體實現細節。

邏輯結構:資料元素之間的邏輯關係。邏輯結構分為線性結構非線性結構。線性結構就是順序表、鍊錶之類。而非線性就是集合、樹、圖這些結構。

儲存結構:資料結構在計算機中的表示(又稱映像,也稱物理結構),儲存結構主要分為順序儲存鏈式儲存索引儲存雜湊(雜湊)儲存

資料的運算:施加在資料上的運算包括運算的定義實現,運算的定義基於邏輯結構,運算的實現基於儲存結構。

通常複雜度更多描述的是乙個量級程度而很少用具體數字描述。

概念:是對乙個演算法在執行過程中臨時占用儲存空間大小的量度,記做s(n)=o(f(n))

概念:電腦科學中,演算法的時間複雜度是乙個函式,它定性描述了該演算法的執行時間。這是乙個關於代表演算法輸入值的字串的長度的函式。時間複雜度常用大o符號表述,不包括這個函式的低階項和首項係數。使用這種方式時,時間複雜度可被稱為是漸近的,它考察當輸入值大小趨近無窮時的情況。

時間複雜度的排序:o(1) < o(logn) < o(n) < o(nlogn) < o(n^2^) < o(n^3^) < o(2^n^)常見時間複雜度:對於時間複雜度,很多人的概念是比較模糊的。下面舉例子說明一些時間複雜度。

o(1):常數函式

o(logn):對數函式

分析:假設執行t次使得i=n;有2^t^=n; t=log~2~n,為log級別時間複雜度為o(logn)。

o(n):線性函式

o(nlogn):

for (int j=1;jo(n^2^)

當然如果同樣是n=10000.那麼不同時間複雜度額演算法執行次數、時間也不同。具體n

執行次數

o(1)

10000

1o(log~2~n)

10000

14o( n^1/2^)

10000

100o(n)

10000

10000

o(nlog~2~n)

10000

140000

o(n^2^)

10000

100000000

o(n^3^)

10000

1000000000000

時間複雜度計算

時間複雜度計算一般步驟

2、計算語句執行的數量級

3、用o表示結果

兩個規則:

當然,後面會一起學習一些常見的資料結構和常見的演算法,進行複雜度剖析。至於緒論,就先介紹這些,下面會先介紹線性表和遞迴演算法。

資料結構與演算法(緒論)

作為乙個準程式設計師,在讀本科的時候,就一直被老師不停的灌輸資料機構與演算法的重要性,但是好像我們從來就沒遇到過真正棘手的需要通過資料結構去解決的問題,可能唯一再聽到它的時候就是找工作實習的時候會被面試官提問,因此我們似乎覺得資料結構沒那麼重要,而且又因為各種程式語言,尤其是python,各種內建的...

資料結構與演算法 緒論

一般法則 法則1 for迴圈 乙個for迴圈的執行時間至多是該for迴圈內部那些語句的執行時間乘以迭代的次數。法則2 巢狀的for迴圈 從裡向外分析這些迴圈。在一組巢狀迴圈內部的一些語句總的執行時間為該語句的執行時間乘以該組所有的for迴圈的大小的乘積 例如,下列程式片斷為o n2 for i 0 ...

演算法與資料結構緒論

資料結構是一門研究非數值計算的程式設計問題中的操作物件,以及它們之間的關係和操作等相關問題的學科 程式設計 資料結構 演算法 傳統上,我們把資料結構分為邏輯結構和物理結構 邏輯結構 是指資料物件中資料元素之間的相互關係,也是我們今後最需要關注和討論的問題。物理結構 是指資料的邏輯結構在計算機中的儲存...