學習資料結構有什麼用?

時間 2021-05-09 15:51:58

1樓:秋葉

換種說法吧,

你初中學過的勾股定律,二次函式,概率

高中學的集合,指數對數,立體幾何,統計,各種不等式在95%以上的人在以後的工作生活中,都用不到.

但是這社會的發展,大部分就是靠的那5%的人,所以才會被寫入教材資料結構和演算法也是一樣,95%的程式設計師也是用不到的,但是有的人是想當那5%的

2樓:

如果你只是想業餘入門或者混口飯吃,不學也沒啥。

學資料結構和演算法最重要的用處就是:把你的人類思維切換到計算機思維,是基礎。

計算機界,「高手」無一例外都是演算法大師,對計算機的軟體甚至硬體有深入了解,然後才能寫出高效而又強大的基礎元件,然後「碼農」們看著教程把各種元件搭成乙個能工作的程式。

比如你去玩射擊,入門很簡單,開保險扣板機就行了,沒必要學物理學,甚至你可以打得很準,可你不會組槍不會保養不懂拋物線風阻心理控制什麼的,根本不可能上戰場啊!

現在計算機技術越來越發達,基礎元件越來越多越來越強大,程式設計越來越簡單,相對的,入門的人越來越多,而工資也越來越——低了。

任何乙個行業,都是頂部的5%在帶領剩下的人,而基礎紮實才能爬得更高。

3樓:

俺是來找「你看,x問題工作中會遇到,就得用y資料結構「這樣的答案的,結果不是模模糊糊大道理就是hash index、pointer、棧圖佇列這種一般的。說實話,除了db、ml裡見過幾棵樹、幾張圖,哦再加上過筆試用,幾乎沒遇到過其他亂七八糟的了。所以,現實世界中就是「差不多知道點得了「。

4樓:

我打個比方:我們大多數都有過當學生的經歷,但是你發現總有一些人話的時間少,但是學習效率極高,而有些人花了很多的時間,但是成績就是幹不過前面說的那些人,為什麼?就是雖然很努力,卻沒有達到自己的期望。

差別就是在學習思維,學習方法。資料結構和演算法,在計算機裡就像大腦,就是人的思路,所有在計算機裡執行的就是【資料】,至於以什麼樣的形式儲存?這就是【資料結構】的問題。

至於怎麼樣操作這些儲存的資料?這就是【演算法】。你想啊,有了儲存資料和運算元據的思路,那還不簡單?

至於上面有很多答主提到【浮躁】的問題,我也補充一點,在建造大樓時候,有些人急著在學習怎麼舔磚加瓦,而有些人去學習建築圖紙,我想這兩者之間的區別,你應該明白吧!

5樓:Paykan

如何自己用JS實現大數計算?比如兩個8000位的整數相加,結果不用科學計數法表示 —— 我是用JS模擬了個棧,然後用小學列豎式計算的思路,問題就解決了。

這個在大牛眼裡是小兒科,但足以說明問題。雖然以上不是什麼好方法,但要不是學習了棧的思想,我就指不定什麼時候才會想到解決方法,問題還擱那兒懸著。

棧是最簡單的資料結構了,尚且如此不可小覷,更別說更複雜的。

程式 = 資料結構 + 演算法,資料結構能讓你更加科學地、以計算機的方式分析問題,從而更加合理地選擇和使用演算法。

建議先別想它有什麼用,弄懂了,蹂躪它,味道就出來了。如果是急著找工作,那就更不可浮躁。

6樓:

就算是模擬演算法,也是要依賴資料結構的啊,為什麼我們要學習數數,你得先學會數數你才能學算數啊!你得先學資料結構,你才能學演算法啊!

7樓:路人甲

資料結構沒學好的,校招就等著吃虧吧。

校招季,多少人因為基本的資料結構不會直接在前兩輪面試就被pass掉我就不說了。

不然你以為我為什麼會轉行資料分析?

我開玩笑的,

但是前兩句是真的。

8樓:zmx

一句話,資料結構統領計算機世界,是開啟計算機專業的大門,是計算機專業的立科之本,其內涵數學物理,外延作業系統,計算機組成原理等一切計算機基本方向,為軟硬體設計提供強大邏輯思想基礎和實用工具基礎,句號結束。

9樓:懶癌

說了這麼多……你們還沒有問題主學的什麼專業呢……畢竟我乙個學經濟與管理的,資料結構也是必修課……………………

……別問我為什麼,我也想知道為什麼

10樓:naiveman

以下為扯淡,本渣不會程式設計:

學資料結構和演算法是為了獲得抽象的結構且不浪費太多的效能。或者說需要指定的結構和操作的前提下,如何從現有機器中提取最多的效能。這裡的抽象結構指的是有序集合,無序集合,序列,圖等等(我沒學過離散,列的肯定不全)。

然後最基本的操作就是增刪改查之類的。

然後問題就來了,怎麼最大限度的利用現有的機器呢?於是首先定義乙個計算模型

(computation model ),我們一開始學演算法的時候一般用的都是RAM model 。然後在這個model 之上整出一堆演算法和資料結構,來解決特定的問題。然後我們就可以在這些抽象結構之上來解決我們的實際問題了,而不用關心具體的機器的結構。

