什么是Java數(shù)據(jù)結構與算法檬某?

編程好比是一輛汽車撬腾,而數(shù)據(jù)結構和算法是汽車內部的變速箱。一個開車的人不懂變速箱的原理也是能開車的橙喘,同理一個不懂數(shù)據(jù)結構和算法的人也能編程。但是如果一個開車的人懂變速箱的原理胶逢,比如降低速度來獲得更大的牽引力厅瞎,或者通過降低牽引力來獲得更快的行駛速度。那么爬坡時使用1檔初坠,便可以獲得更大的牽引力和簸;下坡時便使用低檔限制車的行駛速度。????

回到編程而言碟刺,比如將一個班級的學生名字要臨時存儲在內存中锁保,你會選擇什么數(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ù)結構的基本功能

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

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

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

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

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

數(shù)組 Array

棧 Stact

隊列 Queue

鏈表 Linked List

樹 Tree

哈希表 Hash

堆 Heap

圖 Graph

二、算法

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

在Java中帘睦,算法通常都是由類的方法來實現(xiàn)的。前面的數(shù)據(jù)結構坦康,比如鏈表為啥插入竣付、刪除快,而查找慢滞欠,平衡的二叉樹插入古胆、刪除、查找都快筛璧,這都是實現(xiàn)這些數(shù)據(jù)結構的算法所造成的逸绎。后面我們講的各種排序實現(xiàn)也是算法范疇的重要領域。

1夭谤、算法的五個特征

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

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

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

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

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

2、算法的設計原則

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

程序語法錯誤忿偷。

程序對于幾組輸入數(shù)據(jù)能夠得出滿足需要的結果。

程序對于精心選擇的臊泌、典型鲤桥、苛刻切帶有刁難性的幾組輸入數(shù)據(jù)能夠得出滿足要求的結果。

程序對于一切合法的輸入數(shù)據(jù)都能得到滿足要求的結果渠概。

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

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

③窟蓝、健壯性:當輸入的數(shù)據(jù)非法時罪裹,算法應當恰當?shù)淖龀龇磻蜻M行相應處理,而不是產生莫名其妙的輸出結果运挫。并且状共,處理出錯的方法不應是中斷程序執(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ù)結構的實現(xiàn)離不開算法泊碑,可能理解起來比較模糊,不用擔心毯欣,我們一起來視頻中跟著老師學習~?

最后Java初學者推薦Java300集馒过!2022年最全面的Java課程!新手必備教程仪媒!

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末沉桌,一起剝皮案震驚了整個濱河市谢鹊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌留凭,老刑警劉巖佃扼,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蔼夜,居然都是意外死亡兼耀,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門求冷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瘤运,“玉大人,你說我怎么就攤上這事匠题≌兀” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵韭山,是天一觀的道長郁季。 經常有香客問我,道長钱磅,這世上最難降的妖魔是什么梦裂? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮盖淡,結果婚禮上年柠,老公的妹妹穿的比我還像新娘。我一直安慰自己褪迟,他們只是感情好冗恨,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著牵咙,像睡著了一般派近。 火紅的嫁衣襯著肌膚如雪攀唯。 梳的紋絲不亂的頭發(fā)上洁桌,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天,我揣著相機與錄音侯嘀,去河邊找鬼另凌。 笑死,一個胖子當著我的面吹牛戒幔,可吹牛的內容都是我干的吠谢。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼诗茎,長吁一口氣:“原來是場噩夢啊……” “哼工坊!你這毒婦竟也來了献汗?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤王污,失蹤者是張志新(化名)和其女友劉穎罢吃,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體昭齐,經...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡尿招,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了阱驾。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片就谜。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖里覆,靈堂內的尸體忽然破棺而出丧荐,到底是詐尸還是另有隱情,我是刑警寧澤喧枷,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布篮奄,位于F島的核電站,受9級特大地震影響割去,放射性物質發(fā)生泄漏窟却。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一呻逆、第九天 我趴在偏房一處隱蔽的房頂上張望夸赫。 院中可真熱鬧,春花似錦咖城、人聲如沸茬腿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽切平。三九已至,卻和暖如春辐董,著一層夾襖步出監(jiān)牢的瞬間悴品,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工简烘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留苔严,地道東北人。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓孤澎,卻偏偏與公主長得像届氢,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子覆旭,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內容