數據結構與算法-揭祕

什麼是數據結構?

字面意思就是研究數據的一種方法,就是研究數據在程序中組織的一種方法。數據結構就是,元素與元素有一種或者多種關係的集合,在軟件界有一種比較普片的公式就是程序 = 數據結構 + 算法。

常用的有哪些數據結構?

(1)集合(Set)   和數學的集合一樣,具有唯一性,確定性,無序性。
(2)線性結構         典型的數據庫二維表,一對一的關係。
(3)樹形結構         就有一對多的關係,族譜就是典型的樹形結構。
(4)圖形結構        具有多對多的關係,典型的就是交通路線圖。

什麼是算法?

字面意思就是計算的方法,解決問題的方案,就是對莫一特定問題求解過程的一種描述,是指令的有限序列。用源代碼體現,算法就是編程的體現。一個算法必須要具備以下幾個特徵:
(1)有窮性。算法在執行有窮步驟之後結束,不會永遠的執行下去,這樣就成死循環了。
(2)確定性。算法執行每一步都具有確切的含義,無二義,即每次輸入相同,輸出必然相同。
(3)輸入。一個算法必然有一個或者多個輸入,不然算法就沒什麼意思了。
(4)輸出。一個算法有一個或者多個輸出,算法就是爲了得到輸出的數據,沒有輸出的數據算法,叫不上算法。
(5)能行性。算法中的每一步都可以通過已經實現的基本運算的有限次運行來實現。這與有窮性息息相關。

怎樣是評價一個算法的好壞?

(1)正確性,(2)健壯性,(3)可讀性,(4)運行時間,(5)佔用空間。
  前三個都比較好理解,與程序相關的就是運行時間和佔用空間了。而隨着硬件越來越貴,我們可以增加硬件設備,面對海量的數據,我們尤其關心的就是運行時間了,這此時,計算機運行時間大概由下面幾個條件來決定了。
         1、硬件條件。包括所使用的處理器的類型和速度(比如,使用雙核處理器還是單核處理器) 、可使用的內存(緩存和 RAM)以及可使用的外存等。 
         2、實現算法所使用的計算機語言。實現算法的語言級別越高,其執行效率相對越低。 
         3、所使用的語言的編譯器/解釋器。一般而言,編譯的執行效率高於解釋,但解釋具有更大的靈活性。 
         4、所使用的操作系統軟件。操作系統的功能主要是管理計算機系統的軟件和硬件資源,爲計算機用戶方便使用計算機提供一個接口。各種語言處理程序如編譯程序、解釋程序等和應用程序都在操作系統的控制下運行。

       評價運行時間就是一個算法時間複雜度,  一個算法的時間複雜度(Time Complexity)是指該算法的運行時間與問題規模的對應關係。

算法中的基本操作一般是指算法中最深層循環內的語句,因此,算法中基本操作語句的頻度是問題規模n的某個函數f(n),記作:T(n)=O(f(n))。其中“O”表示隨問題規模n的增大,算法執行時間的增長率和f(n)的增長率相同,或者說,用“O”符號表示數量級的概念。  這些 都只是一些理論的概念,我們這裏用計時器來證明這個理論概念。

如:

①x=n; /*n>1*/ 
y=0; 
while(y < x) 

y=y+1; ① 

從理論上分析這是一重循環的程序,while 循環的循環次數爲 n,所以,該程序段中語句①的頻度是 n,則程序段的時間複雜度是 T(n)=O(n) 。

評價運行時間就是一個算法時間複雜度,  一個算法的時間複雜度(Time Complexity)是指該算法的運行時間與問題規模的對應關係。

算法中的基本操作一般是指算法中最深層循環內的語句,因此,算法中基本操作語句的頻度是問題規模n的某個函數f(n),記作:T(n)=O(f(n))。其中“O”表示隨問題規模n的增大,算法執行時間的增長率和f(n)的增長率相同,或者說,用“O”符號表示數量級的概念。  這些 都只是一些理論的概念,我們這裏用計時器來證明這個理論概念。

如:

①x=n; /*n>1*/ 
y=0; 
while(y < x) 

y=y+1; ① 

從理論上分析這是一重循環的程序,while 循環的循環次數爲 n,所以,該程序段中語句①的頻度是 n,則程序段的時間複雜度是 T(n)=O(n) 。

由此證明,其中算法的時間複雜度確實是接近於O(n²)

③x=n; /*n>1*/ 
y=0; 
while(x >= (y+1)*(y+1)) 

y=y+1; ① 
}

這是一重循環的程序,while 循環的循環次數爲 n,所以,該程序段中語句①的頻度是 n,則程序段的時間複雜度是 T(n)=O(√n) 。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章