算法

來(lái)源:開發(fā)者應(yīng)該掌握的幾種排序算法 - 簡(jiǎn)書

來(lái)源:ios面試數(shù)據(jù)結(jié)構(gòu)與算法 - CSDN博客

首先要知道一個(gè)算法的好壞主要是從算法的時(shí)間復(fù)雜度赞别、空間復(fù)雜度和穩(wěn)定性來(lái)衡量汰瘫。

實(shí)際上把求解問(wèn)題的關(guān)鍵操作贸伐,如加減和比較運(yùn)算指定為基本操作蹦肴,然后把算法執(zhí)行基本操作的次數(shù)作為算法的時(shí)間復(fù)雜度浮定,而算法執(zhí)行期間占用的存儲(chǔ)單元的數(shù)量成為算法的空間復(fù)雜度扇苞。

一個(gè)算法的時(shí)間耗費(fèi)就是該算法鐘所有語(yǔ)句的頻率值和(記做T(n))。當(dāng)問(wèn)題規(guī)模n無(wú)窮大時(shí)橡娄,T(n)的數(shù)量級(jí)成為時(shí)間復(fù)雜度诗箍,記做T(n)=O(f(n))

常見的 時(shí)間復(fù)雜度有O(1)叫常數(shù)階,O(n)叫做線性階挽唉,O(n^2)叫做平方階?

1滤祖、常數(shù)階

執(zhí)行的次數(shù)都是恒定的,不會(huì)隨著n的變化而變化瓶籽,所以單純的分支接受匠童,其時(shí)間復(fù)雜度也是O(1)。

2棘劣、線性階

線性階最具典型的例子就是迭代俏让。例如遍歷數(shù)組的中的每一個(gè)元素。整個(gè)遍歷過(guò)程總時(shí)間和數(shù)組的長(zhǎng)度呈正比(線性增長(zhǎng))茬暇。

3首昔、對(duì)數(shù)階

var count =1?

while count < n {? ? ? ? ? ??

count = count *2

}

上述代碼中不難法相,當(dāng)count大于等于n的時(shí)候糙俗,整個(gè)循環(huán)就結(jié)束了勒奇。可以看出再次之前巧骚,循環(huán)執(zhí)行次數(shù)符合:2^x=n這個(gè)公式赊颠,x=log2n。所以上述代碼的時(shí)間復(fù)雜度為O(logn)劈彪。

4竣蹦、平方階

平方階就不做過(guò)多解釋,簡(jiǎn)單想象for循環(huán)嵌套for循環(huán)便理解了沧奴。


冒泡排序 - 簡(jiǎn)書

選擇排序 - 簡(jiǎn)書

插入排序 - 簡(jiǎn)書

快速排序 - 簡(jiǎn)書

歸并排序 - 簡(jiǎn)書

二分查找 - 簡(jiǎn)書

希爾排序 - 簡(jiǎn)書





五 堆排序?

?是具有下列性質(zhì)的完全二叉樹:每個(gè)節(jié)點(diǎn)的值都大于或等于其左右孩子節(jié)點(diǎn)的值痘括,稱為大頂堆;或者每個(gè)節(jié)點(diǎn)的值都小于或等于其左右孩子結(jié)點(diǎn)的值稱為小頂堆滔吠。

來(lái)源:圖解排序算法(三)之堆排序 - dreamcatcher-cx - 博客園

堆排序的基本思想是:將待排序序列構(gòu)造成一個(gè)大頂堆纲菌,此時(shí),整個(gè)序列的最大值就是堆頂?shù)母?jié)點(diǎn)疮绷。將其與末尾元素進(jìn)行交換翰舌,此時(shí)末尾就為最大值。然后將剩余n-1個(gè)元素重新構(gòu)造成一個(gè)堆冬骚,這樣會(huì)得到n個(gè)元素的次小值椅贱。如此反復(fù)執(zhí)行懂算,便能得到一個(gè)有序序列了

圖解:圖解排序算法(三)之堆排序 - dreamcatcher-cx - 博客園

六 哈夫曼樹


又稱最優(yōu)二叉樹,是指一組帶有確定確定權(quán)值的葉子節(jié)點(diǎn)所構(gòu)造的確有帶全路徑長(zhǎng)度最短的二叉樹庇麦,聰樹中的一個(gè)結(jié)點(diǎn)到另一個(gè)結(jié)點(diǎn)之間的分支構(gòu)成了兩結(jié)點(diǎn)之間的路徑犯犁,路徑中的分支個(gè)數(shù)成為路徑長(zhǎng)度,二叉樹的路徑長(zhǎng)度是指由根節(jié)點(diǎn)到所有葉子節(jié)點(diǎn)的路徑長(zhǎng)度之和女器。





七 Hash算法

哈希算法詳解(附帶 iOS 開發(fā)中實(shí)際應(yīng)用) - 簡(jiǎn)書

Hash表采用一個(gè)映射函數(shù) f :key —> address 將關(guān)鍵字映射到該記錄在表中的存儲(chǔ)位置,從而在想要查找該記錄時(shí)住诸,可以直接根據(jù)關(guān)鍵字和映射關(guān)系計(jì)算出該記錄在表中的存儲(chǔ)位置驾胆,通常情況下,這種映射關(guān)系稱作為Hash函數(shù)贱呐,而通過(guò)Hash函數(shù)和關(guān)鍵字計(jì)算出來(lái)的存儲(chǔ)位置(注意這里的存儲(chǔ)位置只是表中的存儲(chǔ)位置丧诺,并不是實(shí)際的物理地址)稱作為Hash地址。比如上述例子中奄薇,假如聯(lián)系人信息采用Hash表存儲(chǔ)驳阎,則當(dāng)想要找到 “l(fā)isi” 的信息時(shí),直接根據(jù) “l(fā)isi” 和 Hash 函數(shù)計(jì)算出 Hash 地址即可馁蒂。

