【原創(chuàng)連載】算法素顏(第4篇):空間復(fù)雜度你真的懂了嗎?

創(chuàng)作時(shí)間:2019-03-28

作者:周林

版權(quán)所有,轉(zhuǎn)載請(qǐng)聯(lián)系作者獲取授權(quán)、并注明作者與出處

周林的頭條首發(fā)

周林的簡(jiǎn)書(shū)主頁(yè)

周林的CSDN博客主頁(yè)

周林的知乎主頁(yè)

在本系列第1篇《走下神壇吧!算法》中提到了:計(jì)算復(fù)雜度分為時(shí)間復(fù)雜度與空間復(fù)雜度,第3篇《KO!大O——時(shí)間復(fù)雜度》詳細(xì)介紹了時(shí)間復(fù)雜度,本篇文章來(lái)講講空間復(fù)雜度。


空間復(fù)雜度和硬件資源開(kāi)銷(xiāo)是一回事情嗎?

CPU資源開(kāi)銷(xiāo)分析:


CPU的資源的設(shè)計(jì)初衷更多的是用于提升計(jì)算性能;

對(duì)CPU資源的利用,基本原則都是“多多(占用、發(fā)揮)益善;

加之CPU的資源空間大小與內(nèi)存、外存和外設(shè)比較,非常有限。

內(nèi)存資源開(kāi)銷(xiāo)分析:

靜態(tài)視角:程序要裝進(jìn)內(nèi)存才能運(yùn)行

動(dòng)態(tài)視角:程序在運(yùn)行時(shí),動(dòng)態(tài)申請(qǐng)內(nèi)存

外存資源開(kāi)銷(xiāo)分析:

靜態(tài)視角:程序本身,以二進(jìn)制可執(zhí)行映像形態(tài),存放在外存上的大小

動(dòng)態(tài)視角:程序在運(yùn)行時(shí),對(duì)外存的需求大?。ū热?,在進(jìn)行大數(shù)據(jù)處理時(shí),將中間結(jié)果暫存到外存,騰出內(nèi)存空間來(lái)做計(jì)算)

外設(shè)資源開(kāi)銷(xiāo)分析:

發(fā)明DMA、GPU的初衷是分擔(dān)CPU工作量,提升計(jì)算機(jī)系統(tǒng)的整體性能。

計(jì)算與存儲(chǔ)是計(jì)算機(jī)系統(tǒng)的兩大功用,空間復(fù)雜度體現(xiàn)存儲(chǔ)指標(biāo)。

不同算法實(shí)現(xiàn)的程序的二進(jìn)制可執(zhí)行映像的大小,只要不是太爛,通常來(lái)說(shuō),不會(huì)有量級(jí)上的差別。

綜上所述,我們可以得到如下兩個(gè)結(jié)論:

1. 空間復(fù)雜度聚焦內(nèi)存與外存的開(kāi)銷(xiāo)

2. 空間復(fù)雜度聚焦動(dòng)態(tài)視角

特別地,研究?jī)?nèi)存的開(kāi)銷(xiāo),就要了解內(nèi)存模型:

進(jìn)一步分解,就是以下三個(gè)方面:

程序運(yùn)行時(shí),靜態(tài)內(nèi)存分配量(靜態(tài)區(qū))

程序運(yùn)行時(shí),動(dòng)態(tài)內(nèi)存分配量(堆棧、堆)

程序運(yùn)行時(shí),外存需求量

靜態(tài)內(nèi)存分配

這部分內(nèi)存分配是用于全局變量和常量的,識(shí)別出這些變量類(lèi)型,并計(jì)算出對(duì)應(yīng)的大小,也就得到了該部分內(nèi)存分配的需求量。具體的方法就是在源代碼中找到這些變量聲明、定義的地方,然后根據(jù)類(lèi)型來(lái)計(jì)算大小。

動(dòng)態(tài)內(nèi)存分配

對(duì)于堆:對(duì)應(yīng)動(dòng)態(tài)分配“原語(yǔ)”,如 new方法、malloc函數(shù)等。

對(duì)于堆棧:局部變量對(duì)應(yīng)這一部分,其大小呼應(yīng)這部分的內(nèi)存分配大小。

程序運(yùn)行時(shí)的外存需求

要搞清楚程序運(yùn)行時(shí)對(duì)外存的需求,首先要找到對(duì)外存的訪問(wèn)。

對(duì)于高級(jí)語(yǔ)言而言,外存是被操作系統(tǒng)抽象成文件來(lái)被訪問(wèn)的。所以找到了文件訪問(wèn)的“原語(yǔ)”,也就定位到了對(duì)外存的訪問(wèn)。

“文件寫(xiě)原語(yǔ)”: 如writeFile()等。作用是把內(nèi)存中裝載的數(shù)據(jù)放到文件中去,對(duì)文件大小的占用就反映了對(duì)外存的需求量。

“文件讀原語(yǔ)”:如readFile()等。作用是把外存文件中的內(nèi)容放到內(nèi)存中去。所涉及的內(nèi)容大小就反映了對(duì)外存的需求量。

從上面的分析可以看出:外存的需求量取決于訪問(wèn)的文件內(nèi)容大小,后者又和涉及的內(nèi)存大小相關(guān)。所以可以用所涉及的內(nèi)存大小來(lái)表征對(duì)外存的需求量。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. 基礎(chǔ)知識(shí) 1.1、 基本概念、 功能 馮諾伊曼體系結(jié)構(gòu)1、計(jì)算機(jī)處理的數(shù)據(jù)和指令一律用二進(jìn)制數(shù)表示2、順序執(zhí)...
    yunpiao閱讀 5,795評(píng)論 1 22
  • 操作系統(tǒng)概論 操作系統(tǒng)的概念 操作系統(tǒng)是指控制和管理計(jì)算機(jī)的軟硬件資源,并合理的組織調(diào)度計(jì)算機(jī)的工作和資源的分配,...
    野狗子嗷嗷嗷閱讀 12,480評(píng)論 3 34
  • 8.1虛擬存儲(chǔ)的需求背景 虛擬內(nèi)存是非連續(xù)內(nèi)存分配的一個(gè)延續(xù),非連續(xù)內(nèi)存分配在存儲(chǔ)空間內(nèi)可以連續(xù)也可以不連續(xù)。虛擬...
    龜龜51閱讀 6,287評(píng)論 2 6
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類(lèi)型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,665評(píng)論 1 32
  • (一)街頭藝術(shù)家的用戶體驗(yàn) 在城市那些大大小小的路口,我們不難看到有些人在街頭賣(mài)藝謀生。平時(shí)看到那些人,我都會(huì)快步...
    婆婆丁沒(méi)有暑假閱讀 133評(píng)論 0 0

友情鏈接更多精彩內(nèi)容