Tag: time complexity

LinkedList如何添加(int,E)O(1)复杂度?

从链表标签维基摘录: 链表是一种数据结构,其中元素包含对下一个(以及可选的前一个)元素的引用。 链接列表提供在任何位置的O(1)插入和移除 ,O(1)列表串联,以及前(和可选后)位置的O(1)访问以及下一元素访问的O(1)。 随机访问具有O(N)复杂性并且通常是未实现的。 (强调我的) 我很惊讶地读到这一点 – 如何将列表插入一个复杂度低于简单读取索引的随机索引? 所以我查看了java.util.LinkedList的源代码 。 add(int, E)方法是: public void add(int index, E element) { addBefore(element, (index==size ? header : entry(index))); } addBefore(E, Entry方法只是指针重新分配,但也有entry(int)方法 : if (index = size) throw new IndexOutOfBoundsException(“Index: “+index+ “, Size: “+size); Entry e = header; if (index > 1)) { for (int i = 0; […]

算法 – O(n)中二进制搜索树的每两个节点之间的距离之和?

问题是找出BinarySearchTree的每两个节点之间的距离总和,假设每个父子对由单位距离分开。 每次插入后都要计算。 例如: ->first node is inserted.. (root) total sum=0; ->left and right node are inserted (root) / \ (left) (right) total sum = distance(root,left)+distance(root,right)+distance(left,right); = 1 + 1 + 2 = 4 and so on….. 我提出的解决方案: 蛮力。 脚步: 执行DFS并跟踪所有节点: O(n) 。 选择每两个节点并使用最低公共祖先方法计算: O(nC2)_times_O(log(n))=O(n2log(n))之间的距离并将它们相加。 总体复杂性: -O(n2log(n)) 。 O(nlog(n)) 。 脚步:- 在插入之前执行DFS并跟踪所有节点: O(n) 。 计算插入节点与之间的距离: O(nlog(n)) […]