最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

這份北大的課程又火了!

2022-10-25 16:27 作者:噓-臣妾做不到啊  | 我要投稿

今天來了解一下數(shù)據(jù)結構與算法。

數(shù)據(jù)結構與算法是北京大學于2018年首次在中國大學MOOC開設的慕課課程。

算法與數(shù)據(jù)結構是程序設計中相輔相成的兩個方面,是計算機學科的重要基石。

數(shù)據(jù)結構和算法是程序員的基本功,值得每一個程序員好好學習。數(shù)據(jù)結構表示計算機存儲數(shù)據(jù)的方式,算法是完成某個特定任務的過程。

不管你是學習C語言,還是Java,Python,或者是前端,數(shù)據(jù)結構和算法都是必須要掌握的內(nèi)容。

怎么理解呢?

編程好比是一輛汽車,而數(shù)據(jù)結構和算法是汽車內(nèi)部的變速箱。

一個開車的人不懂變速箱的原理也是能開車的,同理一個不懂數(shù)據(jù)結構和算法的人也能編程。

但是如果一個開車的人懂變速箱的原理,比如降低速度來獲得更大的牽引力,或者通過降低牽引力來獲得更快的行駛速度。那么爬坡時使用1檔,便可以獲得更大的牽引力;下坡時便使用低檔限制車的行駛速度。

回到編程而言,比如將一個班級的學生名字要臨時存儲在內(nèi)存中,你會選擇什么數(shù)據(jù)結構來存儲,數(shù)組還是ArrayList,或者HashSet,或者別的數(shù)據(jù)結構。如果不懂數(shù)據(jù)結構的,可能隨便選擇一個容器來存儲,也能完成所有的功能,但是后期如果隨著學生數(shù)據(jù)量的增多,隨便選擇的數(shù)據(jù)結構肯定會存在性能問題,而一個懂數(shù)據(jù)結構和算法的人,在實際編程中會選擇適當?shù)臄?shù)據(jù)結構來解決相應的問題,會極大地提高程序的性能。

一、數(shù)據(jù)結構

  數(shù)據(jù)結構是計算機存儲、組織數(shù)據(jù)的方式,指相互之間存在一種或多種特定關系的數(shù)據(jù)元素的集合。

  通常情況下,精心選擇的數(shù)據(jù)結構可以帶來更高的運行或者存儲效率。數(shù)據(jù)結構往往同高效的檢索算法和索引技術有關。

1、數(shù)據(jù)結構的基本功能

  1. 插入一條新的數(shù)據(jù)項

  2. 尋找某一特定的數(shù)據(jù)項

  3. 刪除某一特定的數(shù)據(jù)項

  4. 迭代的訪問各個數(shù)據(jù)項,以便進行顯示或其他操作

2、常見的數(shù)據(jù)結構

  1. 數(shù)組 Array

  2. 棧 Stact

  3. 隊列 Queue

  4. 鏈表 Linked List

  5. 樹 Tree

  6. 哈希表 Hash

  7. 堆 Heap

  8. 圖 Graph

二、算法

算法簡單來說就是解決問題的步驟。

在Java中,算法通常都是由類的方法來實現(xiàn)的。前面的數(shù)據(jù)結構,比如鏈表為啥插入、刪除快,而查找慢,平衡的二叉樹插入、刪除、查找都快,這都是實現(xiàn)這些數(shù)據(jù)結構的算法所造成的。后面我們講的各種排序?qū)崿F(xiàn)也是算法范疇的重要領域。

1、算法的五個特征

①、有窮性:對于任意一組合法輸入值,在執(zhí)行有窮步驟之后一定能結束,即:算法中的每個步驟都能在有限時間內(nèi)完成。

②、確定性:在每種情況下所應執(zhí)行的操作,在算法中都有確切的規(guī)定,使算法的執(zhí)行者或閱讀者都能明確其含義及如何執(zhí)行。并且在任何條件下,算法都只有一條執(zhí)行路徑。

③、可行性:算法中的所有操作都必須足夠基本,都可以通過已經(jīng)實現(xiàn)的基本操作運算有限次實現(xiàn)之。

④、可輸入:作為算法加工對象的量值,通常體現(xiàn)在算法當中的一組變量。有些輸入量需要在算法執(zhí)行的過程中輸入,而有的算法表面上可以沒有輸入,實際上已被嵌入算法之中。

⑤、可輸出:它是一組與“輸入”有確定關系的量值,是算法進行信息加工后得到的結果,這種確定關系即為算法功能。

2、算法的設計原則

