Data structures 从O(1)中的双链接列表中删除
我知道从双链接列表中删除一个元素的时间复杂度是O(1),这似乎是显而易见的,但是如果我们没有收到一个元素来删除它,而是收到一个被该元素包装的元素,会发生什么呢 例如,如果我们定义一个类元素来包装一个字符串(提供指向下一个和上一个元素的指针),如果方法接收到该元素作为输入而不是字符串,我们可以在O(1)中进行删除 如果remove方法接收到字符串,它必须在列表中搜索以找到相应的元素,对吗?因此,在这种情况下,时间复杂度将是O(n),不再是O(1) 你完全正确 删除被认为是Data structures 从O(1)中的双链接列表中删除,data-structures,linked-list,time-complexity,Data Structures,Linked List,Time Complexity,我知道从双链接列表中删除一个元素的时间复杂度是O(1),这似乎是显而易见的,但是如果我们没有收到一个元素来删除它,而是收到一个被该元素包装的元素,会发生什么呢 例如,如果我们定义一个类元素来包装一个字符串(提供指向下一个和上一个元素的指针),如果方法接收到该元素作为输入而不是字符串,我们可以在O(1)中进行删除 如果remove方法接收到字符串,它必须在列表中搜索以找到相应的元素,对吗?因此,在这种情况下,时间复杂度将是O(n),不再是O(1) 你完全正确 删除被认为是O(1)(当您执行Remo
O(1)
(当您执行Remove(Element)
)时),但通常这与查找操作(即Remove(String)
或Remove(find(String))
)一起进行,即O(n)
您完全正确
删除被认为是
O(1)
(当您执行Remove(Element)
)时),但通常这与查找操作一起进行(即Remove(String)
或Remove(find(String))
),即O(n)
此链表()使用一个非常可疑的方法,将属性插入到要添加到列表的对象中。它会在不搜索对象的情况下删除O(1),但如果将基本类型添加到列表中(添加属性时它们会被装箱),则会有属性名称冲突和性能损失的风险。此链接列表()使用一种非常可疑的方法,将属性插入要添加到列表中的对象中。它会在不搜索对象的情况下删除O(1),但如果您将基元类型添加到列表中(添加属性时它们会被装箱),则会有属性名称冲突和性能损失的风险。这里面有什么问题吗?看起来好像你提供了所有的答案…我以为我错了!所以在实际的实现中,它不是O(1),因为它总是说它是。但确切的措辞很重要。移除(节点)是不变的。当然,搜索是线性时间。这就是为什么侵入式链表(项目和列表节点是统一的)与它们一样有用的原因。@ArianHosseinzadeh-从双链接列表中删除节点总是O(1),只要您有要删除的节点。在本例中,算法首先需要找到节点。找到匹配的节点是O(n)。删除节点仍然是O(1)。也许不是正确的方法,但我发现如果使用字典而不是列表,效果会更好。这里面有什么问题吗?看起来好像你提供了所有的答案…我以为我错了!所以在实际的实现中,它不是O(1),因为它总是说它是。但确切的措辞很重要。移除(节点)是不变的。当然,搜索是线性时间。这就是为什么侵入式链表(项目和列表节点是统一的)与它们一样有用的原因。@ArianHosseinzadeh-从双链接列表中删除节点总是O(1),只要您有要删除的节点。在本例中,算法首先需要找到节点。找到匹配的节点是O(n)。删除节点仍然是O(1)。也许不是正确的方法,但我发现如果使用字典而不是列表,效果会更好。
class Element{
String content;
Element next;
Element previous;
}
class LinkedList{
...
public remove(String s){
//it has to first find the element corresponding to this String !
}
}