测试计算机的运行速度
計(jì)算機(jī)的運(yùn)行速度主要取決于CPU的頻率,一般CPU的頻率標(biāo)注為**GHz,例如2.5GHz,在計(jì)算機(jī)中1Hz代表計(jì)算機(jī)的CPU在單位時(shí)間內(nèi)運(yùn)行一次。
?
頻率的換算關(guān)系為1GHz=1000MHz;1MHz=一百萬Hz=10^6Hz;
本計(jì)算機(jī)的頻率為2.5GHz,用換算公式后得到的結(jié)果就是25億Hz,但是CPU的過程并不是完成一次加法就是運(yùn)算一次,CPU內(nèi)部有各種線程,可能要運(yùn)行十幾次才能完成一次加法;可以編寫程序測(cè)試一下計(jì)算機(jī)的運(yùn)行速度,在以下的案例中,分別編寫時(shí)間復(fù)雜度為O(n)、O(n^2)、O(n*logn)的程序
#include<iostream> #include<chrono> #include<thread> using namespace std; using namespace chrono;//測(cè)試時(shí)間復(fù)雜度為O(n)的程序 void fun1(long long n){long long k = 1;for (long long j = 0; j < n; ++j){k++;} }//測(cè)試時(shí)間復(fù)雜度為O(n^2)的程序 void fun2(long long n){long long k = 1;for (long long i = 0; i < n; ++i) {for (long long j = 0; j < n; ++j) {k++;}} }//測(cè)試時(shí)間復(fù)雜度為O(n*logn)的程序 void fun3(long long n) {long long k = 1;for (long long i = 0; i < n; ++i) {for (long long j = 1; j < n; j = j * 2) {k++;}} }int main() {long long n; //輸入數(shù)據(jù)的規(guī)模while (true) {cout << "輸入:";cin >> n;milliseconds start_time = duration_cast<milliseconds>(system_clock::now().time_since_epoch());fun1(n);milliseconds end_time = duration_cast<milliseconds>(system_clock::now().time_since_epoch());cout << "耗時(shí):" << milliseconds(end_time).count() - milliseconds(start_time).count() << "ms" << endl;} }解釋以下,為什么fun3的時(shí)間復(fù)雜度是O(n*logn),外層循環(huán)n次、內(nèi)層循環(huán)log2(n)。
O(n)的時(shí)間復(fù)雜度
也就是說計(jì)算五千萬個(gè)數(shù)量級(jí),耗費(fèi)時(shí)間為136ms(這里計(jì)算的是1累加到5千萬);
可以推理,對(duì)于O(n^2)的時(shí)間復(fù)雜度,能計(jì)算的數(shù)量級(jí)要在O(n)的基礎(chǔ)上開根號(hào),
?
?顯然可以得出結(jié)論,時(shí)間復(fù)雜度越低,計(jì)算相同數(shù)量級(jí)數(shù)據(jù)耗時(shí)越少
總結(jié)
以上是生活随笔為你收集整理的测试计算机的运行速度的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是SOCKS5代理 它的原理是什么
- 下一篇: Java中文英文数字混合掩码_Java8