我已经阅读到,搜索位于双端单链表末尾的元素的时间复杂度为o(N)。
但是由于在前面搜索元素的时间复杂度是o(1),所以我认为对结束元素也应如此。有任何想法吗?谢谢
答案 0 :(得分:1)
搜索位于链表最前面的元素的成本确实是高昂的,因为您将持有一个指向该第一个元素的指针。因此,找到第一个元素将是O(1)。
对于双端单链接列表,假设您是要持有指向单链接列表的第一个元素和最后一个元素的指针,则确实会发现定位最后一个元素的时间为O( 1),因为您有确切的位置参考。
但是,考虑一个双端单链接列表的情况,您想在该列表中找到第(n-1)个元素。突然,您发现必须遍历n-1个元素,直到到达该元素为止。因此,您会发现双端单链接列表的最坏情况运行时是O(n-1),实际上是O(n)。
即使您有一个双头双向链表,您也会发现最坏的情况是O(n / 2),(假设您有一种机制来确定元素是否在前半部分中)的一半,这不太可能)。但是O(n / 2)仍然是O(n)。
由于我们通常在讨论big-o时间复杂度时是指最坏的情况,因此您可以看到链表始终是O(n)。
注意: 这并不是说big-o是衡量时间复杂度的唯一方法。取决于您的实现,摊销或概率时间复杂度的确可能与最坏情况下的时间复杂度有所不同,并且可能与此不同。