【課堂回憶筆記】資料結構——陣列
摘要
介紹陣列的資料結構及其應用:
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】
字串匹配
明天再寫