常見算法時間函數的增長趨勢分析


《數據結構教程》(第5版)上機實驗題1--實驗題2:

目的:

理解常見算法時間函數的增長趨勢

對以下函數用c++程序運行觀察其變化:

            << "log2(n):
            << "      √n:
            << "      n:
            << "      n*log2(n):
            << "      n*n:
            << "      n^3:
            << "      2^n:
            << "      n!:       

 

1、從值的變化角度分析:

s-code:

#include<iostream>
#include<cmath>
using namespace std;
double factorial(double n)
{
    double result = 1;
    while(n)
    {
        result *= n--;
    }
    return result;
}
int main()
{
    int n = 1, i;
    cin >> i;
    while(i >= n)
    {
        cout << "log2(n):" << log2(n)
            << "      √n:" << sqrt(n) 
            << "      n:" << n 
            << "      n*log2(n):" << n*log2(n)
            << "      n*n:" << n*n 
            << "      n^3:" << n*n*n
            << "      2^n:" << exp2(n)
            << "      n!:" << factorial(n) << endl;
        n++;
    }
    return 0;
}

 

result of test:

 

2、從消耗的時間的角度分析:

介紹一個計時函數

#include<ctime>

clock_t start, end;
start = clock();
>>>//測試部分
end = clock();
cout <<(end - start)*1.0/CLOCKS_PER_SEC;  //單位是秒

 

 

s-code:

#include<iostream>
#include<cmath>
#include<ctime>
#include<string>
using namespace std;
double factorial(double n)        //求階乘
{
    double result = 1;
    while(n)
    {
        result *= n--;
    }
    return result;
}
double testTime(double n)        //測試從0~n的消耗的時間
{
    clock_t start, end;
    start = clock();
    for(double i = 0; i <= n;i++);
    end = clock();
    return (end - start)*1.0/CLOCKS_PER_SEC;
}
void tPrint(string str, double n)    //output
{
    cout << "Start test " << str << ":" << endl;
    cout << "...\n" << "End,time is :" << testTime(n) << "s\n---------------------\n";
}
int main()
{
    double n;
    cin >> n;
    tPrint("log2(n)",log2(n));
    tPrint("√n",sqrt(n));
    tPrint("n",n);
    tPrint("n^2",n*n);
    tPrint("n^3",n*n*n);
    tPrint("2^n",exp2(2));
    tPrint("n!",factorial(n));
    return 0;
}

 

 

result:

這里測試了
10
11
12
13
5000
五組數據顯然當n越大時所消耗的時間的變化率差距就越大

 

 

注意:

這里的測試數據可能會由機器的性能不同產生差距,這時候就是檢驗機器性能的時候到了哈哈哈哈哈哈。。。。。

 

其實分析函數的變化用極限就一目了然了,用程序就是為了感受下等待的痛苦,哈哈。。。。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM