當前位置:編程學習大全網 - 編程語言 - 什麽是算法與數據結構

什麽是算法與數據結構

算法(Algorithm)是壹系列解決問題的清晰指令,也就是說,能夠對壹定規範的輸入,在有限時間內獲得所要求的輸出。如果壹個算法有缺陷,或不適合於某個問題,執行這個算法將不會解決這個問題。不同的算法可能用不同的時間、空間或效率來完成同樣的任務。壹個算法的優劣可以用空間復雜度與時間復雜度來衡量。

算法可以理解為有基本運算及規定的運算順序所構成的完整的解題步驟。或者看成按照要求設計好的有限的確切的計算序列,並且這樣的步驟和序列可以解決壹類問題。

壹個算法應該具有以下五個重要的特征:

1、有窮性: 壹個算法必須保證執行有限步之後結束;

2、確切性: 算法的每壹步驟必須有確切的定義;

3、輸入:壹個算法有0個或多個輸入,以刻畫運算對象的初始情況,所謂0個輸入是指算法本身定除了初始條件;

4、輸出:壹個算法有壹個或多個輸出,以反映對輸入數據加工後的結果。沒有輸出的算法是毫無意義的;

5、可行性: 算法原則上能夠精確地運行,而且人們用筆和紙做有限次運算後即可完成。

計算機科學家尼克勞斯-沃思曾著過壹本著名的書《數據結構十算法= 程序》,可見算法在計算機科學界與計算機應用界的地位。

數據結構是計算機存儲、組織數據的方式。數據結構是指相互之間存在壹種或多種特定關系的數據元素的集合。通常情況下,精心選擇的數據結構可以帶來更高的運行或者存儲效率。數據結構往往同高效的檢索算法和索引技術有關。

壹般認為,壹個數據結構是由數據元素依據某種邏輯聯系組織起來的。對數據元素間邏輯關系的描述稱為數據的邏輯結構;數據必須在計算機內存儲,數據的存儲結構是數據結構的實現形式,是其在計算機內的表示;此外討論壹個數據結構必須同時討論在該類數據上執行的運算才有意義。

在許多類型的程序的設計中,數據結構的選擇是壹個基本的設計考慮因素。許多大型系統的構造經驗表明,系統實現的困難程度和系統構造的質量都嚴重的依賴於是否選擇了最優的數據結構。許多時候,確定了數據結構後,算法就容易得到了。有些時候事情也會反過來,我們根據特定算法來選擇數據結構與之適應。不論哪種情況,選擇合適的數據結構都是非常重要的。

選擇了數據結構,算法也隨之確定,是數據而不是算法是系統構造的關鍵因素。這種洞見導致了許多種軟件設計方法和程序設計語言的出現,面向對象的程序設計語言就是其中之壹。

在計算機科學中,數據結構是壹門研究非數值計算的程序設計問題中計算機的操作對象(數據元素)以及它們之間的關系和運算等的學科,而且確保經過這些運算後所得到的新結構仍然是原來的結構類型。

“數據結構”作為壹門獨立的課程在國外是從1968年才開始設立的。 1968年美國唐·歐·克努特教授開創了數據結構的最初體系,他所著的《計算機程序設計技巧》第壹卷《基本算法》是第壹本較系統地闡述數據的邏輯結構和存儲結構及其操作的著作。“數據結構”在計算機科學中是壹門綜合性的專業基礎課。數據結構是介於數學、計算機硬件和計算機軟件三者之間的壹門核心課程。數據結構這壹門課的內容不僅是壹般程序設計(特別是非數值性程序設計)的基礎,而且是設計和實現編譯程序、操作系統、數據庫系統及其他系統程序的重要基礎。

計算機是壹門研究用計算機進行信息表示和處理的科學。這裏面涉及到兩個問題:

信息的表示

信息的處理

而信息的表示和組又直接關系到處理信息的程序的效率。隨著計算機的普及,信息量的增加,信息範圍的拓寬,使許多系統程序和應用程序的規模很大,結構又相當復雜。因此,為了編寫出壹個“好”的程序,必須分析待處理的對象的特征及各對象之間存在的關系,這就是數據結構這門課所要研究的問題。眾所周知,計算機的程序是對信息進行加工處理。在大多數情況下,這些信息並不是沒有組織,信息(數據)之間往往具有重要的結構關系,這就是數據結構的內容。數據的結構,直接影響算法的選擇和效率。

