簡體   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