首頁 > 軟體

JavaScript資料結構與演演算法

2022-07-13 14:00:54

前言

資料結構與演演算法這個詞相信大家都聽過、瞭解過、學過,那為什麼要學習資料結構與演演算法呢?我感覺有以下兩個原因:

  • 為了一個比較滿意的Offer,現在去面試任何一家公司,不管你是前端還是後端,多多少少會問一些關於演演算法的問題;
  • 程式設計需要,如果沒有很好的資料結構與演演算法的功底,很多事情都是知其然不知其所以然,無法深入的學習,還有就是隨著專案的複雜,資料量也隨之變大,資料結構與演演算法可以更優雅的處理這些資料。

程式=資料結構+演演算法,是電腦科學界的一個經典名句,這句話也體現了一個應用程式是與資料結構和演演算法密不可分的。

資料結構

首先我們先來了解一下資料結構,資料結構就是計算機儲存和組織資料的一種方式,指相互之間存在一種或者多種特定關係的集合。在不同的場景選擇更適合的資料結構,可以為應用程式帶來更好的執行效率和儲存效率。

常見的資料結構

常見的一些資料結構主要有以下幾種:

  • 陣列(Array) :陣列是一種聚合資料型別,它是將具有資料型別的的一些變數有序的組織到一起的一個集合;

優點是插入快;缺點是查詢、刪除慢,只能儲存單一型別的元素;

  • **連結串列(Linked List):**連結串列是一種資料元素按照鏈式儲存結構進行儲存的資料結構,這種儲存結構具有在物理上存在非連續的特點。

優點是插入、刪除快;缺點是查詢慢;

  • **棧(Stack):**棧是一種特殊的線性表,它只能在一個表的一個固定端進行資料結點的插入和刪除操作。

優點是提供先進後出的儲存方式,缺點是對其他項操作都很慢;

  • **佇列(Queue):**佇列和棧類似,也是一種特殊的線性表。和棧不同的是,佇列只允許在表的一端進行插入操作,而在另一端進行刪除操作。

優點是提供先進先出的儲存方式,缺點是對其他項操作都很慢;

  • **樹(Tree):**樹是典型的非線性結構,它是包括,2 個結點的有窮集合 K。
  • **圖(Graph):**圖是另一種非線性資料結構。在圖結構中,資料結點一般稱為頂點,而邊是頂點的有序偶對。

演演算法

演演算法簡而言之就是解決問題的步驟,對特定問題求解步驟的一種描述,他的定義的是解決特定問題求解步驟的準確而完整的描述,在計算機中表現為一系列指令的集合,演演算法代表著用系統的方法描述解決問題的策略機制。

舉兩個例子來說明一下什麼是演演算法:

  • 去北京看演唱會:首先我們需要確定地點、然後購買門票、車票、入場、看演唱會、演唱會結束
  • 把大象裝進冰箱:把冰箱門開啟,大象塞進去,關上冰箱門。

雖然把大象裝進冰箱這是一個玩笑話,假設這真的是一個問題,解決問題的步驟適用於任何動物。

演演算法的特徵

演演算法具有以下五個特徵:

  • 有窮性:對於任意一組合法輸入值,在執行有窮步驟之後一定能結束,即:演演算法中的每個步驟都能在有限時間內完成。
  • 確定性:在每種情況下所應執行的操作,在演演算法中都有確切的規定,使演演算法的執行者或閱讀者都能明確其含義及如何執行。並且在任何條件下,演演算法都只有一條執行路徑。
  • 可行性:演演算法中的所有操作都必須足夠基本,都可以通過已經實現的基本操作運算有限次實現之。
  • 有輸入:作為演演算法加工物件的量值,通常體現在演演算法當中的一組變數。有些輸入量需要在演演算法執行的過程中輸入,而有的演演算法表面上可以沒有輸入,實際上已被嵌入演演算法之中。
  • 有輸出:它是一組與“輸入”有確定關係的量值,是演演算法進行資訊加工後得到的結果,這種確定關係即為演演算法功能。

演演算法的目標

一個優秀的演演算法需要追求以下兩個目標:

  • 執行所需的時間更少
  • 佔用的記憶體空間更小

上面所說的正是時間複雜度空間複雜度的概念,相信很多同學都對這兩個概念有所瞭解,不瞭解也沒有關係,下篇文章介紹時間複雜度和空間複雜度。

總結

本篇文章介紹了資料結構與演演算法的概念,以及幾種常見的資料結構是什麼,有什麼優點和缺點;在文章的最後還介紹了演演算法的五個特徵以及演演算法所追求的目標。

到此關於JavaScript資料結構與演演算法的文章就介紹到這了,更多相關JS資料結構 內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com