日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > 循环神经网络 >内容正文

循环神经网络

怎么算matlab算法复杂度,算法复杂度分析

發(fā)布時間:2024/4/20 循环神经网络 86 豆豆
生活随笔 收集整理的這篇文章主要介紹了 怎么算matlab算法复杂度,算法复杂度分析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1. 何為數(shù)據(jù)結(jié)構(gòu)?何為算法?

簡單來說,數(shù)據(jù)結(jié)構(gòu)就是數(shù)據(jù)的存儲方式,比如數(shù)組就是把數(shù)據(jù)存在一段連續(xù)的內(nèi)存上,而鏈表則是通過指針的關(guān)聯(lián)將數(shù)據(jù)存在任意可用的內(nèi)存上;棧是先進后出,隊列是先進先出。

而算法則是對這些數(shù)據(jù)的操作方法,比如數(shù)據(jù)的插入、查找、刪除、排序等。

二者相輔相成,互為一體,數(shù)據(jù)結(jié)構(gòu)為算法服務(wù),而算法要在指定數(shù)據(jù)結(jié)構(gòu)上進行操作。

2. 復(fù)雜度分析?

學習數(shù)據(jù)結(jié)構(gòu)和算法的目的是為了在實際應(yīng)用的時候更加優(yōu)化地利用內(nèi)存,提高程序運行效率,而復(fù)雜度分析則是給我們提供一個衡量代碼質(zhì)量好壞的標準。

如果我們在不運行程序的情況下就可以定性知道代碼的內(nèi)存占用和時間消耗,這將會給我們提供一個當前程序的總體評估和未來的改進方向。

直接運行程序就可以知道算法的執(zhí)行時間和占用內(nèi)存,但這個過程往往會受到運行環(huán)境和數(shù)據(jù)規(guī)模的影響,因此,我們需要一個不用進行具體測試就可以粗略估計算法執(zhí)行效率的方法,這就是復(fù)雜度分析。

3. 時間復(fù)雜度

3.1 大 O 復(fù)雜度表示法

int cal(int n)

{

int sum = 0;

int i = 1;

for (; i <= n; ++i)

{

sum = sum + i;

}

return sum;

}

我們假設(shè)每行代碼的運行時間為 t,則第一二行代碼需要時間為 2 * t,第三四行代碼需要時間為 2n * t,總時間為 (2n+2) * t,代碼運行總時間與 n 成正比。

用大 O 法可表示為 O(2n+2),這并不代表代碼的實際執(zhí)行時間,只是表征代碼執(zhí)行時間隨數(shù)據(jù)規(guī)模的變化趨勢。

當 n 足夠大時,低階、常量和系數(shù)就可以忽略不計,直接表示為 O(n)。

3.2 常用分析方法

循環(huán)最多代碼,重點關(guān)注

串行代碼,復(fù)雜度相加

嵌套代碼,復(fù)雜度相乘

3.3 幾種常見復(fù)雜度

多項式量級

常量階

對數(shù)階

線性階

線性對數(shù)階

乘方階

非多項式量級(Non-Deterministic Polynomial)

指數(shù)階

階乘階

非多項式量級的算法的執(zhí)行時間會隨著數(shù)據(jù)規(guī)模的擴大急劇增加,是非常低效的算法。

3.4 進階情況

最好情況時間復(fù)雜度(Best Case Time Complexity)

最壞情況時間復(fù)雜度(Worst Case Time Complexity)

平均情況時間復(fù)雜度(Average Case Time Complexity)

以查找為例,看如下代碼

// n 表示數(shù)組 array 的長度

int find(int[] array, int n, int x)

{

int i = 0;

int pos = -1;

for (; i < n; ++i)

{

if (array[i] == x)

{

pos = i;

break;

}

}

return pos;

}

最好情況時間復(fù)雜度就是在程序最理想的狀態(tài)下,數(shù)組第一個元素就是我們要查找的元素,只需要查找一次;而最壞情況時間復(fù)雜度就是在程序最糟糕的狀態(tài)下,數(shù)組最后一個元素才是我們要查找的元素,需要查找完整個數(shù)組;

事實上,我們要查找的元素可能存在數(shù)組中的任何一個位置,甚至可能不存在于數(shù)組中,因此,考慮所有情況出現(xiàn)的概率,求出各種情況下時間復(fù)雜度的平均值,也就是平均情況時間復(fù)雜度。

均攤情況時間復(fù)雜度(Amortized Case Time Complexity)

// array 表示一個長度為 n 的數(shù)組

// 代碼中的 array.length 就等于 n

int[] array = new int[n];

int count = 0;

void insert(int val)

{

if (count == array.length)

{

int sum = 0;

for (int i = 0; i < array.length; ++i)

{

sum = sum + array[i];

}

array[0] = sum;

count = 1;

}

array[count] = val;

++count;

}

這段代碼的功能是向數(shù)組中插入一個元素,當數(shù)組未滿時,直接插入,時間復(fù)雜度為O(1);當數(shù)組滿時,先計算數(shù)組所有元素的和,再插入元素,時間復(fù)雜度為 O(n)。

并且,兩種復(fù)雜度不同的操作具有一定的規(guī)律,一系列O(1)的插入導(dǎo)致數(shù)組占滿,然后緊跟著一個O(n) 的插入,再繼續(xù)循環(huán)往復(fù)。

這時候,我么就可以把O(n) 復(fù)雜度的這個操作平均分攤到前面的O(1)復(fù)雜度操作上去,整體的時間復(fù)雜度也就變成了O(1),這就是均攤情況時間復(fù)雜度。

如果大部分情況時間復(fù)雜度都很低,只有少數(shù)情況時間復(fù)雜度較高,并且這些操作具有前后的時序關(guān)系,那么我們就可以應(yīng)用均攤情況時間復(fù)雜度來進行分析。通常來說,均攤情況時間復(fù)雜度就等于最好情況時間復(fù)雜度。

4. 時間復(fù)雜度的計算

同階函數(shù)集合

稱為與f(n)同階的函數(shù)集合。

低階函數(shù)集合

稱為比 f(n)低階的函數(shù)集合。

高階函數(shù)集合

稱為比f(n)高階的函數(shù)集合。

嚴格低階函數(shù)集合

稱為f(n)的嚴格低階函數(shù)集合。

嚴格高階函數(shù)集合

稱為比f(n)高階的函數(shù)集合。

迭代法求解遞歸方程

Master 定理求解遞歸方程

5. 空間復(fù)雜度

空間復(fù)雜度表征程序占用內(nèi)存隨著數(shù)據(jù)規(guī)模的變化趨勢,分析程序中數(shù)據(jù)的分配空間即可,一般常見的復(fù)雜度有O(1)、O(n)、O(n*n)。

總結(jié)

以上是生活随笔為你收集整理的怎么算matlab算法复杂度,算法复杂度分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。