㈠ 什麼是數據結構和演算法學演算法還需要去了解數據結構嗎
你這理解不完全正確。
因為數據結構不只是內存中數春慎據的排列,它是對數據的一種組織方式,就像圖書館要排書一樣,是為了便於操作,同時它本身也集成了對通用操作:比如查找、比較等的支持。數組不是一種數據結構,而是一種數據類型。一個完整的數據結構包括邏輯結構和存儲結構。通常選擇了數據結構,演算法也隨之確定,是數據而不是演算法是系統構造的關鍵因素。
因此在語言實現上,數據結構通常也會包含與之相對應的演算法集合,這些演算法是指基本演算法:查找、索引、比較等。
數據結構的邏輯結構和硬體是沒有關系的,而其存儲結構受到計算機硬體系統工作談森蠢方式的影響,通常這點影響在於數據時順序存儲還是離散存儲。演算法的基礎是數含陪據結構。只有指定明確的數據結構,演算法才能設計完成,脫離數據結構,演算法是無法,也不可能成立的。因為不需要數據的演算法就不是一個有效的計算機演算法,演算法中任何對數據的組織形式都可以被稱之為數據結構。
2.數據結構在編程中的地位是極其重要的,是一個程序實現的基礎中的基礎,在此基礎上才能構建演算法。通常而言,你不了解什麼高深的演算法,一樣能完成工作,但是如果你不了解基本的數據結構,那麼可以說,你根本就不能完成一個任何有實質性內容的程序。Donald Ervin Knuth教授在其《計算機程序設計藝術》的第一卷《基本演算法》中花費的絕大部分的篇幅去論述數據結構。由此可見數據結構對演算法的重要性。
㈡ 什麼是演算法與數據結構
演算法(Algorithm)是一系列解決問題的清晰指令,也就是說,能夠對一定規范的輸入,在有限時間內獲得所要求的輸出。如果一個演算法有缺陷,或不適合於某個問題,執行這個演算法將不會解決這個問題。不同的演算法可能用不同的時間、空間或效率來完成同樣的任務。一個演算法的優劣可以用空間復雜度與時間復雜度來衡量。
演算法可以理解為有基本運算及規定的運算順序所構成的完整的解題步驟。或者看成按照要求設計好的有限的確切的計算序列,並且這樣的步驟和序列可以解決一類問題。
一個演算法應該具有以下五個重要的特徵:
1、有窮性: 一個演算法必須保證執行有限步之後結束;
2、確切性: 演算法的每一步驟必須有確切的定義;
3、輸入:一個演算法有0個或多個輸入,以刻畫運算對象的初始情況,所謂0個輸入是指演算法本身定除了初始條件;
4、輸出:一個演算法有一個或多個輸出,以反映對輸入數據加工後的結果。沒有輸出的演算法是毫無意義的;
5、可行性: 演算法原則上能夠精確地運行,而且人們用筆和紙做有限次運算後即可完成。
計算機科學家尼克勞斯-沃思曾著過一本著名的書《數據結構十演算法= 程序》,可見演算法在計算機科學界與計算機應用界的地位。
數據結構是計算機存儲、組織數據的方式。數據結構是指相互之間存在一種或多種特定關系的數據元素的集合。通常情況下,精心選擇的數據結構可以帶來更高的運行或者存儲效率。數據結構往往同高效的檢索演算法和索引技術有關。
一般認為,一個數據結構是由數據元素依據某種邏輯聯系組織起來的。對數據元素間邏輯關系的描述稱為數據的邏輯結構;數據必須在計算機內存儲,數據的存儲結構是數據結構的實現形式,是其在計算機內襪兆的表示;此外討論一個數據結構必須同時討論在該類數據上執行的運算才有意義。
在許多類型的程序的設計中,數據結構的選擇是一個基本的設計考慮因素。許多大型系統的構造經驗表明,系統實現的困難程度和系統構造的質量都嚴重的依賴於是否選擇了最優的數據結構。許多時候,確定了數據結構後,演算法就容易得到了。有些時候事情也會反過來,我們根據特定演算法來選擇數據結構與之適應。不論哪種情況,選擇合適的數據結構都是非常重要的。
選擇了數據結構,演算法也隨之確定,是數據而不是演算法是系統構造的關鍵因素。這種洞見導致了許多種軟體設計方法和程序設計語言的出現,面向對象的程序設計語言就是其中之一。
在計算機科學中,數據結構是一門研究非數值計算的程序設計問題中計算機的操作對象(數據元素)以及它們之間的關系和運算等的學科,而且確保經過這些運算後所得到的新結構仍然是原來的結構類型。
「數據結構」作為一門獨立的課程在國外是從1968年才開始設立的。 1968年美國唐·歐·克努特教授開創了數據結構的最初體系,他所著的《計算機程序設計技巧》第一卷《基本演算法》是第一本較系統地闡述數據的邏輯結構和存儲結構及其操作的著作。「數據結構」在計算機科學中是一門綜合性的專業基礎課。數據結構是介於數學、計算機硬體和計算機軟體三者之間的一門核心課程。數據結構這一門課的內容不僅是一般程序設計(特別是非數值性程序設計)的基礎,而且是設計和實現編譯程序、操作系統、資料庫系統及其他系統程序的重要基礎。
計算機是一門研究用計算機進行信息表示和處理的科學。這裡面涉及到兩個問題:
信息的表示
信息的處理
而信息的表示和組又直接關繫到處理信息的程序的效率。隨著計算機的普及,信息量的增加,信息范圍的拓寬,使許多系統程序和應用程序的規模很大,結構又相當復雜。因此,為了編寫出一個「好」的程序,必須分析待處理的對象的特徵及各對象之間存在的關系,這就是數據結構這門課所要研究的問題。眾所周知,計算機的程序是對信息進行加工處理。在大多數情況下,這些信息並不是沒有組織,信息(數據)之間往往具有重要的結構關系,這就是數據結構的內容。數據的結構,直接影響演算法的選擇和效率。
計算機解決一個具體問題時,告燃租大致需要經過下列幾個步驟:首先要從具體問題中抽象出一個適當的數學模型,然後設計一個解此數學模型的演算法(Algorithm),最後編出程序、進行測試、調整直至得到最終解答。尋求數學模型的實質是分析問題,從中提取操作的對象,並找出這些操作對象之間含有的關系,然後用數學的語言加以描述。計算機演算法與數據的結構段行密切相關,演算法無不依附於具體的數據結構,數據結構直接關繫到演算法的選擇和效率。運算是由計算機來完成,這就要設計相應的插入、刪除和修改的演算法 。也就是說,數據結構還需要給出每種結構類型所定義的各種運算的演算法。
數據是對客觀事物的符號表示,在計算機科學中是指所有能輸入到計算機中並由計算機程序處理的符號的總稱。
數據元素是數據的基本單位,在計算機程序中通常作為一個整體考慮。一個數據元素由若干個數據項組成。數據項是數據的不可分割的最小單位。有兩類數據元素:一類是不可分割的原子型數據元素,如:整數"5",字元 "N" 等;另一類是由多個款項構成的數據元素,其中每個款項被稱為一個數據項。例如描述一個學生的信息的數據元素可由下列6個數據項組成。其中的出身日期又可以由三個數據項:"年"、"月"和"日"組成,則稱"出身日期"為組合項,而其它不可分割的數據項為原子項。
關鍵字指的是能識別一個或多個數據元素的數據項。若能起唯一識別作用,則稱之為 "主" 關鍵字,否則稱之為 "次" 關鍵字。
數據對象是性質相同的數據元素的集合,是數據的一個子集。數據對象可以是有限的,也可以是無限的。
數據處理是指對數據進行查找、插入、刪除、合並、排序、統計以及簡單計算等的操作過程。在早期,計算機主要用於科學和工程計算,進入八十年代以後,計算機主要用於數據處理。據有關統計資料表明,現在計算機用於數據處理的時間比例達到80%以上,隨著時間的推移和計算機應用的進一步普及,計算機用於數據處理的時間比例必將進一步增大。
數據結構是指同一數據元素類中各數據元素之間存在的關系。數據結構分別為邏輯結構、存儲結構(物理結構)和數據的運算。數據的邏輯結構是對數據之間關系的描述,有時就把邏輯結構簡稱為數據結構。邏輯結構形式地定義為(K,R)(或(D,S)),其中,K是數據元素的有限集,R是K上的關系的有限集。
數據元素相互之間的關系稱為結構。有四類基本結構:集合、線性結構、樹形結構、圖狀結構(網狀結構)。樹形結構和圖形結構全稱為非線性結構。集合結構中的數據元素除了同屬於一種類型外,別無其它關系。線性結構中元素之間存在一對一關系,樹形結構中元素之間存在一對多關系,圖形結構中元素之間存在多對多關系。在圖形結構中每個結點的前驅結點數和後續結點數可以任意多個。
數據結構在計算機中的表示(映像)稱為數據的物理(存儲)結構。它包括數據元素的表示和關系的表示。數據元素之間的關系有兩種不同的表示方法:順序映象和非順序映象,並由此得到兩種不同的存儲結構:順序存儲結構和鏈式存儲結構。順序存儲方法:它是把邏輯上相鄰的結點存儲在物理位置相鄰的存儲單元里,結點間的邏輯關系由存儲單元的鄰接關系來體現,由此得到的存儲表示稱為順序存儲結構。順序存儲結構是一種最基本的存儲表示方法,通常藉助於程序設計語言中的數組來實現。鏈接存儲方法:它不要求邏輯上相鄰的結點在物理位置上亦相鄰,結點間的邏輯關系是由附加的指針欄位表示的。由此得到的存儲表示稱為鏈式存儲結構,鏈式存儲結構通常藉助於程序設計語言中的指針類型來實現。索引存儲方法:除建立存儲結點信息外,還建立附加的索引表來標識結點的地址。散列存儲方法:就是根據結點的關鍵字直接計算出該結點的存儲地址。
數據結構中,邏輯上(邏輯結構:數據元素之間的邏輯關系)可以把數據結構分成線性結構和非線性結構。線性結構的順序存儲結構是一種隨機存取的存儲結構,線性表的鏈式存儲結構是一種順序存取的存儲結構。線性表若採用鏈式存儲表示時所有結點之間的存儲單元地址可連續可不連續。邏輯結構與數據元素本身的形式、內容、相對位置、所含結點個數都無關。
演算法的設計取決於數據(邏輯)結構,而演算法的實現依賴於採用的存儲結構。數據的運算是在數據的邏輯結構上定義的操作演算法,如檢索、插入、刪除、更新的排序等。
㈢ 數據結構與演算法是什麼推薦一本數據結構的書,謝了
數據結構主要研究組織大量數據的方法,而演算法分析則是對演算法運行時間的評估。隨著計算機的速度越來越快,對於能夠處理大量輸入數據的程序的需求變得日益急切。可是,由於在輸入量很大的時候,程序的低效率現象變得非常明顯,因此這又要求對效率問題給予更仔細的關注。通過在實際編程之前對演算法的分析,學生可以決定一個特定的解法是否可行。例如,學生在本書中將讀到一些特定的問題並看到精心的實現方法是如何把對大量數據的時間限制從16年減至不到1秒的。因此,若無運行時間的闡釋,就不會有演算法和數據結構的提出。
我所選擇的教材是《數據結構與演算法分析——C語言描述》(原書第2版),英文版的名稱是《Data Structures and Algorithm Analysis in C》,作者是:(美)Mark Allen Weiss。原書曾被評為20世紀頂尖的30部計算機著作之一。之所以選這本書,還因為它的簡體中文版翻譯得相當不錯,幾乎沒有給我的閱讀帶來什麼障礙。^_^
這本教科書所使用的是C語言,也許很多人會說C語言已經過時了,但是,我認為在數據結構的學習中,應該用盡量簡單的語言,以免進入了語言的細枝末節中,反而沖淡了主題。實際上在國外的許多大學中(甚至中學),數據結構和演算法分析的課程是選用Scheme的,例如MIT麻省理工大學極其著名的SICP課程。呵呵,語言又能說明什麼呢?
書中詳細介紹了當前流行的論題和新的變化,討論了演算法設計技巧,並在研究演算法的性能、效率以及對運行時間分析的基礎上考查了一些高級數據結構,從歷史的角度和近年的進展對數據結構的活躍領域進行了簡要的概括。由於本書選材新穎,方法實用,題例豐富,取捨得當。本書的目的是培養學生良好的程序設計技巧和熟練的演算法分析能力,使得他們能夠開發出高效率的程序。從服務於實踐又鍛煉學生實際能力出發,書中提供了大部演算法的C程序和偽碼常式,但並不是全部。一些程序可從互聯網上獲得。
本書是《Data Structures and Algorithm Analysis in C》一書第2版的簡體中譯本。原書曾被評為20世紀頂尖的30部計算機著作之一,作者Mark Allen Weiss在數據結構和演算法分析方面卓有建樹,他的數據結構和演算法分析的著作尤其暢銷,並受到廣泛好評.已被世界500餘所大學用作教材。
在本書中,作者更加精煉並強化了他對演算法和數據結構方面創新的處理方法。通過C程序的實現,著重闡述了抽象數據類型的概念,並對演算法的效率、性能和運行時間進行了分析。
全書特點如下:
●專用一章來討論演算法設計技巧,包括貪婪演算法、分治演算法、動態規劃、隨機化演算法以及回溯演算法
●介紹了當前流行的論題和新的數據結構,如斐波那契堆、斜堆、二項隊列、跳躍表和伸展樹
●安排一章專門討論攤還分析,考查書中介紹的一些高級數據結構
●新開辟一章討論高級數據結構以及它們的實現,其中包括紅黑樹、自頂向下伸展樹。treap樹、k-d樹、配對堆以及其他相關內容
●合並了堆排序平均情況分析的一些新結果
本書是國外數據結構與演算法分析方面的標准教材,介紹了數據結構(大量數據的組織方法)以及演算法分析(演算法運行時間的估算)。本書的編寫目標是同時講授好的程序設計和演算法分析技巧,使讀者可以開發出具有最高效率的程序。 本書可作為高級數據結構課程或研究生一年級演算法分析課程的教材,使用本書需具有一些中級程序設計知識,還需要離散數學的一些背景知識。
㈣ 學數據結構和演算法之前要先學什麼
很顯然你首先需要會一門編程語言。數據結構可以在不同的語言下實現,你可以看常用的數據結構教材,有的基於C,有的基於JAVA,所以在學習數據結構與演算法之前,先學會一門語言是很有必要的事情。
因為數據結構書中很多內容用到的都是C語言偽代碼,如果不懂C語言的話應該是看不懂的。多了解一下點C語言、數據類型、循環分支、結構體、指針等基本知識。一般來說,學習完c語言之後,效率會比較高點,另外數學好的話對理解演算法是有好處的,動態規劃啊,決策樹啊之類的,具體的知識可以去小碼哥李明傑了解。
因為數據結構是需要編程實現的。在內容上,數據結構很大一部分是獨立的,但也有一部分與其它課程有關,比如離散數學,線性代數等,不過也沒多大影響,書上都帶有詳細介紹。數據結構理論性很強,需要多動手寫代碼,理解好原理,而且會編程實現,這兩方面都很重要。
㈤ 演算法與數據結構主要學的是什麼
演算法咐唯團和數據結構,有這方面的課程視 頻,你可以看一看山哪,
應衡橘該適合你。
希望可以幫到你。
記得採納呀
㈥ 數據結構和演算法學什麼
數據結構薯宏是研究數據如何分布排列的方法,我們的數據如果雜亂無章,在數讓冊數據量大的時候會導致搜索應用起來,耗費時間,有序有效地排列,可以大大提高效率。演算法是指我們解決常見問題時,如何應用計算機所能適應的數學方法。數據結構和演算法是軟體程序的靈魂,你無論用任何程序語言編程都離不開數據結構和演算法.聽人說這門科的補考率是計算機專滑鄭業課中最高的,它以思維訓練為主,學好這門科應先熟悉編程語言和相關數學知識!
㈦ 什麼是數據結構和演算法
數據結構,Data_Structure,其中D是數據元素的集合,R是該集合中所有元素之間的關系的有限集合。數據結構則是指相互之間存在一種或多種特定關系的數據元素的集合。通常情況下,精心選擇的數據結構可以帶來更高的運行或者存儲效率。數據結構往往同高效的檢索演算法和索引技術有關。
數據結構是計算機專業學生在大學期間都會學習的一門課程,但是由於課程偏理論,缺乏實際操作的學習體驗,而讓大家產生了一種「數據結構不重要,我只要學習了Java/C語言/Python同樣能敲代碼」的錯覺,但其實它是一門集技術性、理論性和實踐性於一體的課程。
演算法是某一系列運算步驟,它表達解決某一類計算問題的一般方法,對這類方法的任何一個輸入,它可以按步驟一步一步計算,最終產生一個輸出。
小碼哥的李明傑也說過所有的計算問題,都離不開要計算的對象或者要處理的信息,如何高效的把它們組織起來,就是數據結構關心的問題,所以演算法是離不開數據結構的,這就是數據與演算法。
㈧ 如何學習數據結構與演算法
1、記住數據結構,記住演算法思想(是什麼)記住數據結構最直觀的東西;記憶該數據結構的定義、性質、特點等。很多東西的理解和創新都是以記憶為前提的。
2、進行大量相關編程練習,用編程語言去實現某一數據結構上的演算法(怎麼辦)
很多時候,理解一個演算法很容易,很容易在紙上去模擬一個演算法的實現過程。但具體實現,則是另一回事。一定得先自己思考,然後再去看書中給的編程語言實現。
3、“記住”特定情景下,利用某一特定的數據結構,去解決問題 (為什麼+怎麼辦)
每介紹一種數據結構,浙大數據結構與演算法的MOOC課程都會有一個實際問題來作為“引子”,回答了“這種數據結構為什麼會出現”。有的是為了實現特定的操作,有的是為了時間和空間上(大部分考慮的是時間復雜性)效率的更高(所以,沒事的時候,分析一下演算法的時間復雜性)。這些東西,我們也須理解記憶。每一數據結構都有其特性,去解決某一類問題,我們需要去記憶,去感悟。
4、形成一個屬於自己的知識體系
如何去“記住”(記好筆記,多多復習);在學習過程中,遇到挫折,產生挫敗感該如何處理(這個是必然會發生的,總有難以理解不會的地方);如何進行心態方面的調整(欲速則不達,不過也有”敏捷學習“的概念)。
㈨ 數據結構學的到底是什麼,和演算法的關系
所有的演算法,乃至數學在實際運用中都是要根據不同的數據來選擇不同的方法,所以一般學習過演算法和數據結構的人都會越發的認識到,數據才是程序的中心,只有找到了一個組織數據的最佳方式,演算法的運用才會事半功倍。
一般來說我覺得先學演算法比較好,但演算法和數據結構都是相輔相成的,要學好演算法要有一定數據結構的基礎,要學數據結構亦要有演算法基礎。但演算法比數據結構更重要一些,因為沒有演算法只有數據結構是沒用的。
數據結構是在整個計算機科學與技術領域上廣泛被使用的術語。它用來反映一個數據的內部構成,即一個數據由那些成分數據構成,以什麼方式構成,呈什麼結構。
從計算機的角度講,程序是用一種計算機能理解並執行的計算機語言描述解決問題的方法步驟。程序設計:是分析解決問題的方法步驟,並將其記錄下來的過程。演算法:解決問題的方法步驟。
㈩ 數據結構與演算法的內容簡介
本書是國家級雙語教學示範課程《數據結構》的配套教材,根據教育部高等學校計算機科學與技術教學指導委員會制定的《高等學校計算機科學與技術專業發展戰略研究報告暨專業規范》編寫好指。全書每章均以數據的邏輯結構、存儲結構和相應的演算法實現為主友啟線,並對演算法的運算效率進行分析。全書分為8章,涵蓋了各種常見數據結構。第1章主要介紹數據結構和演算法分析的基本概念,第2~6章主要介紹典型的線性結構、樹型結構和圖型結構,第7~8章分別介紹查找和排序操作。另外,每章後面附有習題和上機實驗內容,上機實驗提供了完整的、可運行的程序上機實驗供讀者參考,以加深讀者對所學知識的理解和應用。本書既可作為高等院校計算機及相關專業數友告配據結構課程的教學用書,也可作為從事計算機工程與應用的廣大讀者的參考書。