二叉搜索真的是在 0 时钟 CPU 时间内执行的吗?
Is binary search really being performed in 0 clock CPU time?
我编写了这个程序,它将从文件中读取一些数字,插入数组,执行线性搜索,对它们进行排序,然后执行二叉搜索(排序后)。
我使用时钟函数来测量执行上述每项任务所需的时间。
这些文件很大,大约有 500 万个数字。插入需要时间,由时钟显示。(从文件中读取不是以最佳方式完成的),线性搜索和排序也是如此。但是,执行二叉搜索需要 0 秒。显然这是不对的。
我很好奇为什么它以毫秒为单位的时间和时钟滴答数都显示为零?
我运行在Windows 8.1,华硕,英特尔i-5,8GB RAM,2.4 GHz处理器。
这是输出:
$ make
g++ -c -Wall -g search.cpp
g++ -o search search.o
$ ./search <input-5m.in
Time to insert: 26171
Time to Linear Search: 16
Yes!
Time to Sort: 1390
Time to Binary Search in milliseconds: 0
Time to Binary Search in clock ticks: 0
Time to Binary Search printed with "printf()": 0.000000
Yes!
这是代码。
using namespace std;
#include <iostream>
#include <algorithm>
#include <ctime>
#include <cstdio>
#include <iomanip> // std::setprecision
clock_t clock(void);
...
...
...
int main(int argc, char** argv)
{
...
...
...
clock_t startLinear, finishLinear;
double elapsedTimeLinear =0;
startLinear = clock();
bool foundLinear = linearSearch(elements, n , x);
finishLinear = clock();
elapsedTimeLinear = (double)(finishLinear - startLinear)/CLOCKS_PER_SEC*1000;
cout << "Time to Linear Search: " << elapsedTimeLinear << endl;
foundLinear ? std::cout<<"Yes!"<<std::endl : std::cout<<"No!"<<std::endl;
clock_t startSort, finishSort;
double elapsedTimeSort =0;
startSort = clock();
sort(elements, elements+n);
finishSort = clock();
elapsedTimeSort = (double)(finishSort - startSort)/CLOCKS_PER_SEC*1000;
cout << "Time to Sort: " << elapsedTimeSort << endl;
clock_t startBinary, finishBinary;
double elapsedTimeBinary =0, elapsedTimeBinaryTicks=0;
startBinary = clock();
//bool foundBinary = binarySearch(elements, n , x);
bool foundBinary = binary_search(elements, elements+n, x);
finishBinary = clock();
elapsedTimeBinary = (double)(finishBinary - startBinary)/CLOCKS_PER_SEC*1000;
elapsedTimeBinaryTicks = (double)(finishBinary - startBinary);
cout << "Time to Binary Search in milliseconds: " << elapsedTimeBinary << endl;
cout << "Time to Binary Search in clock ticks: " << elapsedTimeBinaryTicks << endl;
printf("Time to Binary Search printed with "printf()": %fn", elapsedTimeBinary);
foundBinary ? std::cout<<"Yes!"<<std::endl : std::cout<<"No!"<<std::endl;
一百万个项目意味着最多 20 个比较。使用通常有效的代码(我没有看过你的代码),它远低于 1 毫秒。在一个循环中执行您想要测量的大量次数的事情,以获得高于时钟分辨率。
相关文章:
- 在多个时间戳处执行函数
- 简单C++"Hello World"程序的执行时间长
- 我使用 OpenMP 的线程越多,执行时间就越长,这是怎么回事?
- 为什么切换 for 循环的顺序会显著改变执行时间?
- cmd.exe与Powershell中C++程序的不同执行时间
- 在C++中执行 N 阶乘编译时间的 3 种不同/相同方法
- 如何执行用 C++ 编写的程序的运行时间?
- pthread执行时间比顺序执行时间差
- OpenCV 函数 cv::remap() 的执行时间更长,当程序在两者之间进入睡眠状态时
- 为什么 std::chrono 在测量循环和编译器优化的并行 OpenMP 的执行时间时不起作用?
- 我需要帮助来缩短检索 SSL 证书的执行时间
- 如何测量cudaMalloc执行时间
- c++中的执行时间和检查流状态
- 为什么for循环中的异步不能提高执行时间
- 为什么 C++ openMP 程序执行时间更长
- 测量任何 Windows 可执行文件的内存使用情况和执行时间
- 需要减少我的C++代码的执行时间
- 我可以在编译时间执行该函数从未调用
- C程序的示例长时间执行时间
- 在特定的时钟时间执行功能