繁体   English   中英

访问堆栈中的元素的时间复杂度是多少? 还是有可能做到这一点?

[英]What is the time complexity of accessing an element in a Stack? Or is it even possible to do it?

我看过的其中一篇教程说,访问在链表或数组中实现的堆栈会花费O(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个元素,或搜索具有特定值的元素。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM