大廠面試復(fù)習(xí)打卡第3天---算法概念介紹骂澄,空間復(fù)雜度講解

1? 算法概念

?????軟件 的 最終 成果 都是 以 程序 的 形式 表現(xiàn) 的癣疟, 數(shù)據(jù) 結(jié)構(gòu) 的 各種 操作 都是 以 算法 的 形式 描述 的挣柬。 數(shù)據(jù) 結(jié)構(gòu)、 算法 和 程序 是 密不可分 的睛挚。 三 者 的 關(guān)系 正如 瑞士 蘇黎世 聯(lián)邦 工業(yè) 大學(xué) 著名 計(jì)算機(jī) 科學(xué)家 沃 思( Wirth) 提出 的 一個(gè) 公式: 數(shù)據(jù) 結(jié)構(gòu)+ 算法= 程序邪蛔。 其中, 算法 是 靈魂扎狱, 它 解決“ 做 什么” 和“ 怎么 做” 的 問題侧到。 在給 出 算法 的 概念 之前, 先 舉 兩個(gè) 例子 來說 明 什么 是 算法淤击。

?例1   求 1+ 2+ 3+ 4+…+ 100=匠抗?

?方法 1: 直接 相加, 得出 結(jié)果污抬。?

方法 2:= 100+( 1+ 99)+( 2+ 98)+…+( 49+ 51)+ 50      = 50* 100+ 50      = 5050?

例2   求 1* 2* 3* 4* 5=汞贸??

最 原始 的 方法: S1: 先 求 1* 2, 得 2印机。        ?

S2: 將 2* 3矢腻, 得 6。

S3: 將 6* 4射赛, 得 24多柑。      ?

S4: 將 24* 5= 120, 便得 到 最后 的 結(jié)果咒劲。

若 求 1* 2* 3*…* 1000=顷蟆?, 再用 此 方法 就不 可行腐魂。 因?yàn)?需要 999 個(gè) 步驟帐偎, 故要 找 一種 通用 的 方法。 可設(shè) 兩個(gè) 變量蛔屹, 一個(gè) 變量 代表 被乘數(shù)( p)削樊, 一個(gè) 變量 代表 乘數(shù)( i)。 S1: 使 p= 1兔毒。 S2: 使 i= 2漫贞。 S3: 使 p* i, 將 p* i= > p育叁。 S4: i+ 1= > i迅脐。 S5: 若 i 不大于 5, 返回 重新 執(zhí)行 S3豪嗽、 S4 和 S5谴蔑; 否則豌骏, 算法 結(jié)束。?

可見隐锭, 算法( Algorithm) 是對(duì) 特定 問題 求解 步驟 的 一種 描述窃躲, 是 指令 的 有限 序列。 其中 每 一條 指令 表示 一個(gè) 或 多個(gè) 操作钦睡。


2? 算法的特征

算法 的 特征

一個(gè) 算法 應(yīng)該 具有 下列 特性蒂窒。

?① 有 窮 性: 一個(gè) 算法 應(yīng) 包含 有限 的 操作步驟, 而 不能 是 無限 的荞怒。?

② 確定性: 每一 步 應(yīng)是 確定 的洒琢, 而 不應(yīng) 是 含糊 的、 模棱兩可 的挣输, 即 無 二義性纬凤。

?③ 有 輸入: 有零 個(gè) 或 多個(gè) 輸入。

?④ 有 輸出: 有一個(gè) 或 多個(gè) 輸出撩嚼, 算法 的 目的 是 為了“ 解”停士, 求 結(jié)果。 所以完丽, 沒有 輸出 的 算法 是 沒有 意義 的恋技。

?⑤ 有效性( 可行性)。 算法 中的 每一 步 都應(yīng) 能 有效地 執(zhí)行逻族, 并 得到 確定 的 結(jié)果蜻底, 如 b= 0, 則 表達(dá)式 a/ b 是 不能 有效 執(zhí)行 的聘鳞。


3? 算法 分析

? ? ? ? ? 我們常常說時(shí)間復(fù)雜度薄辅,空間復(fù)雜度,但是涉及到具體的算法分析的時(shí)候不知道怎么去計(jì)算復(fù)雜點(diǎn)的時(shí)間復(fù)雜度抠璃,下面為大家理清一下站楚,參考《數(shù)據(jù)結(jié)構(gòu)》一書

