1. 程式人生 > 其它 >【課堂回憶筆記】資料結構——陣列

【課堂回憶筆記】資料結構——陣列

介紹陣列的資料結構及其應用: 1、多項式,特別是稀疏多項式如何儲存和運算; 2、稀疏矩陣:稀疏矩陣以三元組的形式儲存,並且有兩種轉置的演算法; 3、字串的抽象資料型別,重點介紹模式匹配的KMP演算法。

摘要

介紹陣列的資料結構及其應用:

1、多項式,特別是稀疏多項式如何儲存和運算;

2、稀疏矩陣:稀疏矩陣以三元組的形式儲存,並且有兩種轉置的演算法;

3、字串的抽象資料型別,重點介紹模式匹配的KMP演算法。

詳細的程式碼或分析對應的網址將放在本文末尾

陣列

廣義陣列是一組<index, value>構成的集合,在記憶體中不一定連續。

而我們狹義上的陣列就是指有序的列表,例如(Mon, Tues, Wen, Thur, Fri, Sat, Sun),索引是從0開始的連續自然數

有序表的資料結構程式碼實現見網址【1】

多項式的儲存和運算

傳統的, 可以開闢一個數組, 陣列的每一個元素對應著多項式的一個項, 其索引表示該項的指數, 值代表該項的係數。

或者:

但對於稀疏多項式,即很多項的係數為0,例如2*x^1000 + 1, 傳統的方法將會帶來很多空間開銷。

於是可以通過二元組<coef, exp>來儲存多項式

其加法運算和空間擴充套件函式如下:

稀疏矩陣

普通的矩陣通過二維陣列的方式儲存

對於稀疏矩陣,即矩陣中很多元素是0, 二維的儲存方式會帶來很大的空間開銷

於是採用三元組<row, col, value>表示矩陣中的非零元素,從而儲存稀疏矩陣的資訊。

對於矩陣的置換,一種方法為:

兩層迴圈——遍歷原始排列中元素的col和所有元素

該方法的時間開銷為O(cols*terms)

另一種方法——fastTranspose algorithm,時間開銷為O(cols + terms)

演算法步驟:

1、計算每一列的元素個數,並儲存在一個數組中 colNum[]

2、利用每一列的元素個數求得每一列第一個元素在新排列中的位置 colIndex[]

3、一層迴圈,對所有元素, 每次迴圈, 根據該元素對應的colIndex[]的元素值,得到該元素在新排列中的位置,對應colIndex[]的元素+1

詳細分析見網址【2】

字串匹配

明天再寫