計算機解決壹個具體問題時,大致需要經過下列幾個步驟:首先要從具體問題中抽象出壹個適當的數學模型,然後設計壹個解此數學模型的算法(Algorithm),最後編出程序、進行測試、調整直至得到最終解答。尋求數學模型的實質是分析問題,從中提取操作的對象,並找出這些操作對象之間含有的關系,然後用數學的語言加以描述。計算機算法與數據的結構密切相關,算法無不依附於具體的數據結構,數據結構直接關系到算法的選擇和效率。運算是由計算機來完成,這就要設計相應的插入、刪除和修改的算法 。也就是說,數據結構還需要給出每種結構類型所定義的各種運算的算法。

數據是對客觀事物的符號表示,在計算機科學中是指所有能輸入到計算機中並由計算機程序處理的符號的總稱。

數據元素是數據的基本單位,在計算機程序中通常作為壹個整體考慮。壹個數據元素由若幹個數據項組成。數據項是數據的不可分割的最小單位。有兩類數據元素:壹類是不可分割的原子型數據元素,如:整數"5",字符 "N" 等;另壹類是由多個款項構成的數據元素,其中每個款項被稱為壹個數據項。例如描述壹個學生的信息的數據元素可由下列6個數據項組成。其中的出身日期又可以由三個數據項:"年"、"月"和"日"組成,則稱"出身日期"為組合項,而其它不可分割的數據項為原子項。

關鍵字指的是能識別壹個或多個數據元素的數據項。若能起唯壹識別作用,則稱之為 "主" 關鍵字,否則稱之為 "次" 關鍵字。

數據對象是性質相同的數據元素的集合,是數據的壹個子集。數據對象可以是有限的,也可以是無限的。

數據處理是指對數據進行查找、插入、刪除、合並、排序、統計以及簡單計算等的操作過程。在早期,計算機主要用於科學和工程計算,進入八十年代以後,計算機主要用於數據處理。據有關統計資料表明,現在計算機用於數據處理的時間比例達到80%以上,隨著時間的推移和計算機應用的進壹步普及,計算機用於數據處理的時間比例必將進壹步增大。

數據結構是指同壹數據元素類中各數據元素之間存在的關系。數據結構分別為邏輯結構、存儲結構(物理結構)和數據的運算。數據的邏輯結構是對數據之間關系的描述,有時就把邏輯結構簡稱為數據結構。邏輯結構形式地定義為(K,R)(或(D,S)),其中,K是數據元素的有限集,R是K上的關系的有限集。

數據元素相互之間的關系稱為結構。有四類基本結構:集合、線性結構、樹形結構、圖狀結構(網狀結構)。樹形結構和圖形結構全稱為非線性結構。集合結構中的數據元素除了同屬於壹種類型外,別無其它關系。線性結構中元素之間存在壹對壹關系,樹形結構中元素之間存在壹對多關系,圖形結構中元素之間存在多對多關系。在圖形結構中每個結點的前驅結點數和後續結點數可以任意多個。

數據結構在計算機中的表示(映像)稱為數據的物理(存儲)結構。它包括數據元素的表示和關系的表示。數據元素之間的關系有兩種不同的表示方法:順序映象和非順序映象,並由此得到兩種不同的存儲結構:順序存儲結構和鏈式存儲結構。順序存儲方法:它是把邏輯上相鄰的結點存儲在物理位置相鄰的存儲單元裏,結點間的邏輯關系由存儲單元的鄰接關系來體現,由此得到的存儲表示稱為順序存儲結構。順序存儲結構是壹種最基本的存儲表示方法,通常借助於程序設計語言中的數組來實現。鏈接存儲方法:它不要求邏輯上相鄰的結點在物理位置上亦相鄰,結點間的邏輯關系是由附加的指針字段表示的。由此得到的存儲表示稱為鏈式存儲結構,鏈式存儲結構通常借助於程序設計語言中的指針類型來實現。索引存儲方法:除建立存儲結點信息外,還建立附加的索引表來標識結點的地址。散列存儲方法:就是根據結點的關鍵字直接計算出該結點的存儲地址。

數據結構中,邏輯上(邏輯結構:數據元素之間的邏輯關系)可以把數據結構分成線性結構和非線性結構。線性結構的順序存儲結構是壹種隨機存取的存儲結構,線性表的鏈式存儲結構是壹種順序存取的存儲結構。線性表若采用鏈式存儲表示時所有結點之間的存儲單元地址可連續可不連續。邏輯結構與數據元素本身的形式、內容、相對位置、所含結點個數都無關。

算法的設計取決於數據(邏輯)結構,而算法的實現依賴於采用的存儲結構。數據的運算是在數據的邏輯結構上定義的操作算法,如檢索、插入、刪除、更新的排序等。

  • 上一篇:scratch中的坐標
  • 下一篇:命題作文我的拿手好戲怎麽寫
  • copyright 2024編程學習大全網