如何理解數(shù)據(jù)結(jié)構(gòu)與算法?

一贼急、數(shù)據(jù)結(jié)構(gòu)與算法介紹

1茅茂、程序=結(jié)構(gòu)+算法

程序由存儲(chǔ)數(shù)據(jù)的結(jié)構(gòu)和解決問(wèn)題的算法組成,在計(jì)算機(jī)的世界里太抓,結(jié)構(gòu)和算法存在"相輔相成"的關(guān)系空闲。程序根據(jù)算法選擇最合適的存儲(chǔ)結(jié)構(gòu),算法依賴存儲(chǔ)結(jié)構(gòu)走敌,選擇最優(yōu)的策略處理數(shù)據(jù)碴倾,達(dá)到占用空間少、計(jì)算時(shí)間少的目的。

2跌榔、邏輯結(jié)構(gòu)與物理結(jié)構(gòu)

數(shù)據(jù)元素之間相互聯(lián)系的方式稱之為邏輯結(jié)構(gòu)异雁,數(shù)據(jù)元素的邏輯結(jié)構(gòu)通過(guò)相互之間的關(guān)系分為:

2.1、集合僧须,元素之間沒(méi)有關(guān)系纲刀,單獨(dú)存在;

2.2担平、線性結(jié)構(gòu)示绊,數(shù)組或鏈表表示的是1對(duì)1的關(guān)系;

2.3暂论、樹(shù)面褐,二叉樹(shù)是1對(duì)2的關(guān)系,普通樹(shù)是1對(duì)多的關(guān)系取胎;

2.4展哭、圖,圖是多對(duì)多關(guān)系闻蛀,節(jié)點(diǎn)表示元素匪傍,邊表示節(jié)點(diǎn)之間的關(guān)系,有向邊可以表示有向圖循榆。


type.jpg

數(shù)據(jù)元素在計(jì)算機(jī)中的存儲(chǔ)方式是物理結(jié)構(gòu)析恢,數(shù)據(jù)按照在計(jì)算機(jī)中的存儲(chǔ)結(jié)構(gòu)可以分成兩類缘滥,分別是線性存儲(chǔ)結(jié)構(gòu)和鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)限次。

3、常見(jiàn)算法和算法的重要性

例如:計(jì)算1+2+3+...+1000的和

方法一:


Public int add(){
  int sum = 0;
  for(int i=1;i<=1000;i++){
    sum +=i;
  }
  return sum;
}

方法二:

Public int add(){
  int sum = 0普气;
  sum = 1000*(1+1000)/2
  return sum;
}

分析:

假定方法內(nèi)每一條語(yǔ)句執(zhí)行時(shí)間為1unit_time,

方法一循環(huán)執(zhí)行了(1+2*1000+1)unit_time盗尸,方法二執(zhí)行時(shí)間(1+1+1)unit_time;從上面兩種方式計(jì)算sum柑船,可以得出:好的算法真的很重要

二、時(shí)間復(fù)雜度分析

1泼各、時(shí)間復(fù)雜淺析

漸進(jìn)時(shí)間復(fù)雜度是隨著數(shù)據(jù)規(guī)模N增大而變化的趨勢(shì)鞍时,是衡量一個(gè)算法好壞的標(biāo)準(zhǔn)。時(shí)間復(fù)雜度包含最好時(shí)間復(fù)雜度扣蜻、平均時(shí)間復(fù)雜度逆巍、最壞時(shí)間復(fù)雜度。


Public int find(int[] arr,int n,int data){
  for(int i=0;i<n;i++){
    if(arr[i] == data) {
    return i;
    break莽使;
    }
  }
  return -1;
}

上面方法是從數(shù)組中查找數(shù)據(jù)锐极,如果找到數(shù)據(jù)返回?cái)?shù)組下標(biāo),如果沒(méi)找到芳肌,則返回-1灵再。arr是數(shù)組引用肋层,n是數(shù)組長(zhǎng)度,data是待查找數(shù)據(jù)翎迁。

