Java 测试定制数据结构大o复杂性

Java 测试定制数据结构大o复杂性,java,junit,time-complexity,Java,Junit,Time Complexity,作为一项任务,我实现了一个自定义数据结构和一些测试用例,以确保它正常工作。 这个问题实际上并不需要代码本身,但您可以假设它是某种分类列表。 我的问题是,我还被要求测试big-O复杂性,例如确保put()是O(n)等 我很难理解如何写这样的测试 我想到的一种方法是,用一个简单的计数器计算put()方法内部的迭代次数,然后检查它是否等于列表的大小,但这需要我更改列表本身的代码来计算确切的次数,我更愿意在类之外以适当的方式进行计算,只持有它的一个实例 有什么想法吗?我真的很感激你的帮助 通过单元测试,

作为一项任务,我实现了一个自定义数据结构和一些测试用例,以确保它正常工作。 这个问题实际上并不需要代码本身,但您可以假设它是某种分类列表。 我的问题是,我还被要求测试big-O复杂性,例如确保put()是O(n)等

我很难理解如何写这样的测试

我想到的一种方法是,用一个简单的计数器计算put()方法内部的迭代次数,然后检查它是否等于列表的大小,但这需要我更改列表本身的代码来计算确切的次数,我更愿意在类之外以适当的方式进行计算,只持有它的一个实例


有什么想法吗?我真的很感激你的帮助

通过单元测试,您可以测试类的接口,但迭代次数不是接口的一部分。您可以使用计时器检查不同大小的运行时行为。如果是O(n),则时间和n之间应该存在线性依赖关系。

通过单元测试,您可以测试类的接口,但迭代次数不是接口的一部分。您可以使用计时器检查不同大小的运行时行为。如果是O(n),则时间和n之间应该存在线性依赖关系。

在测试开始时获取当前时间,调用正在测试大量次的方法,获取之后的当前时间,并检查差异以获取执行时间。使用不同大小的输入重复此操作,并检查执行时间是否符合预期关系


对于o(n)算法,一个合适的检查方法是将输入大小加倍大约使执行时间加倍。

在测试开始时获取当前时间,调用正在测试大量次的方法,获取之后的当前时间,并检查差异以获取执行时间。使用不同大小的输入重复此操作,并检查执行时间是否符合预期关系


对于o(n)算法,合适的检查方法是将输入大小加倍,执行时间大约加倍。

这被称为“时间复杂度”,原因很充分……”“测试时间复杂度”意味着分析,即对样本输入的方法计时,绘制结果并确保它们与您推导的理论复杂性相匹配。@AlexeiLevenkov您是对的。Fixed他不是建议您删除标记,而是试图暗示测量时间是正确的方法。有充分的理由称之为“时间复杂性…”“测试时间复杂性”意味着分析,即对样本输入的方法进行计时,绘制结果并确保它们与您推导的理论复杂性相匹配。@AlexeiLevenkov您是对的。Fixed他不是建议你移除标签,而是试图暗示测量时间是正确的方法。