? ? ? ? ? ? ?衡量 算法 優(yōu)劣 最重要的 一點(diǎn) 是 效率 與 低 存儲(chǔ) 量 要求。 算法 效率( 算法 運(yùn)行 的 時(shí)間) 由 時(shí)間 復(fù)雜度 來 度量搏嗡。 一般窿春, 鑒于 空間( 內(nèi)存) 較為 充足, 故 把 算法 的 時(shí)間 復(fù)雜度 作為 分析 的 重點(diǎn)采盒。 在 求 時(shí)間 復(fù)雜度 之前旧乞, 先 介紹 頻度 統(tǒng)計(jì)法。

?????????????頻度: 一條 語句 的 頻度 是指 該 語句 被 執(zhí)行 的 次數(shù)磅氨。 而 整個(gè) 算法 的 頻度 是指 算法 中 所有 基本 語句 的 頻度 之和尺栖。

例如:求下面的語句頻度


分析: 該 算法 為 一個(gè) 二重 循環(huán), 執(zhí)行 次數(shù) 為 內(nèi)烦租、 外 循環(huán) 次數(shù) 相乘延赌, 因此 頻度= n2(2是指數(shù)货徙,不知道怎么打出來,后面如果2在后面的話都表示指數(shù))皮胡。


3.1??時(shí)間 復(fù)雜度

? ??????在 剛才 提到 的 算法 頻度 中, n 稱為 問題 的 規(guī)模( 通常用 正 整數(shù) n 表示)赏迟。 當(dāng) n 不斷 變化 時(shí)屡贺, 語句 頻度 也會(huì) 不斷 變化。 但 有時(shí) 我們 想知道 它 變化 時(shí) 呈現(xiàn) 什么 規(guī)律锌杀。 為此甩栈, 我們 引入 時(shí)間 復(fù)雜度 概念。 或者說 時(shí)間 復(fù)雜度 是 問題 規(guī)模 的 函數(shù)糕再。 但 算法 的 時(shí)間 復(fù)雜度 考慮 的 只是 對(duì) 問題 規(guī)模 n 的 增長率量没, 難以 精確 計(jì)算 出 語句 頻度, 只需 求出 它 關(guān)于 n 的 增長率 或 階( 數(shù)量級(jí)) 即可突想。

? ??????一般 情況下殴蹄, 算法 中 基本 操作 重復(fù) 執(zhí)行 的 次數(shù) 是 問題 規(guī)模 n 的 某個(gè) 函數(shù) f( n), 記作 T( n)= O( f( n))猾担。

其中袭灯, T( n) 表示 時(shí)間 復(fù)雜度, 大寫字母 O 為 英文 Order( 即 數(shù)量級(jí)) 單詞 的 第一個(gè) 字母绑嘹。

例如稽荧,


語句 x= x+ 1 執(zhí)行 次數(shù) 關(guān)于 n 的 增長率 為 n2, 故 它的 時(shí)間 復(fù)雜度 T( n)= O( n2)工腋。


可能這個(gè)比較簡單姨丈,下面看看復(fù)雜點(diǎn)的時(shí)間復(fù)雜度

求出 下列 算法 段 的 時(shí)間 復(fù)雜度。


分析可知:(1)? ? T( n)= O(1) 常數(shù)級(jí)

(2)? ?T(n) = O(n)

第三段代碼(3)? ①的頻度是n-1(因?yàn)閗<n,沒有等于)? ? ? ②的頻度是T(n) = (n-1)* (2n +1) =?2n2- n- 1? ?則 該 程序 段 的 時(shí)間 復(fù)雜度 T( n)= n- 1+ 2n2- n- 1= O( n2)擅腰。

第 4 段 代碼 是 三層 for 循環(huán)蟋恬, 故 時(shí)間 復(fù)雜度 為 O( n3)。

