之前沒(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ī)模。

一個(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"
}
]