回覆列表
  • 1 # 傳智教育官方賬號

    資料結構與演算法不分家

    資料結構包括資料物件集以及它們在計算機中的組織方式,即它們的邏輯結構和物理儲存結構,一般我們可以認為資料結構指的是一組資料的儲存結構。

    演算法就是操作資料的方法,即如何操作資料效率更高,更節省資源。

    這只是抽象的定義,我們來舉一個例子,你有一批貨物需要運走,你是找小轎車來運還是找卡車來運?這就是資料結構的範疇,選取什麼樣的結構來儲存;至於你貨物裝車的時候是把貨物堆放在一起還是分開放這就是演算法放到範疇了,如何放置物更有效率更節省空間。

    資料結構和演算法看起來是兩個東西,但是我們為什麼要放在一起來說呢?那是因為資料結構和演算法是相輔相成的,資料結構是為演算法服務的,而演算法要作用在特定的 資料結構之上。

    今天推薦一套資料結構與演算法學習影片(含PDF資料):

    讓資料結構不再難懂,讓演算法不再難寫

    主講內容章節一:線性表:陣列;連結串列;棧;佇列章節二:演算法(1):遞迴;基礎排序演算法;二分查詢演算法章節三:演算法(2):散列表;Hash演算法;樹章節四:演算法(3):堆;圖;搜尋章節五:演算法(4):拓撲排序;最短路徑;點陣圖;B+樹章節六:實戰:LRU快取淘汰策略的實現;剖析微服務介面鑑許可權流背後的資料結構和演算法

    PDF資料內容(只擷取課程內容簡介哦!其它小夥伴自行下載學習哦!):

    資料結構與演算法學習一:

    資料結構與演算法學習二:

    資料結構與演算法學習三:

    資料結構與演算法學習四:

    資料結構與演算法學習五:

    排序演算法總結

  • 2 # 程式設計字典

    資料結構是一種組織資料以便有效使用資料的系統方法。以下術語是資料結構的基礎術語。詳細參看:codingdict.com/article/21869

    介面 - 每個資料結構都有一個介面。 Interface表示資料結構支援的操作集。介面僅提供支援的操作列表,它們可以接受的引數型別以及返回這些操作的型別。

    實現 - 實現提供資料結構的內部表示。 實現還提供了資料結構操作中使用的演算法的定義。

  • 3 # 科技千里眼

    什麼是“演算法”

    演算法,一看字面就知道,肯定是“計算方法”的簡稱啦,特指“計算機的計算方法”,所以,演算法是由電腦程式來實現的。

    演算法,英文叫Algorithm,就是為了讓電腦解決一個問題而設計出來的一套計算方法,這套計算方法的設計是依靠“數學模型”的建立。

    也就是說,程式設計師在設計算法之前,會將實際問題理解分析,歸納為一個“具體的數學問題”

    演算法是解決問題的計算方法

    演算法有這麼幾個特徵

    1 確定

    演算法的每一個步驟都有“明確的意義”,對於演算法結果的預期也是明確的。

    2 有窮

    演算法不能一直算,停不下來是不行的;要有一個明確的結束條件,要不然算到“天荒地老”還有什麼意義呢?

    3 可行

    有個笑話說一個人面試會計師,算數特別快瞬間出結果,但是就是算得不對。

    4 輸入輸出

    再複雜的演算法也是由一個個小演算法組合成的

    怎麼設計一個演算法程式呢

    演算法有三個要素——

    數學模型輸入輸出方法演算法步驟

    所以說,怎麼設計一個演算法呢?

    首先,先對要解決的問題建立一個數學模型,把原問題化為數學問題;

    然後,將問題的“已知條件”化為“資料”輸入到數學模型中;

    再然後,透過對輸入一步一步的轉化/處理/計算,得到結果;

    最後,把結果按照希望的形式,輸出出來。

    資料結構對演算法設計至關重要

    資料結構有兩層含義——

    1 代表了儲存資料的集合

    一系列的資料能夠儲存在這個資料結構中。

    2 代表了儲存的資料之間有特定的關係

    這正是“結構”一詞的意義,學過線性代數的同學一定很清楚,結構的力量很強大,能讓資訊量成倍地擴大。

    資料——重要的資訊價值所在

    資料結構的選擇會極大地影響演算法設計

    合適的資料結構能讓演算法設計時更高效更簡潔,而不合適的資料結構有時候會把演算法設計帶入深淵,甚至無法實現演算法

    有些初學程式設計的朋友在處理一些演算法問題時,難免會遇到一些“感覺很繁瑣,但又想不出什麼簡單的方法”的情況,這時不妨回來看看資料結構,換一個更適合的資料結構,常常會有柳暗花明之感呢。

    資料結構是程式設計的基礎中的基礎

    初階資料結構

    資料結構共8種,有4種最常用也最簡單,它們是:

    陣列(Array)

    連結串列(Linked list)

    堆疊(Stack)

    佇列(Queue)

    由於它們的結構都是線性的,它們還有一個共同的名字——

    “線性表”

  • 4 # 一個存在感小透明

    能否靈活高效的運用資料結構與演算法,通常是評價一個程式設計師是高手還是菜鳥的重要一環。

    資料結構

    在計算機相關專業的本科階段,會有一門課專門叫做資料結構,我們當時用的教材是清華大學出版,嚴蔚敏主編的《資料結構》(C語言版)。這本書裡面詳細介紹了程式設計師常用的各種資料結構,如陣列,表,堆疊,佇列,圖,樹等。如果你瞭解上面任意一個概念,那你大概就能由點及面推測出資料結構是什麼,我總結認為,資料結構是一種有規律的儲存並操作資料的方式,可以看做建房子階段的材料,比如混凝土,磚塊,鋼筋,都屬於一種資料結構。

    演算法

    演算法也是計算機相關專業在本碩階段都繞不過去的重要課程,我們上本科期間,學的教材是《演算法導論》。

    演算法,可以描述為對一個問題的解決方案與策略,是透過操作各種不同的資料結構來解決問題的一種方法。演算法獨立於程式語言,代表的是一種思想。它是能夠驅動程式語言與資料結構的靈魂。這也是為什麼在很多網際網路公司面試的時候喜歡問演算法的原因,因為能夠用高效準確的演算法解決問題的人才,通常都是頭腦清晰的聰明人,這類人就算在操作程式設計工具方面有欠缺,也能夠憑藉自身優勢快速學習。

    相輔相成

    上面說演算法驅動資料結構,反過來,合適的資料結構同樣能夠提高演算法的效率。

    比如要實現一個先進後出的資料結構,在現有JAVA的介面下,只需要用Stack即可,但是假如從來沒有存在過Stack,只有一個先進先出的資料結構List,那麼你就需要自己利用List來實現先進後出(這也是一個常見面試題),無形中就增加了演算法的工作量。

    綜上,資料結構是建築過程中的磚瓦,演算法是設計方案。當方案與材料相匹配,才會有一個完美的房子。

  • 5 # benny61

    作為一個真省一的過來人,自以為可以勝任這個問題。

    1、程式=演算法+資料結構

    2、廣義的演算法包括資料結構

    3、有名而簡單的演算法有:素數判定、快速冪、排序等

    4、有名而簡單的資料結構有:陣列、連結串列等

    5、對於一類演算法或資料結構,我們用時空複雜度、應用廣泛性、思維難度、程式碼難度等標尺去衡量

    6、沒有全能的演算法

    8、一切的資料結構都可以用陣列實現。所以陣列是最基本的資料結構。比如連結串列(指標)完全可以用陣列代替

    10、再強調一遍,沒有全能的資料結構。偏科也有偏科的好,要以具體問題而論

  • 中秋節和大豐收的關聯?
  • 你知道稱雄千年的“渾天說”嗎?