計算機要工作,首先要有資料,資料就是計算機加工和處理的物件;簡單的分類一下,資料分為數值資料和非數值資料;數值資料主要應用於工程和科學計算;而非數值資料,比如聲音,影象等在計算機中是以二進位制形式存放在物理介質上。每個二進位制位為乙個bit,8個二進位制位為乙個byte(位元組)。
要談資料結構,就必須了解資料型別(即一組值的集合和定義在該集合上的一組操作的總稱。);資料型別分為原子資料型別和結構資料型別(復合資料型別)。所謂的結構資料型別就是指由原子資料型別或者由其他結構資料型別組成的資料型別。資料結構是指計算機儲存組織資料的方式。資料結構的分類如下:線性結構(佇列,鍊錶,棧等等);非線性結構(樹和圖)。
演算法的設計取決於資料結構,而演算法的實現依賴於資料結構。資料的操作是在資料結構之上定義的操作演算法。所以說演算法的設計離不開資料結構,但是,演算法的設計也有本身的技巧和方法,下面是幾種常見的演算法設計策略。
1.貪婪演算法
2.分治演算法
3.動態規劃法
4.回溯法
5.概率演算法
乙個演算法設計出來之後,怎麼樣才知道效率如何,當然不能拿到機子上跑一遍吧,再說,即使拿到機子上跑一遍,因為機子配置等等原因,效率也是不一樣的。所以要驗證乙個演算法的效率如何一般都使用事前估計的方法。乙個演算法的好壞取決於兩方面,第一:時間;第二:空間;所以把演算法的複雜度分為時間複雜度和空間複雜度。這裡簡單介紹一下時間複雜度,空間複雜度可以模擬。
**如下:
for (int a = 0; a != num1; a++) }
上面的**出現了迴圈語句的巢狀,所以時間複雜度為o(num1*num2)。
折半查詢的演算法**如下:
node* find(const type& x, node* ptr)
else if(x < ptr->data)
return find(x,ptr->leftchild);
else if(x > ptr->data)
return find(x,ptr->rightchild);
else return ptr;}
這個函式採用了遞迴的形式。 演算法的時間複雜度為o(log2n)。
常見的程式時間複雜度如下圖:
資料結構與演算法基礎知識(1)
資料結構的定義與分類 邏輯結構 物理結構 資料結構就是關係,是資料元素之間存在的一種或者多種特定關係的集合。資料結構分為兩類 a.邏輯結構 b.物理結構 邏輯結構 資料物件中資料元素之間的相互關係。物理結構 資料的邏輯結構在計算機中的儲存形式。邏輯結構分為以下四類 1.集合結構 集合中的元素同屬於乙...
資料結構和演算法基礎知識
準備系統完整的複習資料結構和演算法,開始的東西很基礎 簡單,但也寫一下,以後要回顧直接看這一篇省事。程式 資料結構 演算法 資料結構 相互之間存在一種或多種特定關係的資料元素的集合。資料物件 具有相同性質的資料元素的幾何,是資料的乙個子集。資料的邏輯結構 集合 元素除同屬一集合無其他關係。線性結構 ...
資料結構基礎知識
時間複雜度和空間複雜度 同一問題可用不同演算法解決,而乙個演算法的質量優劣將影響到演算法乃至程式的效率。演算法分析的目的在於選擇合適演算法和改進演算法。乙個演算法的評價主要從時間複雜度和空間複雜度來考慮。1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測...