數(shù)據(jù)結(jié)構(gòu)和算法緒論 學(xué)習(xí)筆記(二)

之前沒(méi)怎么用過(guò)算法,但最近在看理論的時(shí)候,發(fā)現(xiàn)其中的一些點(diǎn)其實(shí)在我們?nèi)粘5木幋a中也是很有體現(xiàn)的......

  • 空間復(fù)雜度和時(shí)間復(fù)雜度
  • 算法再體驗(yàn)

空間復(fù)雜度和時(shí)間復(fù)雜度

效率高一般是指的是算法的執(zhí)行時(shí)間,然而一般具體是怎么衡量的呢?
一般算法效率的度量方法(在計(jì)算機(jī)程序編寫之前,依據(jù)統(tǒng)計(jì)方法進(jìn)行統(tǒng)計(jì)):

1、算法采用的策略,方案
2、編譯產(chǎn)生的代碼質(zhì)量
3、問(wèn)題的輸入規(guī)模
4、機(jī)器執(zhí)行指令的速度

從整體依賴于算法的好壞和問(wèn)題的輸入規(guī)模。

簡(jiǎn)單對(duì)比

一個(gè)算法是由控制結(jié)構(gòu)(順序、分支和循環(huán)3種)和原操作(指固有數(shù)據(jù)類型的操作)構(gòu)成的,則算法時(shí)間取決于兩者的綜合效果。

為了便于比較同一個(gè)問(wèn)題的不同算法,通常的做法是,從算法中選取一種對(duì)于所研究的問(wèn)題(或算法類型)來(lái)說(shuō)是基本操作的原操作,以該基本操作的重復(fù)執(zhí)行的次數(shù)作為算法的時(shí)間量度。


算法時(shí)間復(fù)雜度
  • 時(shí)間頻率: 一個(gè)算法執(zhí)行所耗費(fèi)的時(shí)間,從理論上是不能算出來(lái)的,必須上機(jī)運(yùn)行測(cè)試才能知道。
    一個(gè)算法中的語(yǔ)句執(zhí)行次數(shù)稱為語(yǔ)句頻度時(shí)間頻度,記為T(n)。

  • 時(shí)間復(fù)雜度:在剛才提到的時(shí)間頻度中,n稱為問(wèn)題的規(guī)模,當(dāng)n不斷變化時(shí),時(shí)間頻度T(n) 也會(huì)不斷變化。但有時(shí)我們想知道它變化時(shí)呈現(xiàn)什么規(guī)律。為此,我們引入時(shí)間復(fù)雜度概念。 一般情況下,算法中基本操作重復(fù)執(zhí)行的次數(shù)是問(wèn)題規(guī)模n的某個(gè)函數(shù),用 T(n) 表示,若有某個(gè)輔助函數(shù) f(n), 使得當(dāng)n趨近于無(wú)窮大時(shí),T(n)/f(n)的極限值為不等于零的常數(shù),則稱f(n)是T(n)的同數(shù)量級(jí)函數(shù)。記作**T(n) = O(f(n)) , O(f(n)) ** 為算法的漸進(jìn)時(shí)間復(fù)雜度,簡(jiǎn)稱時(shí)間復(fù)雜度。

在算法分析時(shí),往往對(duì)算法的時(shí)間復(fù)雜度和漸近時(shí)間復(fù)雜度不予區(qū)分,而經(jīng)常是將漸近時(shí)間復(fù)雜度 T(n) = O(f(n)) 簡(jiǎn)稱為時(shí)間復(fù)雜度,其中的 f(n) 一般是算法中頻度最大的語(yǔ)句頻度。

算法空間復(fù)雜度

類似于算法的時(shí)間復(fù)雜度,空間復(fù)雜度作為算法所需存儲(chǔ)空間的量度。

一個(gè)執(zhí)行的程序除了需要存儲(chǔ)空間來(lái)寄存本身隨用的指令,常數(shù)、變量和輸入數(shù)據(jù)外,也需要一些對(duì)數(shù)據(jù)進(jìn)行操作的工作單元和存儲(chǔ)一些為實(shí)現(xiàn)所需信息的輔助空間。