最好時(shí)間復(fù)雜度:當(dāng)開(kāi)始遍歷數(shù)組時(shí)栋猖,正好第一個(gè)數(shù)就是我們需要的查找的數(shù)據(jù),時(shí)間復(fù)雜度O(1)汪榔;

最壞時(shí)間復(fù)雜度:當(dāng)遍歷完數(shù)組蒲拉,還是沒(méi)有找到我們需要的數(shù)據(jù),時(shí)間復(fù)雜度O(n)揍异;

平均時(shí)間復(fù)雜度:平均復(fù)雜度計(jì)算方法全陨,(1+2+3+...+n-1+n)/n=n*(n+1)/2n,時(shí)間復(fù)雜度O(n)衷掷。

2、時(shí)間復(fù)雜度大O表示法

推導(dǎo)大O階柿菩,我們可以按照如下的規(guī)則來(lái)進(jìn)行推導(dǎo)戚嗅,得到的結(jié)果就是大O表示法:

1、用常數(shù)1來(lái)取代運(yùn)行時(shí)間中所有加法常數(shù)枢舶。

2懦胞、修改后的運(yùn)行次數(shù)函數(shù)中,只保留最高階項(xiàng)

3凉泄、如果最高階項(xiàng)存在且不是1躏尉,則去除與這個(gè)項(xiàng)相乘的常數(shù)。

常見(jiàn)時(shí)間復(fù)雜度比較:

O(1) < O(lgn) < O(n) < O(nlgn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)

image

三后众、空間復(fù)雜度分析

類似時(shí)間復(fù)雜度胀糜,空間復(fù)雜度是一個(gè)算法占用存儲(chǔ)空間,和數(shù)據(jù)規(guī)模N成漸進(jìn)關(guān)系蒂誉。

空間復(fù)雜度占用空間包含三個(gè)方面:

1教藻、算法本身占用空間;

2右锨、算法輸入輸出占用空間括堤;

3、在計(jì)算的過(guò)程中绍移,臨時(shí)申請(qǐng)的內(nèi)存占用的空間悄窃。

算法在執(zhí)行的過(guò)程中,占用的空間不隨數(shù)據(jù)規(guī)則N變化而變化蹂窖,這樣的算法是"就地"進(jìn)行的轧抗。算法空間復(fù)雜度是一個(gè)常量,占用空間不隨數(shù)據(jù)規(guī)模變化而變化恼策,空間復(fù)雜度則為O(1),分析占用空間方法和時(shí)間復(fù)雜度類似鸦致。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末潮剪,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子分唾,更是在濱河造成了極大的恐慌抗碰,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绽乔,死亡現(xiàn)場(chǎng)離奇詭異弧蝇,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)折砸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)看疗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人睦授,你說(shuō)我怎么就攤上這事两芳。” “怎么了去枷?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵怖辆,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我删顶,道長(zhǎng)竖螃,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任逗余,我火速辦了婚禮特咆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘录粱。我一直安慰自己腻格,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布关摇。 她就那樣靜靜地躺著荒叶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪输虱。 梳的紋絲不亂的頭發(fā)上些楣,一...
    開(kāi)封第一講書(shū)人閱讀 49,772評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音宪睹,去河邊找鬼愁茁。 笑死,一個(gè)胖子當(dāng)著我的面吹牛亭病,可吹牛的內(nèi)容都是我干的鹅很。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼罪帖,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼促煮!你這毒婦竟也來(lái)了邮屁?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤菠齿,失蹤者是張志新(化名)和其女友劉穎佑吝,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體绳匀,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡芋忿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了疾棵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片戈钢。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖是尔,靈堂內(nèi)的尸體忽然破棺而出殉了,到底是詐尸還是另有隱情,我是刑警寧澤拟枚,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布宣渗,位于F島的核電站,受9級(jí)特大地震影響梨州,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜田轧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一暴匠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧傻粘,春花似錦每窖、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至稽莉,卻和暖如春瀑志,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背污秆。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工劈猪, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人良拼。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓战得,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親庸推。 傳聞我的和親對(duì)象是個(gè)殘疾皇子常侦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容