两个吃奶一个添下面视频_人妻第一页香蕉网_欧美xxxx少妇_妺妺窝人体色www婷婷

算法的出現(xiàn),遠遠早于計算機,所以關(guān)于算法的知識點也非常多,大家不要急于求成,而本篇將從算法的概念、特征、評價以及復雜度四個方面詳細介紹算法,希望關(guān)于算法的內(nèi)容給大家一個清晰的認識,方便大家在日后的運用有更深的概念。


一、算法的概念

算法(algorithm,[??lɡ?r?e?m],計算程序):就是定義良好的計算過程,他取一個或一組的值為輸入,并產(chǎn)生出一個或一組值作為輸出。簡單來說算法就是一系列的計算步驟,用來將輸入數(shù)據(jù)轉(zhuǎn)化成輸出結(jié)果。

算法(algorithm)是解決一系列問題的清晰指令,也就是,能對一定規(guī)范的輸入,在有限的時間內(nèi)獲得所要求的輸出。

簡單來說,算法就是解決一個問題的具體方法和步驟。

程序 = 算法+數(shù)據(jù)結(jié)構(gòu)


二、算法的特征

(1)可行性

算法中執(zhí)行的任何計算步驟都可以分解為基本可執(zhí)行的操作步,即每個計算步都可以在有限時間里完成(也稱之為有效性)。

(2)確定性

算法的每一步都要有確切的意義,不能有二義性。例如“增加x的值”,并沒有說增加多少,計算機就無法執(zhí)行明確的運算。

(3)有窮性

算法的有窮性是指算法必須在執(zhí)行有限個步驟后終止。操作次數(shù)不宜過大,不能超過人們事先設定的時間限制。

(4)輸入

算法有0個或多個輸入,以刻畫運算對象的初始情況,所謂0個輸入是指算法已經(jīng)給出了初始條件。

(5)輸出

一個算法可能有1個或多個輸出,以反映輸入數(shù)據(jù)加工后的代碼,沒有輸出的算法是沒有意義的!


三、算法的評價

通常一個好算法應該達到如下目標:

(1)正確性

算法應該正確的解決問題。

(2)可讀性

算法應該具有較好的可讀性,讓人們理解算法的作用。

(3)健壯性

輸入非法數(shù)據(jù)時,算法也可以做出適當?shù)姆磻粫a(chǎn)生奇奇怪怪的輸出。


四、算法的復雜度

算法復雜度是指算法在變?yōu)榭蓤?zhí)行程序后所耗費的時間資源和內(nèi)存。

(1)時間復雜度:評估程序所需要的時間。

復雜度標記符號說明
常量O(1)操作數(shù)量為常數(shù),與輸入數(shù)據(jù)的規(guī)模無關(guān)
對數(shù)O(log2 n)與輸入數(shù)據(jù)的比例是 log2(n)
線性O(n)與輸入數(shù)據(jù)成正比
平方O(n2)與輸入數(shù)據(jù)規(guī)模的比例為平方
立方O(n3)與輸入數(shù)據(jù)規(guī)模的比例為立方
指數(shù)

O(2?)

O(k?)

O(n!)

快速增長,盡量減少這種代碼

示范:

1. O(1)級代碼 

//計算長方形面積
int a,b;
cin>>a>>b;
int s = a*b;
cout<<s;

2. O(log2 n)級代碼

//二分查找
int search(int nums[], int size, int target) //nums是數(shù)組,size是數(shù)組的大小,target是需要查找的值
{
    int left = 0;
    int right = size - 1;	// 定義了target在左閉右閉的區(qū)間內(nèi),[left, right]
    while (left <= right) {	//當left == right時,區(qū)間[left, right]仍然有效
        int middle = left + ((right - left) / 2);//等同于 (left + right) / 2,防止溢出
        if (nums[middle] > target) {
            right = middle - 1;	//target在左區(qū)間,所以[left, middle - 1]
        } else if (nums[middle] < target) {
            left = middle + 1;	//target在右區(qū)間,所以[middle + 1, right]
        } else {	//既不在左邊,也不在右邊,那就是找到答案了
            return middle;
        }
    }
    //沒有找到目標值
    return -1;
}

3. O(n)級代碼

//計算n的階乘
int n;
cin>>n;
int ji = 1;
for(int i = 1 ; i<=n ; i++){
    ji*=i;
}
cout<<ji<<endl;


(2)空間復雜度:評估程序所需要的儲存空間??臻g復雜度一般不作考慮,一般都優(yōu)先考慮時間復雜度。

以上是關(guān)于算法知識的介紹,有了基礎(chǔ)概念的理解,方便后期我們學習算法的運用和實操。

點贊(1)

C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習題和答疑,點擊了解:

一點編程也不會寫的:零基礎(chǔ)C語言學練課程

解決困擾你多年的C語言疑難雜癥特性的C語言進階課程

從零到寫出一個爬蟲的Python編程課程

只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程

信息學奧賽或C++選手的 必學C++課程

藍橋杯ACM、信息學奧賽的必學課程:算法競賽課入門課程

手把手講解近五年真題的藍橋杯輔導課程

Dotcpp在線編譯      (登錄可減少運行等待時間)