1樓:瑞林
記得網上曾經有乙個帖子,大概的列出了學習acm來說需要的知識背景。如果不是牛人,或者天生受虐傾向,普通人看到了都會暈倒,多達100多個科目(全部需要數學背景)。樓主覺得你能學的過來嗎?
但是,所有的演算法,乃至數學在實際運用中都是要根據不同的資料來選擇不同的方法,所以一般學習過演算法和資料結構的人都會越發的認識到,資料才是程式的中心,只有找到了乙個組織資料的最佳方式,演算法的運用才會事半功倍。比如我印象最深刻的是在大二時做的一道題目:判斷乙個輸入的數是否符合科學計算法。
如e*103,-30.90*103就不是。 這樣一道題,如果用普通的陣列線性儲存,然後逐一判斷,效率的演算法的複雜度都是不合格的。
有限狀態機則清晰明了的解決了這個問題。即把所有可能的狀態和狀態的轉換畫成乙個矩陣,然後每讀取乙個輸入的字元就在這些狀態中跳轉,直到最後乙個字元為止,判斷最終狀態是有效還是無效狀態。
總而言之:資料結構是問題的核心,是演算法的基礎。
2樓:萢萢
演算法的範圍要比資料結構寬一點,成型的演算法就可以算作資料結構。
3樓:量子
資料結構是研究演算法實現過程中用到的一些技術,像堆疊,鍊表等,這些算不上演算法,太簡單。演算法是實現某種功能的方法,相比於資料結構更抽象,像fft。演算法實現中用到資料結構,到實現方法不唯一。
二者關係有點像畫圖構思和顏料的關係
資料結構學的到底是什麼,和演算法的關係
4樓:百度使用者
本人乃乙個資料痴迷
者,在計算機的道路上,也是乙個資料結構的痴迷者,現在大學裡面和同學搞開發也痴迷於資料庫,我就我個人的理解給你談一談:
首先,資料結構是一門計算機語言學的基礎學科,它不屬於任何一門語言,其體現的是幾乎所有標準語言的演算法的思想。
上面的概念有一些模糊,我們現在來具體說一說,相信你門的資料結構使用的是一門具體的語言比如c/c++語言來說明,那是為了輔助的學習資料結構,而資料結構本身不屬於任何語言(相信你把書上的程式敲到電腦裡面是不能通過的吧,其只是描述了過程,要除錯程式,還需要修改和增加一些東西)。你們的書上開始應該在講究資料的物理儲存結構/邏輯儲存結構等概念,說明資料結構首先就是「資料的結構」,在記憶體上的儲存方式,就是物理的儲存結構,在程式使用人員的思想上它是邏輯的,比如:
你們在c/c++中學習到鍊表,那麼鍊表是什麼乙個概念,你們使用指標制向下乙個結點的首位址,讓他們串聯起來,形成乙個接乙個的結點,就像顯示生活中的火車一樣。而這只是對於程式設計師的概念,但是在記憶體中儲存的方式是怎樣的那?對於你程式設計師來說這是「透明」的,其內部分配空間在那裡,都是隨機的,而記憶體中也沒有乙個又一根的線將他們串聯起來,所以,這是乙個物理與邏輯的概念,對於我們程式設計師只需要知道這些就可以了,而我們主要要研究的是「邏輯結構」。
我可以給你乙個我自己總結的乙個概念:所有的演算法必須基於資料結構生存。也就是說,我們對於任何演算法的編寫,必須依賴乙個已經存在的資料結構來對它進行操作,資料結構成為演算法的操作物件,這也是為什麼演算法和資料結構兩門分類不分家的概念,演算法在沒有資料結構的情況下,沒有任何存在的意義;而資料結構沒有演算法就等於是乙個屍體而沒有靈魂。
估計這個對於演算法的初學者可能有點暈,我們在具體的說一些東西吧:
我們在資料結構中最簡單的是什麼:我個人把書籍中線性表更加細化一層(這裡是為了便於理解在這樣說的):單個元素,比如:
int i;這個i就是乙個資料結構,它是乙個什麼樣的資料結構,就是乙個型別為int的變數,我們可以對它進行加法/減法/乘法/除法/自加等等一系列操作,當然對於單個元素我們對它的資料結構和演算法的研究沒有什麼意義,因為它本來就是原子的,某些具體運算上可能演算法存在比較小的差異;而提公升乙個層次:就是我們的線性表(一般包含有:順序表/鍊表)那麼我們研究這樣兩種資料結構主要就是要研究它的什麼東西那?
一般我們主要研究他們以結構為單位(就是結點)的增加/刪除/修改/檢索(查詢)四個操作(為什麼有這樣的操作,我在下面說到),我們一般把「增加/刪除/修改」都把它稱為更新,對於乙個結點,若要進行更新一類的操作比如:刪除,對於順序表來說是使用下標訪問方式,那麼我們在刪除了乙個元素後需要將這個元素後的所有元素後的所有元素全部向前移動,這個時間是對於越長的順序表,時間越長的,而對於鍊表,沒有順序的概念,其刪除元素只需要將前乙個結點的指標指向被刪除點的下乙個結點,將空間使用free()函式進行釋放,還原給作業系統。當執行檢索操作的時候,由於順序表直接使用下標進行隨機訪問,而鍊表需要從頭開始訪問一一匹配才可以得到使用的元素,這個時間也是和鍊表的結點個數成正比的。
所以我們每一種資料結構對於不同的演算法會產生不同的效果,各自沒有絕對的好,也沒有絕對的不好,他們都有自己的應用價值和方式;這樣我們就可以在實際的專案開發中,對於內部的演算法時間和空間以及專案所能提供的硬體能力進行綜合評估,以讓自己的演算法能夠更加好。
(在這裡只提到了基於資料結構的乙個方面就是:速度,其實演算法的要素還應該包括:穩定性、健壯性、正確性、有窮性、可理解性、有輸入和輸出等等)
為什麼要以結點方式進行這些亂七八糟的操作那?首先明確乙個概念就是:對於過程化程式語言所提供的都是一些基礎第一資訊,比如一些關鍵字/保留字/運算子/分界符。
而我們需要用程式解決現實生活中的問題,比如我們要程式記錄某公司人員的情況變化,那麼人員這個資料型別,在程式語言中是沒有的,那麼我們需要對人員的內部資訊定義(不可能完全,只是我們需要那些就定義那些),比如:年齡/性別/姓名/出生日期/民族/工作單位/職稱/職務/工資狀態等,那麼就可以用一些c/c++語言描述了,如年齡我們就可以進行如下定義:
int age;/*age變數,表示人員公司人員的年齡*/
同理進行其他的定義,我們用結構體或類把他們封裝成自定義資料型別或類的形式,這樣用他們定義的就是乙個人的物件的了,它內部包含了很多的模板資料了。
我就我個人的經歷估計的**量應該10000以內的(我個人的經理:只是建議,從你的第一行**開始算,不論程式正確與否,不論那一門語言,作為乙個標準程式設計師需要十萬行的**的功底(這個是我在大學二年級感覺有一定時候的大致資料,不一定適合其他人),而十萬行**功底一般需要四門基礎遠支撐,若老師沒有教,可以自學一些語言)。
5樓:匿名使用者
所有的演算法,乃至數學在實際運用中都是要根據不同的資料來選擇不同的方法,所以一般學習過演算法和資料結構的人都會越發的認識到,資料才是程式的中心,只有找到了乙個組織資料的最佳方式,演算法的運用才會事半功倍。
一般來說我覺得先學演算法比較好,但演算法和資料結構都是相輔相成的,要學好演算法要有一定資料結構的基礎,要學資料結構亦要有演算法基礎。但演算法比資料結構更重要一些,因為沒有演算法只有資料結構是沒用的。
資料結構是在整個電腦科學與技術領域上廣泛被使用的術語。它用來反映乙個資料的內部構成,即乙個資料由那些成分資料構成,以什麼方式構成,呈什麼結構。
從計算機的角度講,程式是用一種計算機能理解並執行的計算機語言描述解決問題的方法步驟。程式設計:是分析解決問題的方法步驟,並將其記錄下來的過程。演算法:解決問題的方法步驟。
1.資料結構或者演算法之類不是直接執行的東西。 資料結構,大約就是關於怎樣使用變數能更有效率的理論。
演算法麼,比較象數學公式,不過代進去的不是資料或變數,而是c的語句。是關於怎樣安排程式才能事半功倍的理論。
6樓:匿名使用者
資料結構和演算法其實學習的是一種思維,資料結構常見的有
1,陣列
c#資料結構和演算法的關係,它們之間的關係,它們有什麼區別,說得詳細一些,謝謝
7樓:匿名使用者
資料結構是資料存放、整合的關係,比如:陣列、鍊表等。
演算法是資料間互動的次內
序和方法,比如容:冒泡法。
它們是兩個不同的概念,但相互間往往又有適合和依賴的關係。
舉個通俗的例子:假定你的目標是「前進」;
當你使用自行車這種「資料結構」時,你可以用「使勁兒蹬」法。
當你使用汽車這種「資料結構」時,你可以使用「踩油門」法。
它們之間有適合和依賴的關係,不能互換。
而 c# 是計算機程式語言的一種,與上面兩個沒有必然聯絡。
資料結構(幫忙解答一下,謝謝) 50
8樓:匿名使用者
這麼多題才給20分,拒答!
9樓:匿名使用者
1,b 2,d 3,a 4,a 5,d 我是剛學access的所以有點我也不會啊
10樓:甜蜜之友
倒不如我來問,你來答吧,想收買人命嗎
什麼是資料結構和演算法?學演算法還需要去了解資料結構嗎?
11樓:匿名使用者
你這理解不完全正確。
因為資料結構不只是記憶體中資料的排列,它是對資料的一種組織方式,就像圖書館要排書一樣,是為了便於操作,同時它本身也整合了對通用操作:比如查詢、比較等的支援。陣列不是一種資料結構,而是一種資料型別。
乙個完整的資料結構包括邏輯結構和儲存結構。通常選擇了資料結構,演算法也隨之確定,是資料而不是演算法是系統構造的關鍵因素。
因此在語言實現上,資料結構通常也會包含與之相對應的演算法集合,這些演算法是指基本演算法:查詢、索引、比較等。
資料結構的邏輯結構和硬體是沒有關係的,而其儲存結構受到計算機硬體系統工作方式的影響,通常這點影響在於資料時順序儲存還是離散儲存。演算法的基礎是資料結構。只有指定明確的資料結構,演算法才能設計完成,脫離資料結構,演算法是無法,也不可能成立的。
因為不需要資料的演算法就不是乙個有效的計算機演算法,演算法中任何對資料的組織形式都可以被稱之為資料結構。
2.資料結構在程式設計中的地位是極其重要的,是乙個程式實現的基礎中的基礎,在此基礎上才能構建演算法。通常而言,你不了解什麼高深的演算法,一樣能完成工作,但是如果你不了解基本的資料結構,那麼可以說,你根本就不能完成乙個任何有實質性內容的程式。
donald ervin knuth教授在其《計算機程式設計藝術》的第一卷《基本演算法》中花費的絕大部分的篇幅去論述資料結構。由此可見資料結構對演算法的重要性。
12樓:匿名使用者
資料結構可以優化資料的存諸,使得資料存諸能夠更省空間,查詢更高效。
有時候資料結構本身就是一種演算法,比如線段樹,splay樹,堆。
而有一些演算法是要建立在資料結構的基礎之上才能夠更高效的。
對於不同的演算法需要採用合適的資料結構。比如最短路徑演算法,對於希疏圖,我們要用連線表來存連。這樣才不能導至大量的空連。而且連的查詢也更高效。
而對於密圖,我們採用連線矩陣來存諸。
資料結構和演算法不一樣嗎,演算法和資料結構有什麼區別??
不一樣。資料結構,無論複雜或簡單,只是資料。演算法是計算機可執行的數值計算方法,它加工資料,產出資料。資料是原料和製成品。演算法是工廠,是生產流水線。演算法和資料有關,但兩者不一樣。蛋糕廠同雞蛋,麵粉有關,但蛋糕廠不同於原料。 碼寶寶呀 這個肯定是不一樣,有區別的。資料是一切能輸入計算機中的資訊的總...
資料結構中演算法分析的問題
武當單挑王 第一個第二個問題,就相當於你高中學的f x 沒什麼實際意義,也不用糾結 為什麼用t表示呢,代表時間 而一般所說的時間複雜度,都是用大o表示的 你學過函式應該知道,次數最高的那項對函式的增長影響最大,所以這裡可以忽略其他低次項 前面的係數也可以省去,對於這個程式的就是o n2 幻世萌 線性...
資料結構中什麼是排序演算法的穩定性
幻想v飛翔 比如說 5 2 3 5 1 排序後可能是 5 5 3 2 1 也可能是5 5 3 2 1,前者是穩定的,後者是不穩定的。冒泡,選擇有穩定性,快拍沒有 資料結構中幾種常見的排序演算法之比較 冒泡。複雜度n平方。適用於陣列 插入排序。複雜度n平方。適用於連結串列 快排。複雜度nlog n 希...