第 5 段 代碼 中的 語句 ① 的 頻度 是 1惕鼓, 語句 ② 的 頻度 設(shè)為 f( n)筋现, 則有 2 f( n) ≤ n, 即 f( n) ≤ log2n箱歧, 取 最大值 f( n)= log2n矾飞。 故 該 程序 段 的 時(shí)間 復(fù)雜度 T( n)= 1+ log2n= O( log2n)。很多人可能不理解2 f( n) ≤ n是怎么得來的呀邢,大家可以把n設(shè)置為10洒沦,帶入去計(jì)算一下,你會(huì)發(fā)現(xiàn)?2 f( n) ≤ n? 總會(huì)成立价淌。


總結(jié): 在各 種 不同 算法 中申眼, 若 程序 的 運(yùn)行 時(shí)間 不隨 著 問題 規(guī)模 n 的 增加 而 增長瞒津, 即使 算法 中有 上千 條 語句, 其 執(zhí)行 時(shí)間 也不 過 是一 個(gè) 較大 的 常數(shù)括尸, 此類 算法 的 時(shí)間 復(fù)雜度 仍是 O( 1)巷蚪。 另外, 在 頻度 不相 同時(shí)濒翻, 時(shí)間 復(fù)雜度 有可能 相同屁柏, 如 T( n)= n2+ 3n+ 4 與 T( n)= 4n2+ 2n+ 1 的 頻度 不同, 但 時(shí)間 復(fù)雜度 相同有送, 都為 O( n2)淌喻。 按 數(shù)量級(jí) 遞增 排列, 常見 的 時(shí)間 復(fù)雜度 有 常數(shù) 階 O( 1)雀摘、 對(duì)數(shù) 階 O( log2n)裸删、 線性 階 O( n)、 線性 對(duì)數(shù) 階 O( nlog2n)阵赠、 平方 階 O( n2)涯塔、 立方 階 O( n3)… k 次方 階 O( nk)、 指數(shù) 階 O( 2n)清蚀。 隨著 問題 規(guī)模 n 的 不斷 增大伤塌, 上述 時(shí)間 復(fù)雜度 不斷 增大, 算法 的 執(zhí)行 效率 降低轧铁。



3.2 空間復(fù)雜度

????????????一個(gè) 程序 需要 的 空間 即 存儲(chǔ) 量每聪, 包括 輸入 數(shù)據(jù) 所占 空間、 程序 本身 所占 空間 和 輔助 變量 所占 空間齿风。 我們 一般 是 討論 算法 占用 的 輔助 存儲(chǔ) 空間药薯, 即 空間 復(fù)雜度 是對(duì) 一個(gè) 算法 在 運(yùn)行 過程中 臨時(shí) 占用 的 存儲(chǔ) 空間 大小 的 量度。 一般 也作 為 問題 規(guī)模 n 的 函數(shù)救斑, 以 數(shù)量級(jí) 形式 給出童本, 記作: S( n)= O( g( n))

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市脸候,隨后出現(xiàn)的幾起案子穷娱,更是在濱河造成了極大的恐慌,老刑警劉巖运沦,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泵额,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡携添,警方通過查閱死者的電腦和手機(jī)嫁盲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來烈掠,“玉大人羞秤,你說我怎么就攤上這事缸托。” “怎么了瘾蛋?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵俐镐,是天一觀的道長。 經(jīng)常有香客問我哺哼,道長京革,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任幸斥,我火速辦了婚禮,結(jié)果婚禮上咬扇,老公的妹妹穿的比我還像新娘甲葬。我一直安慰自己,他們只是感情好懈贺,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布经窖。 她就那樣靜靜地躺著白嘁,像睡著了一般柿扣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上姓惑,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天堡妒,我揣著相機(jī)與錄音配乱,去河邊找鬼。 笑死皮迟,一個(gè)胖子當(dāng)著我的面吹牛搬泥,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播伏尼,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼忿檩,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了爆阶?” 一聲冷哼從身側(cè)響起燥透,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎辨图,沒想到半個(gè)月后班套,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡故河,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年孽尽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片忧勿。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡杉女,死狀恐怖瞻讽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情熏挎,我是刑警寧澤速勇,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站坎拐,受9級(jí)特大地震影響烦磁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜哼勇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一都伪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧积担,春花似錦陨晶、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至的烁,卻和暖如春褐耳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背渴庆。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工铃芦, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人襟雷。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓杨帽,卻偏偏與公主長得像,于是被迫代替她去往敵國和親嗤军。 傳聞我的和親對(duì)象是個(gè)殘疾皇子注盈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

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