Time complexity 双端单链表-搜索的时间复杂性

Time complexity 双端单链表-搜索的时间复杂性,time-complexity,Time Complexity,我已经读到,搜索位于双端单链表末尾的元素的时间复杂度是o(N) 但由于在前面搜索元素的时间复杂度是o(1),我认为同样的情况也应该适用于结束元素。有什么想法吗?感谢搜索位于链接列表前面的元素的成本确实是一个,因为您将持有指向第一个元素的指针。因此,找到第一个元素将是O(1) 在双端单链表的情况下,假设您的意思是持有一个指向单链表的第一个和最后一个元素的指针,那么您确实会发现找到最后一个元素的时间是O(1),因为您有一个指向它确切位置的引用 但是,考虑一个双端单链表的例子,在那里你要找到那个列表中

我已经读到,搜索位于双端单链表末尾的元素的时间复杂度是o(N)


但由于在前面搜索元素的时间复杂度是o(1),我认为同样的情况也应该适用于结束元素。有什么想法吗?感谢

搜索位于链接列表前面的元素的成本确实是一个,因为您将持有指向第一个元素的指针。因此,找到第一个元素将是O(1)

在双端单链表的情况下,假设您的意思是持有一个指向单链表的第一个和最后一个元素的指针,那么您确实会发现找到最后一个元素的时间是O(1),因为您有一个指向它确切位置的引用

但是,考虑一个双端单链表的例子,在那里你要找到那个列表中的(n-1)个元素。突然,您发现必须迭代n-1个元素,直到到达该元素。因此,您会发现双端单链表的最坏运行时是O(n-1),实际上是O(n)

即使在有双端双链表的情况下,您也会发现最坏的运行时是O(n/2)(假设您有一种机制来判断元素是否在下半部分的前半部分,这是不可能的)。但是O(n/2)仍然是O(n)

因为我们在讨论大o时间复杂性时通常会提到最坏的情况,所以可以看到链表总是o(n)

注:
这并不是说big-o是衡量时间复杂性的唯一标准。根据您的实现,摊销时间复杂度或概率时间复杂度可能确实与最坏情况下的时间复杂度不同,而且很可能是。

假设我们只有指向链表一端的头指针,您就无法跳到另一端。所以最坏情况下的时间复杂度是O(n)。请注意,双端意味着有两个指针:头指针和尾指针