测量快速数据结构的最坏情况时间 我试图找出如何测量C++中两个数据结构最坏情况的“更新”操作。

测量快速数据结构的最坏情况时间 我试图找出如何测量C++中两个数据结构最坏情况的“更新”操作。,c++,c,time,benchmarking,C++,C,Time,Benchmarking,它们都具有相同的摊销(恒定)复杂度(以及近似的平均操作时间),但其中一个在恒定的最坏情况下工作,而另一个是对数的(在以前更新的数量上) 这两种实现平均每秒约1500万次更新操作,使得单个更新的平均速度超过0.1ms 我曾尝试使用chrono::staddy_clock来计时一次更新,但不够精细。有没有其他方法可以提供亚毫秒级的粒度 理想情况下,我想画一个最大测量更新时间的图,作为更新次数的函数,并表明我的算法的时间保持有界“我曾尝试使用chrono::staid_clock来计时一次更新,但不够

它们都具有相同的摊销(恒定)复杂度(以及近似的平均操作时间),但其中一个在恒定的最坏情况下工作,而另一个是对数的(在以前更新的数量上)

这两种实现平均每秒约1500万次更新操作,使得单个更新的平均速度超过0.1ms

我曾尝试使用
chrono::staddy_clock
来计时一次更新,但不够精细。有没有其他方法可以提供亚毫秒级的粒度


理想情况下,我想画一个最大测量更新时间的图,作为更新次数的函数,并表明我的算法的时间保持有界

“我曾尝试使用
chrono::staid_clock
来计时一次更新,但不够精细。有没有其他方法可以提供亚毫秒级的粒度?“1)如果您没有使用实时操作系统,则操作系统时钟的粒度不够细。2) 如此小的时间范围的度量,很容易被调度程序(而不是您的)调度其他任务所污染。为了避免这种情况,您可以计算多个更新操作,直到总数至少达到秒或分钟,然后除以执行的操作数。最坏情况下的时间可能很难与干扰(如也会导致大峰值的中断)区分开来。也许您可以描述干扰的特征,并设置一些阈值,如果超过该阈值,您会认为是中断导致代码休眠,而不仅仅是缓慢的更新。您使用的是哪种硬件?您是否可以访问性能计数器或类似“英特尔PT”之类的东西,在每个执行的分支上都有时间戳,这样可以记录每次asm循环迭代的时间戳?对于许多桌面主机,您的程序将与其他程序交换,包括中断处理程序。你需要找到一种方法来衡量没有这些项目或运行足够的情况下,操作系统的东西可以平均出来。您最好放弃计时和对正在操作的数据进行计数。