所以說,如果你關注的是業務,真沒必要太關注資料結構,頂多想明白用什麼抽象結構就好。(然後把這個問題丟給程式設計師。)

但是如果你關注效能,關注機器。那麼資料結構是學不完的。因為機器一直在發展,計算模型也一直在發展。

RAM model 剛出來的時候很不錯,但後來有了快取,有了多級快取,有了多核,有了集群。所以計算模型早就發展的很遠了。計算模型變一點,演算法和資料結構就變一片。

(讓老結構慢的死無葬身之地啊。)

這就是為什麼有的資料庫能比別的快很多,為什麼大家都在玩N卡,為什麼spark 那麼火,為什麼要關注快取友好等等等等。

那麼作為乙個程式設計師,還學不學這些東西呢?

愛學不學吧,反正學這些東西挺有意思的。。。

11樓:世間安得雙全法

想從「由頂向下」的角度說說自己淺顯的理解:

我們知道計算機是人類在思考「能不能偷懶」的原始慾望下創造出來——找乙個自動、快速、不知疲憊地替人類進行各種工作的機器。在有了諸如「圖靈機」等計算模型理論的支撐下,人們找到了通用的底層方式來實現自己想要功能的方法。但這些方法需要讓計算機理解——或者可以被處理後理解,就需要我們以某種形式,將我們的問題一步步抽象、一步步化簡,直到形成某種計算機可以理解的「程式化」的語言或組織形式,最後對計算機說一句:

剩下的就交給你了!

舉個不甚恰當的例子:

比如我們計畫去旅遊,我們手裡有地圖,想知道計畫中的幾個城市直接是否都有高速公路可以走,從而不會有某個城市因道路不通而無法驅車前往。雖然我們可以自己去查,但是我們有計算機啊!於是我們想借助它來完成這個任務,於是進行了第一步抽象——將城市表示為乙個個點,道路表示為邊,結合起來形成了叫資料結構

我們想知道的便是——這張圖是否是乙個連通圖?比如我們用1、2、3、4分別表示「北上廣深」(僅作意會),線段表示道路,於是有了這張圖:

畫出來以後,我們自己心裡明白它表示什麼,但計算機不懂。於是我們進行第二步抽象——將圖編碼,轉化為計算機可以編譯的語言。於是得到下面表示方式:

lt;G> = (1,2,3,4) ((1,2),(2,3),(3,1),(1,4))

前面括號中我們用數字表示各個節點(對應「城市」)的編號,後面則用「(節點,節點)」成對的形式表示一條邊(對應 「道路」)。

那麼計算機如何處理呢?這時就需要設計一種演算法,告訴它怎麼理解和處理人類跟你說的話。比如可以按這樣的方式:

1,選擇第乙個節點並進行標記。

2,重複第3步直到沒有新的節點可以被標記。

3, 對於G中的每個節點Ni,如果有一條邊與其相連,且邊的另一頭是乙個已經被標記的節點Nj(i不等於j),那麼將Ni進行標記。(這一步要借助上面寫出的「邊的集合」((1,2),(2,3),(3,1),(1,4))

4,掃瞄一遍點的集合(這裡是(1,2,3,4)),如果都被標記了,那麼就是連通圖(對應「每個城市都有道路經過」);否則不是。

當計算機執行之後,我們開心的發現,得出了想要的結果。更開心的是它不僅可以對這幾個城市查詢道路,還可以對更多的城市做同樣的查詢!我們因此省去了自己人工查詢的繁瑣。

具體如何實現這個演算法還要涉及更底層的方面,不過我想到這裡資料結構與演算法已經體現出來了——正是有了這兄弟倆,我們才能讓借助計算機來得到想要的東西,從而大大方便我們的生活,以及創造出如此眾多神奇的科技。

愈往深處和廣處學習,愈覺得人類智慧型的偉大。

資料結構與演算法,正是前人在計算機領域智慧型結晶的集中領域之一,我想有時甚至不需要知道學好它有什麼用,因為體悟智慧型本身不就是一種享受嗎?

資料結構到底有什麼用

就是很多經典問題,你自己做呢,也不是做不出來,就是程式冗雜效率低。資料結構和演算法呢,就是告訴你優秀畢業生的高分作業的套路,你呢,搞清楚ta們的套路,下次遇到的時候借鑑,站在巨人的肩膀上 寒鴿兒 程式 資料結構 演算法,廣義上的資料結構是資料在計算機中的物理儲存和資料之間的邏輯結構。據此定義,陣列也...

資料結構有什麼用?是什麼?

Harrytsz 資料結構有什麼用,這是個好問題,而且這個問題最好始終伴隨著演算法與資料結構學習的整個過程。計算機是一門極具實用主義的學科,他造出來的每乙個概念都有其實際意義的。如果你深入了解過作業系統或者資料庫系統你就會發現資料結構無處不在,作業系統為了便於協調管理程序,設計了PCB資料結構,優先...

學習資料結構有什麼好的教程?

資料結構和數學很類似都是比較抽象的,而往往實際問題都是非常複雜的,所以要先掌握最基本最抽象最特殊的規律。學習資料結構首先要掌握一門計算機語言,起碼要知道語法,能利用它完成一些基本程式,就像首先要掌握數學最基本的加減乘除,定理之類的規則。其次要知道資料結構和演算法是分不開的,學習資料結構的同時也需要一...