①、正確性:首先,算法應當滿足以特定的“規(guī)則說明”方式給出的需求。其次,對算法是否“正確”的理解可以有以下四個層次:

程序語法錯誤。

程序?qū)τ趲捉M輸入數(shù)據(jù)能夠得出滿足需要的結果。

程序?qū)τ诰倪x擇的、典型、苛刻且?guī)в械箅y性的幾組輸入數(shù)據(jù)能夠得出滿足要求的結果。

程序?qū)τ谝磺泻戏ǖ妮斎霐?shù)據(jù)都能得到滿足要求的結果。

PS:通常以第 三 層意義的正確性作為衡量一個算法是否合格的標準。

②、可讀性:算法為了人的閱讀與交流,其次才是計算機執(zhí)行。因此算法應該易于人的理解;另一方面,晦澀難懂的程序易于隱藏較多的錯誤而難以調(diào)試。

③、健壯性:當輸入的數(shù)據(jù)非法時,算法應當恰當?shù)刈龀龇磻蜻M行相應處理,而不是產(chǎn)生莫名其妙的輸出結果。并且,處理出錯的方法不應是中斷程序執(zhí)行,而是應當返回一個表示錯誤或錯誤性質(zhì)的值,以便在更高的抽象層次上進行處理。

④、高效率與低存儲量需求:通常算法效率指的是算法執(zhí)行時間;存儲量是指算法執(zhí)行過程中所需要的最大存儲空間,兩者都與問題的規(guī)模有關。

前面三點 正確性,可讀性和健壯性相信都好理解。對于第四點算法的執(zhí)行效率和存儲量,我們知道比較算法的時候,可能會說“A算法比B算法快兩倍”之類的話,但實際上這種說法沒有任何意義。

因為當數(shù)據(jù)項個數(shù)發(fā)生變化時,A算法和B算法的效率比例也會發(fā)生變化,比如數(shù)據(jù)項增加了50%,可能A算法比B算法快三倍,但是如果數(shù)據(jù)項減少了50%,可能A算法和B算法速度一樣。所以描述算法的速度必須要和數(shù)據(jù)項的個數(shù)聯(lián)系起來。也就是“大O”表示法,它是一種算法復雜度的相對表示方式,這里我簡單介紹一下,后面會根據(jù)具體的算法來描述。

相對(relative):你只能比較相同的事物。你不能把一個做算數(shù)乘法的算法和排序整數(shù)列表的算法進行比較。但是,比較2個算法所做的算術操作(一個做乘法,一個做加法)將會告訴你一些有意義的東西;

表示(representation):大O(用它最簡單的形式)把算法間的比較簡化為了一個單一變量。這個變量的選擇基于觀察或假設。例如,排序算法之間的對比通常是基于比較操作(比較2個結點來決定這2個結點的相對順序)。這里面就假設了比較操作的計算開銷很大。但是,如果比較操作的計算開銷不大,而交換操作的計算開銷很大,又會怎么樣呢?這就改變了先前的比較方式;

復雜度(complexity):如果排序10,000個元素花費了我1秒,那么排序1百萬個元素會花多少時間?在這個例子里,復雜度就是相對其他東西的度量結果。

然后我們再說說算法的存儲量,包括:

  • 程序本身所占空間;

  • 輸入數(shù)據(jù)所占空間;

  • 輔助變量所占空間;

一個算法的效率越高越好,而存儲量是越低越好。

本篇文章我們簡單的介紹了數(shù)據(jù)結構和算法的概念,算法是解決問題的步驟,而數(shù)據(jù)結構的實現(xiàn)離不開算法,可能理解起來比較模糊,不用擔心,我們一起來看下列視頻并跟著老師一起學習。

優(yōu)質(zhì)教程推薦:


還有面試資源可提升進階??????


獲取方式:關注公眾號回復“數(shù)據(jù)結構和算法”即可獲取?。?!

更多優(yōu)質(zhì)資源,等你來薅?。。?/p>


這份北大的課程又火了!的評論 (共 條)

分享到微博請遵守國家法律
通州区| 诸城市| 闵行区| 游戏| 南康市| 岳池县| 南投市| 驻马店市| 红河县| 鹤山市| 绵竹市| 深圳市| 桃源县| 建始县| 建德市| 丘北县| 盱眙县| 澳门| 如皋市| 确山县| 山东省| 剑阁县| 宁德市| 尼木县| 湘阴县| 旌德县| 三台县| 确山县| 溧水县| 志丹县| 萍乡市| 甘孜县| 霍邱县| 商河县| 闻喜县| 双峰县| 平山县| 米林县| 普兰店市| 福泉市| 密云县|