若輸入數(shù)據(jù)所占的控件只取決于問(wèn)題本身,和算法無(wú)關(guān),則只需要分析除輸入和程序之外的額外空間,否則需要考慮輸入本身所需的空間。

  • 固定部分: 這塊的固定空間的大小與輸入/輸出的數(shù)據(jù)的個(gè)數(shù)多少、數(shù)值無(wú)關(guān)。主要包括指令空間(即代碼空間)、數(shù)據(jù)空間(常量、簡(jiǎn)單變量)等所占的空間,屬于靜態(tài)空間。
  • 可變空間: 這塊的可變空間的主要包括動(dòng)態(tài)分配的空間,以及遞歸棧所需的空間等。這部分的空間大小與算法有關(guān)。一個(gè)算法所需的存儲(chǔ)空間用f(n)表示。S(n)=O(f(n))  其中n為問(wèn)題的規(guī)模(或大?。?,S(n)表示空間復(fù)雜度。

我們可以對(duì)比下各種排序,再次理解下時(shí)間復(fù)雜度和空間復(fù)雜度:

出處不記得啦...

以上筆記來(lái)源:

時(shí)間復(fù)雜度和空間復(fù)雜度1
時(shí)間復(fù)雜度和空間復(fù)雜度2
【數(shù)據(jù)結(jié)構(gòu)】——嚴(yán)蔚敏 版本
參考:算法的時(shí)間復(fù)雜度和空間復(fù)雜度-總結(jié), 這里寫的很贊。


算法再體驗(yàn):

單純的一個(gè)數(shù)組列表(@[@"",@""]) 轉(zhuǎn)化成 數(shù)組套字典,字典中再套數(shù)組的的數(shù)組(@[@{@"":@[@"",@""]},@{@"":@[@"",@""]}])

@[
    @{
        @"name" : @"t11",
        @"id"   : @"10001",
        @"class": @"A"
    },
    @{
        @"name" : @"t22",
        @"id"   : @"10002",
        @"class": @"B"
    },
    @{
        @"name" : @"t33",
        @"id"   : @"10003",
        @"class": @"C"
    },
    @{
        @"name" : @"t44",
        @"id"   : @"10004",
        @"class": @"A"
    },
    @{
        @"name" : @"t55",
        @"id"   : @"10005",
        @"class": @"B"
    },
    @{
        @"name" : @"t66",
        @"id"   : @"10006",
        @"class": @"C"
    }

 ]

轉(zhuǎn)化為

@[
    @{
        @"newModels" :  @[
                            @{
                                @"name" : @"t11",
                                @"id"   : @"10001"
                            },
                            @{
                                @"name" : @"t44",
                                @"id"   : @"10004"
                            }
                        ],
        @"class"    : @"A"
    }
    @{
        @"newModels" :  @[
                            @{
                                @"name" : @"t22",
                                @"id"   : @"10002"
                            },
                            @{
                                @"name" : @"t55",
                                @"id"   : @"10005"
                            }
                        ],
        @"class"    : @"B"
    }
    @{
        @"newModels" :  @[
                            @{
                                @"name" : @"t33",
                                @"id"   : @"10003"
                            },
                            @{
                                @"name" : @"t66",
                                @"id"   : @"10006"
                            }
                        ],
        @"class"    : @"C"
    }

 ]
最后編輯于
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 通常,對(duì)于一個(gè)給定的算法,我們要做 兩項(xiàng)分析。第一是從數(shù)學(xué)上證明算法的正確性,這一步主要用到形式化證明的方法及相關(guān)...
    西域小碼閱讀 2,007評(píng)論 0 11
  • 什么是算法的復(fù)雜度 算法復(fù)雜度,即算法在編寫成可執(zhí)行程序后,運(yùn)行時(shí)所需要的資源,資源包括時(shí)間資源和內(nèi)存資源。 一個(gè)...
    儒生閱讀 1,855評(píng)論 0 2
  • 算法復(fù)雜度 時(shí)間復(fù)雜度 空間復(fù)雜度 什么是時(shí)間復(fù)雜度 算法執(zhí)行時(shí)間需通過(guò)依據(jù)該算法編制的程序在計(jì)算機(jī)上運(yùn)行時(shí)所消耗...
    KODIE閱讀 3,400評(píng)論 0 9
  • 算法的時(shí)間復(fù)雜度和空間復(fù)雜度-總結(jié)通常,對(duì)于一個(gè)給定的算法,我們要做 兩項(xiàng)分析。第一是從數(shù)學(xué)上證明算法的正確性,這...
    Explorer_Mi閱讀 1,543評(píng)論 0 1
  • 二十六歲。有小弟弟問(wèn)我,我都會(huì)一本正經(jīng)地說(shuō)姐已經(jīng)三十好幾了,然后看著他們瞪著一雙不可思議的眼睛笑的不能自已。這種玩...
    十三緯宇宙閱讀 610評(píng)論 0 1

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