当算法花费零秒/毫秒时间时,如何获取近似时间
How to get approximate time, when an algorithm takes zero second/milli-second times?
我需要时间
- 1000
- 5000
- 10000
- 15000
- 20000等数据编号。
通过使用快速排序算法从数据与次数图的编号中验证时间复杂度。但是对于 1000 个数据和 20000 个数据,我仍然有零秒时间。如果我以毫秒或纳秒为单位测量时间,但时间仍然为零。有没有办法找到不同编号数据的近似或比较时间?
我的快速排序过程在这里 -
#include <bits/stdc++.h>
using namespace std;
int A[50000], i, j, V, store;
int part(int left, int right, int P)
{
V = A[P];
swap(A[P], A[right]);
store = left;
for(i = left; i < right; i++)
{
if(A[i] <= V)
{
swap(A[i], A[store]);
store++;
}
}
swap(A[store], A[right]);
return store;
}
void qSort(int left, int right)
{
if(left < right)
{
j = part(left, right, left);
qSort(left, j-1);
qSort(j+1, right);
}
}
main()
{
int nData, k, minValue, maxValue;
cout<<"No. of Data: ";
cin>>nData;
cout<<"nRange (min, max): ";
cin>>minValue>>maxValue;
for(k=0; k<nData; k++)
{
A[k] = minValue + (rand()%(int) (maxValue - minValue + 1));
}
clock_t t1 = clock();
qSort(0, nData-1);
clock_t t2 = clock();
cout<<"nnTime: "<<(double)(t2-t1)/CLOCKS_PER_SEC<<endl;
}
[注意:我的操作系统是Windows]
main()
{
...
clock_t t1 = clock();
qSort(0, nData-1);
clock_t t2 = clock();
cout<<"nnTime: "<<(double)(t2-t1)/CLOCKS_PER_SEC<<endl;
}
这里的问题是编译器对于这种简单的测试来说太聪明了。编译器看到在程序中没有效果的代码,它通过删除不必要的代码来优化程序。您必须禁用优化(在调试模式下运行程序可能会执行此操作)或修改程序,以便以某种方式使用排序操作的结果。
此外,clock()
在Windows和POSIX系统上具有不同的准确性。改用std::chrono
更简单。例如
#include <iostream>
#include <chrono>
int main()
{
std::chrono::time_point<std::chrono::system_clock> start, end;
start = std::chrono::system_clock::now();
qSort(0, nData-1);
end = std::chrono::system_clock::now();
std::chrono::duration<double> elapsed_seconds = end - start;
std::cout << "count:" << elapsed_seconds.count() << "n";
return 0;
}
只需在迭代次数足够高的 for 循环中重复要测量的任务,然后将测量的时间除以迭代次数。
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- c++ 11 如何获取系统时间?
- 获取 QInputEvent 在 Qt 4.8 中被放入 QEventLoop 队列时的时间戳
- 如何以毫秒为单位获取开始时间和 now() 之间的毫秒差异(以 C++为单位?
- 如何从远程 SFTP 服务器获取 HH-MM-SS 时间戳格式的文件列表
- 如何在 c++ stl 中获取列表中被推回的元素的地址,在常量时间内?
- 如何在 for 循环中的特定时间内获取要打印的额外值
- 如何以" Safe "的方式获取 C++ 中的当前时间
- C++程序以获取当前时间
- 为什么在C++中获取日期和/或时间如此复杂?
- 在 c++ 中获取 X 毫秒前的时间戳
- 如何获取两个时间点之间的时间
- 使用C++中的put_time以毫秒精度获取当前时间
- 获取合成时间C++
- 注册表-获取值(而不是键)上次更改的时间和键创建日期
- 如何在给定时钟偏移的情况下正确获取时间
- 如何在Visual Studio中的库编译时间中获取链接器错误
- 从 UNIX 时间戳获取同月第一天的时间戳,而无需转换为本地时间
- 从 twitcurl 时间线获取未授权错误用户获取方法
- 如何在两个提升时间之间获取每个单独的日期