使用o(1)运行时实现列表

时间:2017-05-02 01:36:04

标签: java algorithm time implementation

我可以列出所有运行时间都很快的列表吗?这种类型的清单有可能吗?如果需要通过节点搜索其他节点,那么我无法理解如何保持搜索或添加时间不变,更不用说添加了。

2 个答案:

答案 0 :(得分:1)

首先你只说get(),add()和set(),但是你也说了search()。前三个在ArrayList和类似的实现中都有O(1)平均运行时间。在通常被视为列表的任何内容中,您不能有O(1)搜索时间。

编辑:有些人正确地指出,如果列表实现还将元素索引存储在hashmap中,则可以获得O(1)查找时间。严格来说,只要它实现了List接口,它就是一个列表。我应该说你不能用 列表来做到这一点。

答案 1 :(得分:0)

只是将我的评论作为答案发布......

如果您使用的扩展列表根据需要进行了扩展,则可以实现摊销 O(1)get ting,set ting和{{ 1}},这意味着你最终需要扩大其规模,但这并不足以发生。很确定这就是Java的ArrayList类的工作原理。

您可以在此处阅读更多相关信息。 https://stackoverflow.com/a/4450659/1572906

你提到了搜索,但是通过这种方法,O(1)看起来并不可行。您可以使用数组旁边的哈希表来实现O(1)。