访问堆栈中元素的时间复杂度是多少?或者甚至可以这样做?

时间:2018-06-16 04:43:52

标签: java data-structures stack

我看过的其中一个教程说,访问链接列表或数组中实现的堆栈需要O(1)时间复杂度,但他也说未搜索数据中的“搜索”不适用。现在我很困惑,如果'搜索'与'访问'相同?

1 个答案:

答案 0 :(得分:1)

  

我观看的其中一个教程说,访问链接列表或数组中实现的堆栈需要花费O(1)时间复杂度

本教程对基于数组的堆栈是正确的。假设堆栈API允许它,您可以从O(1)中的基于数组的堆栈的顶部或N底部元素获取N.它只是一个数组查找。

对于基于链表的堆栈,它更复杂。您可以在O(1)中获得顶部(或可能是底部)元素。但是从顶部元素获得N&是一个O(N)操作。你必须遵循N个引用来获得你需要的元素。

  

但他也说'搜索'未分类的数据不适用。现在我很困惑,如果搜索'与访问'?

相同

他们是不同的东西。考虑一下:

String[] array = new String[] {"A", "B", "C"};

访问array的元素是array[i]。对于作为O(1)操作的数组。 (对于链接列表,等效项为O(N)

搜索数组的元素是这样的:

for (String s : array) {
   if (s.equals("Fred")) {
       // found it!
   }
}

正如我使用过这些词,"访问"和"搜索"显然意味着不同的事情

现在,正如欧文所述,“#"搜索"等术语的含义和"访问"会因作者而异。但是"搜索"有一个明确的含义,需要寻找一些东西......而不是知道它会在哪里。

目前还不完全清楚您正在阅读的教程可能意味着"'搜索'未分类的数据不适用" 。在非排序数据中搜索肯定是可能,但这将是一个O(N)操作......除非您事先已经做了一些事情来组织数据。 (请参阅上面的示例代码。)

但是,堆栈数据结构通常会针对访问堆栈顶部的特殊情况进行优化。不访问第N个元素,或搜索具有特定值的元素。