为什么根据测量的位置测量经过的时间会有很大差异?
Why are there a big difference when measuring elapsed time according to where to measure?
我的问题是关于经过时间根据点的差异。
为了找到在我的代码中执行时总耗用时间的最大部分,我使用了 clock
函数。
来源:
首先,我把clock
函数放在main函数的开头和结尾。
(实际上,有一些变量声明,但为了我的问题的可读性,我删除了它们)。那么我想我将能够测量总经过时间。
int main(){
using clock = std::chrono::system_clock;
using sec = std::chrono::duration<double>;
const auto before = clock::now();
...
std::cin >> a >> b;
lgstCommSubStr findingLCSS(a,b,numberofHT,cardi,SubsA);
const sec duration = clock::now() - before;
std::cout << "It took " << duration.count() << "s in main function" << std::endl;
return 0;
}
其次,我把clock
函数放在了classfindingLCSS
处。 class 用于查找两个字符串之间的最长公共子字符串。实际执行我的算法的是 class。我编写了在其构造函数中查找它的代码。所以在做这个class的时候,就是returns最长公共子串信息。我认为这个经过的时间将是实际算法 运行 时间。
public:
lgstCommSubStr(string a, string b, int numHT, int m, vector <int> ** SA):
strA(a), strB(b), hashTsize(numHT), SubstringsA(SA),
primeNs(numHT), xs(numHT),
A_hashValues(numHT), B_hashValues(numHT),
av(numHT), bv(numHT), cardi(m)
{
using clock = std::chrono::system_clock;
using sec = std::chrono::duration<double>;
const auto before = clock::now();
...
answer ans=binarySearch(a,b, numHT);
std::cout << ans.i << " " << ans.j << " " << ans.length << "\n";
const sec duration = clock::now() - before;
std::cout << "It took " << duration.count() << "s in the class" << std::endl;
}
输出如下。
tool coolbox
1 1 3
It took 0.002992s in inner class
It took 4.13945s in main function
表示'tool'和'coolbox'有子串'ool'
但我很困惑,两次之间有很大的不同。
因为第一次是总时间,第二次是算法运行时间,所以我不得不认为它的差异时间是声明变量的经过时间。
但它看起来很奇怪,因为我认为声明变量的时间很短。
是不是测量经过的时间有误?
请给我一个解决问题的提示。感谢阅读!
拍摄 std::cin >> a >> b;
之前的时间快照会导致测量不准确,因为您可能在输入 a
和 b
的值之前开始计时。通常,您希望时间安排尽可能接近您实际测量的对象。
我的问题是关于经过时间根据点的差异。
为了找到在我的代码中执行时总耗用时间的最大部分,我使用了 clock
函数。
来源:
首先,我把clock
函数放在main函数的开头和结尾。
(实际上,有一些变量声明,但为了我的问题的可读性,我删除了它们)。那么我想我将能够测量总经过时间。
int main(){
using clock = std::chrono::system_clock;
using sec = std::chrono::duration<double>;
const auto before = clock::now();
...
std::cin >> a >> b;
lgstCommSubStr findingLCSS(a,b,numberofHT,cardi,SubsA);
const sec duration = clock::now() - before;
std::cout << "It took " << duration.count() << "s in main function" << std::endl;
return 0;
}
其次,我把clock
函数放在了classfindingLCSS
处。 class 用于查找两个字符串之间的最长公共子字符串。实际执行我的算法的是 class。我编写了在其构造函数中查找它的代码。所以在做这个class的时候,就是returns最长公共子串信息。我认为这个经过的时间将是实际算法 运行 时间。
public:
lgstCommSubStr(string a, string b, int numHT, int m, vector <int> ** SA):
strA(a), strB(b), hashTsize(numHT), SubstringsA(SA),
primeNs(numHT), xs(numHT),
A_hashValues(numHT), B_hashValues(numHT),
av(numHT), bv(numHT), cardi(m)
{
using clock = std::chrono::system_clock;
using sec = std::chrono::duration<double>;
const auto before = clock::now();
...
answer ans=binarySearch(a,b, numHT);
std::cout << ans.i << " " << ans.j << " " << ans.length << "\n";
const sec duration = clock::now() - before;
std::cout << "It took " << duration.count() << "s in the class" << std::endl;
}
输出如下。
tool coolbox
1 1 3
It took 0.002992s in inner class
It took 4.13945s in main function
表示'tool'和'coolbox'有子串'ool'
但我很困惑,两次之间有很大的不同。
因为第一次是总时间,第二次是算法运行时间,所以我不得不认为它的差异时间是声明变量的经过时间。
但它看起来很奇怪,因为我认为声明变量的时间很短。
是不是测量经过的时间有误?
请给我一个解决问题的提示。感谢阅读!
拍摄 std::cin >> a >> b;
之前的时间快照会导致测量不准确,因为您可能在输入 a
和 b
的值之前开始计时。通常,您希望时间安排尽可能接近您实际测量的对象。