?Hash 表的優(yōu)缺點(diǎn)及注意點(diǎn)

優(yōu)點(diǎn)

哈希表的效率非常高呵晚,查找、插入沫屡、刪除操作只需要接近常量的時(shí)間即0(1)的時(shí)間級(jí)饵隙。如果需要在一秒種內(nèi)查找上千條記錄通常使用哈希表,哈希表的速度明顯比樹快沮脖,樹的操作通常需要O(N)的時(shí)間級(jí)金矛。哈希表不僅速度快,編程實(shí)現(xiàn)也相對(duì)容易勺届。如果不需要遍歷數(shù)據(jù)驶俊,不二的選擇。

缺點(diǎn)

它是基于數(shù)組的免姿,數(shù)組創(chuàng)建后難于擴(kuò)展饼酿。有些情況下,哈希表被基本填滿時(shí)养泡,性能下降得非常嚴(yán)重嗜湃,所以開發(fā)者必須要清楚表中將要存儲(chǔ)的數(shù)據(jù)量±窖冢或者也可以定期地把數(shù)據(jù)轉(zhuǎn)移到更大的哈希表中购披,不過(guò)這個(gè)過(guò)程耗時(shí)相對(duì)比較大。

注意點(diǎn)

在設(shè)計(jì)Hash算法的時(shí)候肩榕。一定要保證相同字符串產(chǎn)生的 Hash 值相同刚陡,同時(shí)要盡量的減小Hash沖突的發(fā)生惩妇,這樣才算是好的 hash 算法。

iOS系統(tǒng)API給我們提供一個(gè)自動(dòng)過(guò)濾重復(fù)元素的容器 NSMutableSet/NSSet筐乳,如:當(dāng)我們向該實(shí)例對(duì)象中添加字符串時(shí)歌殃,如果重復(fù)添加兩個(gè)相同的字符串,集合中只會(huì)保留一個(gè)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蝙云,一起剝皮案震驚了整個(gè)濱河市氓皱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌勃刨,老刑警劉巖波材,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異身隐,居然都是意外死亡廷区,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門贾铝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)隙轻,“玉大人,你說(shuō)我怎么就攤上這事垢揩【谅蹋” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵叁巨,是天一觀的道長(zhǎng)镰矿。 經(jīng)常有香客問(wèn)我,道長(zhǎng)俘种,這世上最難降的妖魔是什么秤标? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮宙刘,結(jié)果婚禮上苍姜,老公的妹妹穿的比我還像新娘。我一直安慰自己悬包,他們只是感情好衙猪,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著布近,像睡著了一般垫释。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上撑瞧,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天棵譬,我揣著相機(jī)與錄音,去河邊找鬼预伺。 笑死订咸,一個(gè)胖子當(dāng)著我的面吹牛曼尊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播脏嚷,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼骆撇,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了父叙?” 一聲冷哼從身側(cè)響起神郊,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎趾唱,沒(méi)想到半個(gè)月后屿岂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鲸匿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了阻肩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片带欢。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖烤惊,靈堂內(nèi)的尸體忽然破棺而出乔煞,到底是詐尸還是另有隱情,我是刑警寧澤柒室,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布渡贾,位于F島的核電站,受9級(jí)特大地震影響雄右,放射性物質(zhì)發(fā)生泄漏空骚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一擂仍、第九天 我趴在偏房一處隱蔽的房頂上張望囤屹。 院中可真熱鬧,春花似錦逢渔、人聲如沸肋坚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)智厌。三九已至,卻和暖如春盲赊,著一層夾襖步出監(jiān)牢的瞬間铣鹏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工哀蘑, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留吝沫,地道東北人呻澜。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像惨险,于是被迫代替她去往敵國(guó)和親羹幸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

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

  • 總結(jié)一下常見的排序算法辫愉。 排序分內(nèi)排序和外排序栅受。內(nèi)排序:指在排序期間數(shù)據(jù)對(duì)象全部存放在內(nèi)存的排序。外排序:指在排序...
    jiangliang閱讀 1,334評(píng)論 0 1
  • 【程序1】 題目:古典問(wèn)題:有一對(duì)兔子恭朗,從出生后第3個(gè)月起每個(gè)月都生一對(duì)兔子屏镊,小兔子長(zhǎng)到第三個(gè)月后每個(gè)月又生一...
    阿里高級(jí)軟件架構(gòu)師閱讀 3,281評(píng)論 0 19
  • 排序算法說(shuō)明 (1)排序的定義:對(duì)一序列對(duì)象根據(jù)某個(gè)關(guān)鍵字進(jìn)行排序; 輸入:n個(gè)數(shù):a1,a2,a3,…,an 輸...
    code武閱讀 653評(píng)論 0 0
  • 院雕力量 運(yùn)玉為物 留時(shí)印痕 太湖石系列 2014年到山西平遙寫生痰腮,藝術(shù)家張文靜在一個(gè)公園看到了一座太湖石孤零零的...
    騰玉空間閱讀 690評(píng)論 0 2
  • 2017.10.26 班級(jí):17助產(chǎn) 主題:總結(jié)性班會(huì) 地點(diǎn):教室 成員:17助產(chǎn)全體成員而芥,班主任單蕾演講 開學(xué)...
    衛(wèi)校一七助產(chǎn)閱讀 151評(píng)論 0 0