数据结构与算法Python版之北大慕课笔记(四)

  • 一、树
      • 1. 树结构相关术语
      • 2. 树的定义
        • 2.1 树的定义1
        • 2.2 树的定义2(递归定义)
  • 二、实现树
      • 1. 嵌套列表法
      • 2. 节点链接法
  • 三、树的应用:表达式解析
      • 1. 创建表达式解析树:过程
      • 2. 建立表达式解析树:规则
      • 3. 建立表达式解析树:思路
      • 4. 利用表达式解析树求值:思路
  • 四、树的遍历Tree Traversals
  • 五、优先队列Priority Queue
      • 1. 用非嵌套列表实现二叉堆
      • 2. 堆次序Heap Order
      • 3. 二叉堆操作的实现
  • 六、二叉查找树Binary Search Tree
      • 1. 二叉查找树BST的性质
      • 2. 二叉搜索树的实现
      • 3. 平衡二叉查找树:AVL树的定义
      • 4. 保持AVL树的平衡性质
  • 七、ADT Map实现方法小结

一、树

  • 树是一种非线性的数据结构,一般数据结构的图示把根放在上方,叶放在下方。
  • 树是一种分层结构,越接近顶部的层越普遍,越接近底部的层越独特。
  • 分类树的第二个特征:一个节点的子节点与另一个节点的子节点相互之间是隔离、独立的。
  • 分类树的第三个特征:每一个叶节点都具有唯一性。可以用从根开始到达每个种的完全路径来唯一标识每个物种。

1. 树结构相关术语

  • 节点Node:组成树的基本部分,每个节点具有名称,或“键值”,节点还可以保存额外数据项,数据项根据不同的应用而变。
  • 边Edge:边是组成树的另一个基本部分。每条边恰好连接两个节点,表示节点之间具有关联,边具有出入方向;每个节点(除根节点)恰有一条来自另一节点的入边;每个节点可以有多条连到其他节点的出边。
  • 根Root:树中唯一一个没有入边的节点。
  • 路径Path:由边依次连接在一起的节点的有序列表。
  • 子节点Children:入边均来自于同一个节点的若干节点,称为这个节点的子节点。
  • 父节点Parent:一个节点是其所有出边所连接节点的父节点。
  • 兄弟节点Sibling:具有同一个父节点的节点之间称为兄弟节点。
  • 子树Subtree:一个节点和其所有子孙节点,以及相关边的集合。
  • 叶节点Leaf:没有子节点的节点称为叶节点。
  • 层级Level:从根节点开始到达一个节点的路径,所包含的边的数量,称为这个节点的层级。根节点层级为0。
  • 高度:树中所有节点的最大层级称为树的高度。

2. 树的定义

2.1 树的定义1

树由若干节点,以及两两连接节点的边组成,并具有以下性质:

  • 其中一个节点被设定为根;
  • 每个节点n(除根节点),都恰连接一条来自节点p的边,p是n的父节点;
  • 每个节点从根开始的路径是唯一的。
  • 如果每个节点最多有两个子节点,这样的树称为“二叉树”。

2.2 树的定义2(递归定义)

树是:

  • 空集;或者由根节点及0或多个子树构成(其中子树也是树),每个子树的根到根节点具有边相连。

二、实现树

1. 嵌套列表法

  • 首先我们尝试用Python List来实现二叉树数据结构。

  • 递归的嵌套列表实现二叉树,由具有3个元素的列表实现: [root, left, right]

    1. 第1个元素为根节点的值;
    2. 第2个元素是左子树(所以也是一个列表);
    3. 第3个元素是右子树(所以也是一个列表)。
  • 对于二叉树,根是myTree[0],左子树myTree[1],右子树myTree[2]。

  • 嵌套列表法的优点:子树的结构与树相同,是一种递归数据结构;很容易扩展到多叉树,仅需要增加列表元素即可。

在这里插入图片描述

嵌套列表法代码:

def BinaryTree(r):  # 创建仅有根节点的二叉树return [r, [], []]def insertLeft(root,newBranch):  # 将新节点插入树中作为其直接的左子节点t = root.pop(1)if len(t) > 1:root.insert(1,[newBranch,t,[]])else:root.insert(1,[newBranch,[],[]])return rootdef insertRight(root,newBranch):  # 将新节点插入树中作为其直接的右子节点t = root.pop(2)if len(t) > 1:root.insert(2,[newBranch,[],t])else:root.insert(2, [newBranch, [], []])return rootdef getRootVal(root):  # 取得根节点return root[0]def setRootVal(root,newVal):  # 设置根节点root[0] = newValdef getLeftChild(root):  # 返回左子树return root[1]def getRightChild(root):  # 返回右子树return root[2]

代码运行示例:

在这里插入图片描述
在这里插入图片描述

2. 节点链接法

每个节点保存根节点的数据项,以及指向左右子树的链接。

在这里插入图片描述

节点链接法代码:

class BinaryTree:def __init__(self,rootObj):self.key = rootObj  # 成员key保存根节点数据项self.leftChild = None  # 成员leftChild保存指向左子树的引用self.rightChild = None  # 成员rightChild保存指向右子树的引用def insertLeft(self,newNode):if self.leftChild == None:self.leftChild = BinaryTree(newNode)else:t = BinaryTree(newNode)t.leftChild = self.leftChildself.leftChild = tdef insertRight(self,newNode):if self.rightChild == None:self.rightChild = BinaryTree(newNode)else:t = BinaryTree(newNode)t.rightChild = self.rightChildself.rightChild = tdef getRightChild(self):return self.rightChilddef getLeftChild(self):return self.leftChilddef setRootVal(self,obj):self.key = objdef getRootVal(self):return self.key

代码运行示例:

在这里插入图片描述

三、树的应用:表达式解析

  • 可以将表达式表示为树结构,叶节点保存操作数,内部节点保存操作符。
  • 表达式层次决定计算的优先级,越底层的表达式,优先级越高。例如全括号表达式:((7+3)*(5-2))
  • 树中的每个子树都表示一个子表达式。将子树替换为子表达式值的节点,即可实现求值。

在这里插入图片描述

1. 创建表达式解析树:过程

  • 首先,全括号表达式要分解为单词Token列表。其单词分为括号、操作符和操作数这几类,左括号是表达式的开始,而右括号是表达式的结束。对于全括号表达式:(3+(4*5))
  • 在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

2. 建立表达式解析树:规则

从左到右扫描全括号表达式的每个单词,依据规则建立解析树。

  • 如果当前单词是 “(”:为当前节点添加一个新节点作为其左子节点,当前节点下降为这个新节点;

  • 如果当前单词是操作符 “+, -, *, /”:将当前节点的值设为此符号,为当前节点添加一个新节点作为其右子节点,当前节点下降为这个新节点;

  • 如果当前单词是操作数:将当前节点的值设为此数,当前节点上升到父节点;

  • 如果当前单词是 “)”:则当前节点上升到父节点。

3. 建立表达式解析树:思路

创建树过程中关键的是对当前节点的跟踪,我们可以用一个栈来记录跟踪父节点。当前节点下降时,将下降前的节点push入栈;当前节点需要上升至父节点时,上升到pop出栈的节点即可。

建立表达式解析树代码实现:

def buildParseTree(fpexp):fplist = fpexp.split()pStack = Stack()eTree = BinaryTree('')pStack.push(eTree)  # 入栈下降currentTree = eTreefor i in fplist:if i == '(':  # 表达式开始currentTree.insertLeft('')pStack.push(currentTree)  # 入栈下降currentTree = currentTree.getLeftChild()elif i not in ['+','-','*','/',')']:  # 操作数currentTree.setRootVal(int(i))parent = pStack.pop()  # 出栈上升currentTree = parentelif i in ['+','-','*','/']:  # 操作符currentTree.setRootVal(i)currentTree.insertRight('')pStack.push(currentTree)currentTree = currentTree.getRightChild()elif i == ')':  # 表达式结束currentTree = pStack.pop()  # 出栈上升else:raise ValueErrorreturn eTree

4. 利用表达式解析树求值:思路

  • 由于二叉树BinaryTree是一个递归数据结构,自然可以用递归算法来处理。

  • 求值递归函数evaluate,可从树的底层子树开始,逐步向上层求值,最终得到整个表达式的值。

  • 求值递归函数evaluate的递归三要素:

    1. 基本结束条件:叶节点是最简单的子树,没有左右子节点,其根节点的数据项即为子表达式树的值。
    2. 缩小规模:将表达式树分为左子树、右子树,即为缩小规模。
    3. 调用自身:分别调用evaluate计算左子树和右子树的值,然后将左右子树的值依根节点的操作符进行计算,从而得到表达式的值。
  • 一个增加程序可读性的技巧:函数引用

    import operator
    op = operator.add
    n = op(1,2)
    

表达式解析树求值代码实现:

import operator
def evaluate(parseTree):opers = {'+':operator.add, '-':operator.sub,'*':operator.mul, '/':operator.truediv}# 缩小规模:leftC = parseTree.getLeftChild()rightC = parseTree.getRightChild()if leftC and rightC:fn = opers[parseTree.getRootVal()]return fn(evaluate(leftC),evaluate(rightC))  # 递归调用else:return parseTree.getRootVal()  # 基本结束条件

四、树的遍历Tree Traversals

按照对节点访问次序的不同来区分3种遍历:

  • 前序遍历(preorder):先访问根节点,再递归地前序访问左子树、最后前序访问右子树。
  • 中序遍历(inorder):先递归地中序访问左子树,再访问根节点,最后中序访问右子树。
  • 后序遍历(postorder):先递归地后续访问左子树,再后续访问右子树,最后访问根节点。

前序遍历的例子:

在这里插入图片描述

树的遍历:递归算法代码

# 树的遍历:递归算法代码# 前序遍历:
def preorder(tree):if tree:print(tree.getRootVal())preorder(tree.getLeftChild())preorder(tree.getRightChild())# 后序遍历:
def postorder(tree):if tree:postorder(tree.getLeftChild())postorder(tree.getRightChild())print(tree.getRootVal())# 中序遍历:
def inorder(tree):if tree:inorder(tree.getLeftChild())print(tree.getRootVal())inorder(tree.getRightChild())

在BinaryTree类里实现前序遍历,需要加入子树是否为空的判断:

def preorder(self):print(self.key)if self.leftChild:self.leftChild.preorder()if self.rightChild:self.rightChild.preorder()

后序遍历:表达式求值

# 后序遍历:表达式求值
def postordereval(tree):opers = {'+':operator.add, '-':operator.sub,'*':operator.mul, '/':operator.truediv}res1 = Noneres2 = Noneif tree:res1 = postordereval(tree.getLeftChild())  # 左子树res2 = postordereval(tree.getRightChild())  # 右子树if res1 and res2:return opers[tree.getRootVal()](res1,res2)  # 根节点else:return tree.getRootVal()

五、优先队列Priority Queue

  • 队列有一种变体称为“优先队列”。优先队列的出队跟队列一样从队首出队;

  • 但在优先队列内部,数据项的次序却是由“优先级”来确定:

​ 1. 高优先级的数据项排在队首,而低优先级的数据项排在后面。

​ 2. 这样,优先队列的入队操作就比较复杂,需要将数据项根据其优先级尽量挤到队列前方。

  • 实现优先队列的经典方案是采用二叉堆数据结构,二叉堆能够将优先队列的入队和出队复杂度都保持在O(logn)。
  • 二叉堆的有趣之处在于,其逻辑结构上像二叉树,却是用非嵌套的列表来实现的。
  • 最小key排在队首的称为“最小堆min heap”;反之,最大key排在队首的是“最大堆max heap”。

1. 用非嵌套列表实现二叉堆

  • 为了使堆操作能保持在对数水平上,就必须采用二叉树结构。

  • 同样,如果要使操作始终保持在对数数量级上,就必须始终保持二叉树的平衡,树根左右子树拥有相同数量的节点。

  • 或者采用“完全二叉树”的结构来近似实现平衡。完全二叉树,叶节点最多只出现在最底层和次底层,而且最底层的叶节点都连续集中在最左边,每个内部节点都有两个子节点,最多可有1个节点例外。

  • 完全二叉树由于其特殊性,可以用非嵌套列表以简单的方式实现,如下图:如果节点的下标为p,那么其左子节点下标为2p,右子节点为2p+1,其父节点下标为p//2。
    在这里插入图片描述

2. 堆次序Heap Order

任何一个节点x,其父节点p中的key均小于x中的key。这样,符合“堆”性质的二叉树,其中任何一条路径,均是一个已排序数列,根节点的key最小。

3. 二叉堆操作的实现

  • 二叉堆初始化,采用一个列表来保存堆数据,其中表首下标为0的项无用,但为了后面代码可以用到简单的整数乘除法,仍保留它。

  • insert(key)方法:首先,为了保持完全二叉树的性质,新key应该添加到列表末尾。新key加在列表末尾,显然无法保持堆次序,虽然对其它路径的次序没有影响,但对于其到根的路径可能破坏次序。需要将新key沿着路径来“上浮”到其正确位置。注意:新key的上浮不会影响其他路径节点的堆次序。

在这里插入图片描述

  • delMin()方法:移走整个堆中最小的key,根节点heapList[1],为了保持完全二叉树的性质,只用最后一个节点来代替根节点。同样,这操作还是破坏了堆次序。解决方法:将新的根节点沿着一条路径下沉,直到比两个子节点都小。下沉的路径选择:如果比子节点大,那么选择较小的子节点交换下沉。

  • buildHeap(lst)方法:从无序表生成堆。用下沉法,能将总代价控制在O(n)。

在这里插入图片描述

代码实现:

# 二叉堆操作的实现
class BinHeap:def __init__(self):self.heapList = [0]self.currentSize = 0def percUp(self,i):while i//2 > 0:if self.heapList[i] < self.heapList[i//2]:temp = self.heapList[i//2]self.heapList[i//2] = self.heapList[i]  # 与父节点交换self.heapList[i] = tempi = i//2  # 沿路径向上def insert(self,k):self.heapList.append(k)  # 添加到末尾self.currentSize = self.currentSize + 1self.percUp(self.currentSize)  # 新key上浮def percDown(self,i):while (i * 2) <= self.currentSize:mc = self.minChild(i)if self.heapList[i] > self.heapList[mc]:tmp = self.heapList[i]self.heapList[i] = self.heapList[mc]  # 交换下沉self.heapList[mc] = tmpi = mc  # 沿路径向下def minChild(self,i):if i*2 + 1 > self.currentSize:return i*2  # 唯一子节点else:if self.heapList[i*2] < self.heapList[i*2+1]:return i*2else:  # 返回较小的return i*2+1def delMin(self):retval = self.heapList[1]  # 移走堆顶self.heapList[1] = self.heapList[self.currentSize]self.currentSize = self.currentSize - 1self.heapList.pop()self.percDown(1)  # 新顶下沉return retvaldef buildHeap(self,alist):i = len(alist) // 2  # 从最后节点的父节点开始,因叶节点无需下沉self.currentSize = len(alist)self.heapList = [0] + alist[:]print(len(self.heapList),i)while (i > 0):print(self.heapList,i)self.percDown(i)i = i-1print(self.heapList,i)

六、二叉查找树Binary Search Tree

1. 二叉查找树BST的性质

  • 比父节点小的key都出现在左子树,比父节点大的key都出现在右子树。

在这里插入图片描述

  • 按照70,31,93,94,14,23,73的顺序插入。注意:插入顺序不同,生成的BST也不同。

在这里插入图片描述

2. 二叉搜索树的实现

  • put(key,val)方法:插入key构造BST。首先看BST是否为空,如果一个节点都没有,那么key成为根节点root,否则,就调用一个递归函数_put(key, val, root)来放置key。

  • _put(key,val,self.root)的流程:如果key比currentNode小,那么_put到左子树,但如果没有左子树,那么key就成为左子节点;如果key比currentNode大,那么_put到右子树,但如果没有右子树,那么key就成为右子节点。

  • BST.get方法:在树中找到key所在的节点取到payload。

  • TreeNode类中的__iter__迭代器,迭代器函数中用了for迭代,实际上是递归函数,yield是对每次迭代的返回值。

  • BST.delete方法:用_get找到要删除的节点,然后调用remove来删除,找不到则提示错误。

  • 从BST中remove一个节点,还要求仍然保持BST的性质,分以下三种情况:这个节点没有子节点;这个节点有1个子节点;这个节点有2个子节点。

  • 没有子节点的情况,直接删除。
    在这里插入图片描述

  • 被删节点有1个子节点,解决方法:将这个唯一的子节点上移,替换掉被删节点的位置。

在这里插入图片描述

  • 被删节点有2个子节点。这时无法简单地将某个子节点上移替换被删节点。但可以找到另一个合适地节点来替换被删节点,这个合适节点就是被删节点的下一个key值节点,即被删节点右子树中最小的那个,称为后继。
    在这里插入图片描述

代码实现:

class BinarySearchTree:def __init__(self):self.root = Noneself.size = 0def length(self):return self.sizedef __len__(self):return self.sizedef __iter__(self):return self.root.__iter__()def put(self,key,val):if self.root:self._put(key,val,self.root)else:self.root = TreeNode(key,val)self.size = self.size + 1def _put(self,key,val,currentNode):if key < currentNode.key:if currentNode.hasLeftChild():self._put(key,val,currentNode.leftChild)  # 递归左子树else:currentNode.leftChild = TreeNode(key,val,parent=currentNode)else:if currentNode.hasRightChild():self._put(key,val,currentNode.rightChild)  # 递归右子树else:currentNode.rightChild = TreeNode(key,val,parent=currentNode)def __setitem__(self, k, v):self.put(k,v)def get(self,key):if self.root:res = self._get(key,self.root)  # 递归函数if res:return res.payload  # 找到节点else:return Noneelse:return Nonedef _get(self,key,currentNode):if not currentNode:return Noneelif currentNode.key == key:return currentNodeelif key < currentNode.key:return self._get(key,currentNode.leftChild)else:return self._get(key,currentNode.rightChild)def __getitem__(self, key):return self.get(key)def __contains__(self, key):if self._get(key,self.root):return Trueelse:return Falsedef delete(self, key):if self.size > 1:nodeToRemove = self._get(key, self.root)if nodeToRemove:self.remove(nodeToRemove)self.size = self.size - 1else:raise KeyError('Error, key not in tree')elif self.size == 1 and self.root.key == key:self.root = Noneself.size = self.size - 1else:raise KeyError('Error, key not in tree')def __delitem__(self,key):self.delete(key)def remove(self,currentNode):if currentNode.isLeaf(): #leafif currentNode == currentNode.parent.leftChild:currentNode.parent.leftChild = Noneelse:currentNode.parent.rightChild = Noneelif currentNode.hasBothChildren(): #interiorsucc = currentNode.findSuccessor()succ.spliceOut()currentNode.key = succ.keycurrentNode.payload = succ.payloadelse: # this node has one childif currentNode.hasLeftChild():if currentNode.isLeftChild():  # 左子节点删除currentNode.leftChild.parent = currentNode.parentcurrentNode.parent.leftChild = currentNode.leftChildelif currentNode.isRightChild():  # 右子节点删除currentNode.leftChild.parent = currentNode.parentcurrentNode.parent.rightChild = currentNode.leftChildelse:  # 根节点删除currentNode.replaceNodeData(currentNode.leftChild.key,currentNode.leftChild.payload,currentNode.leftChild.leftChild,currentNode.leftChild.rightChild)else:if currentNode.isLeftChild():  # 左子节点删除currentNode.rightChild.parent = currentNode.parentcurrentNode.parent.leftChild = currentNode.rightChildelif currentNode.isRightChild():  # 右子节点删除currentNode.rightChild.parent = currentNode.parentcurrentNode.parent.rightChild = currentNode.rightChildelse:  # 根节点删除currentNode.replaceNodeData(currentNode.rightChild.key,currentNode.rightChild.payload,currentNode.rightChild.leftChild,currentNode.rightChild.rightChild)class TreeNode:def __init__(self,key,val,left=None,right=None,parent=None):self.key = key   # 键值self.payload = val   # 数据项self.leftChild = left   # 左子节点self.rightChild = right   # 右子节点self.parent = parent   # 父节点def hasLeftChild(self):return self.leftChilddef hasRightChild(self):return self.rightChilddef isLeftChild(self):return self.parent and self.parent.leftChild == selfdef isRightChild(self):return self.parent and self.parent.rightChild == selfdef isRoot(self):return not self.parentdef isLeaf(self):return not (self.rightChild or self.leftChild)def hasAnyChildren(self):return self.rightChild or self.leftChilddef hasBothChildren(self):return self.rightChild and self.leftChilddef replaceNodeData(self,key,value,lc,rc):self.key = keyself.payload = valueself.leftChild = lcself.rightChild = rcif self.hasLeftChild():self.leftChild.parent = selfif self.hasRightChild():self.rightChild.parent = selfdef findSuccessor(self):succ = Noneif self.hasRightChild():succ = self.rightChild.findMin()else:if self.parent:if self.isLeftChild():succ = self.parentelse:self.parent.rightChild = Nonesucc = self.parent.findSuccessor()self.parent.rightChild = selfreturn succdef findMin(self):current = selfwhile current.hasLeftChild():  # 到左下角current = current.leftChildreturn currentdef spliceOut(self):if self.isLeaf():if self.isLeftChild():  # 摘出叶节点self.parent.leftChild = Noneelse:self.parent.rightChild = Noneelif self.hasAnyChildren():if self.hasLeftChild():if self.isLeftChild():self.parent.leftChild = self.leftChildelse:self.parent.rightChild = self.leftChildself.leftChild.parent = self.parentelse:if self.isLeftChild():self.parent.leftChild = self.rightChild  # 摘出带右子节点的节点else:self.parent.rightChild = self.rightChildself.rightChild.parent = self.parent# 中序遍历的迭代:def __iter__(self):if self:if self.hasLeftChild():for elem in self.leftChild:yield elemyield self.keyif self.hasRightChild():for elem in self.rightChild:yield elem

3. 平衡二叉查找树:AVL树的定义

  • AVL树能在key插入时一直保持平衡。AVL是发明者名字的缩写。

  • AVL树的实现中,需要对每个节点跟踪“平衡因子 balance factor”参数。

  • 平衡因子是根据节点的左右子树的高度来定义的,确切地说,是左右子树的高度差:balanceFactor = height(leftSubTree) - height(rightSubTree)。如果平衡因子大于0,称为“左重left-heavy”,小于零称为“右重right-heavy”,平衡因子等于0,则称作平衡。

  • 如果一个二叉查找树中每个节点的平衡因子都在-1, 0, 1之间,则把这个二叉搜索树称为平衡树。

    在这里插入图片描述

  • 在平衡树操作过程中,有节点的平衡因子超出此范围,则需要一个重新平衡的过程。

分析AVL树最差情况下的性能:

  • 即平衡因子为1或者-1。下图为平衡因子为1的左重AVL树,树的高度从1开始,来看看问题规模(总节点数N)和比对次数(树的高度h)之间的关系如何?

    在这里插入图片描述

  • 观察上图h = 1~4时,总节点数N的变化:

    h = 1, N = 1

    h = 2, N = 2 = 1+ 1

    h = 3, N = 4 = 1 + 1 + 2

    h = 4, N = 7 = 1 + 2 + 4

    可得通式:Nh = 1 + Nh-1 + Nh-2 ,观察这个通式,很接近斐波那契。

    在这里插入图片描述在这里插入图片描述

对上图打红色问号的式子存在疑问,两边同时取对数,等号左边应该是log(Nh + 1)才对啊,希望有大神看到能为我解答困惑!

4. 保持AVL树的平衡性质

  • 首先,作为BST,新key必定以叶节点形式插入到AVL树中。

  • 叶节点的平衡因子是0,其本身无需重新平衡,但会影响其父节点的平衡因子:作为左子节点插入,则父节点平衡因子会增加1;作为右子节点插入,则父节点平衡因子会减少1.

  • 这种影响可能随着其父节点到根节点的路径一直传递上去,直到:传递到根节点为止;或者某个父节点的平衡因子被调整到0,不再影响上层节点的平衡因子为止。

在这里插入图片描述

rebalance重新平衡:

  • 主要手段:将不平衡的子树进行旋转rotation。视左重或者右重进行不同方向的旋转,同时更新相关父节点引用,更新旋转后被影响节点的平衡因子。

在这里插入图片描述

  • 如上图,是一个右重子树A的左旋转(并保持BST性质)。将右子节点B提升为子树的根,将旧根节点A作为新根节点B的左子节点;如果新根节点B原来有左子节点,则将此节点设置为A的右子节点(A的右子节点一定有空)。

  • 更复杂的情况:如下图左重的子树右旋转。旋转后,新根节点将旧根节点作为右子节点,但是新根节点原来已有右子节点,需要将原有的右子节点重新定位;原有的右子节点D改到旧根节点E的左子节点,同样,E的左子节点在旋转后一定有空。

在这里插入图片描述

  • 左旋转对平衡因子的影响:

在这里插入图片描述在这里插入图片描述

  • 下图右重子树,单纯的左旋转无法实现平衡,左旋转后变成左重了,左重再右旋转,还回到右重。

在这里插入图片描述

  • 所以,在左旋转之前检查右子节点的因子,如果右子节点左重的话,先对它进行右旋转,再实施原来的左旋转;同样,在右旋转之前检查左子节点的因子,如果左子节点右重的话,先对它进行左旋转,再实施原来的右旋转。

在这里插入图片描述

AVL树算法代价:

  • 经过复杂的put方法,AVL树始终维持平衡,get方法也始终保持O(logn)高性能。
  • 将AVL树的put方法分为两个部分:需要插入的新节点是叶节点,更新其所有父节点和祖先节点的代价最多为O(logn),如果插入的新节点引发了不平衡,重新平衡最多需要两次旋转,但旋转的代价与问题规模无关,旋转代价是常数O(1)。所以整个put方法的时间复杂度还是O(logn)。

七、ADT Map实现方法小结

推荐使用散列表和AVL树。

在这里插入图片描述

==================================================================
以上均为个人学习笔记总结,学习代码见week18
课程名称:数据结构与算法Python版_北京大学_中国大学MOOC(慕课)
课程主页: http://gis4g.pku.edu.cn/course/pythonds/

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. JSP:简单购物车

    注:案例来源:JSP程序设计 商品类:CatalogItem.java package shoppingCar;public class CatalogItem {private String itemID; // 商品IDprivate String shortDescription; // 简单描述private String longDescription; // 详细描述private double cost; // 价格public Catal…...

    2024/4/27 23:40:09
  2. Microsoft Store 无法加载页面,请稍后重试(错误代码:0x80131500)解决方案

    一、调整网络连接 先更换网络连接,比如连接个人手机热点,再使用 Microsoft Store 进行尝试。如果连接了 VPN 或下载了第三方防火墙应用,断开 VPN,卸载第三方防火墙应用。 按 “Windows 徽标键+X”,启动 “Windows PowerShell(管理员)”,输入以下命令,回车后重启设备:…...

    2024/4/24 10:18:40
  3. 智能呼叫系统之客户互动中心

    前面所介绍的呼叫系统技术主要是通过语音媒介为企业向客户提供必要的服务,提高企业在客户中的形象和地位。因此,呼叫系统在企业中的地位相对于生产、销售而言,一直处于辅助的性质。但是,随着时代的发展,企业在社会中的作用从提供产品转变为提供服务,企业之间的竞争也从产…...

    2024/4/26 8:47:29
  4. 一个关于excel给某列尾部加逗号操作

    把他们当成一个字符串然后, 设置单元格格式, 0 的话是数字,然后我之前还看到有个攻略就是@ ,但是我不行啊,一开始知道答案但是不会用,然后又研究了会儿。就发现了,想要在文字后面加逗号你 进入 ”设置单元格格式“然后,自定义, 然后 类型 , 最下面那个@ [就是在文字后…...

    2024/4/19 18:53:56
  5. 木子一夫的Docker学习

    安装Docker ①远程连接服务器或者虚拟机 uname -r //查看系统内核 只有3.0以上才能安装最新版Docker cat /etc/os-release //查看系统版本②进入Docker官方文档 //卸载旧版本的Dockeryum remove docker \docker-client \docker-client-latest \docker-common \docker-latest…...

    2024/4/16 7:38:33
  6. 那些年我失败的当让我依然热血沸腾的创业项目之快递到家这里写自定义目录标题

    那些年我失败的当让我依然热血沸腾的创业项目之快递到家这里写自定义目录标题 上一篇我聊的是智慧运动场的项目。这依然是一个好项目,能给广大运动爱好者带来新体验的好项目。我相信每一个足球爱好者,心中的梦想是能去洛坎普的草皮上踢一场球。并且记录下每一滴滴在洛坎普的我…...

    2024/4/20 1:44:14
  7. 企业—Docker的网络

    1.什么是docker的网络? 我们搭建好的docker不仅仅是在本机上运行,我还要其他用户来访问我。docker的原生网络有三种:bridge(默认)、host(主机模式)、none(无网络模式)。docker也可以自定义网络,下面来具体介绍这些。 2.bridge 当我们开启docker服务时,会自动生成一个do…...

    2024/4/24 10:18:46
  8. Java基础复习-9-异常、线程

    异常、线程 主要内容异常、线程教学目标能够辨别程序中异常和错误的区别说出异常的分类说出虚拟机处理异常的方式列举出常见的三个运行期异常能够使用try…catch关键字处理异常能够使用throws关键字处理异常能够自定义异常类能够处理自定义异常类说出进程的概念说出线程的概念能…...

    2024/4/24 10:18:39
  9. 考研总结,换口气,下一个起点。

    2020年5月31日,随着拟录取的到来,我的近乎1年的考研日子终于圆满结束了,很感谢自己有勇气坚持做好这件事情,也希望通过这件事情,能够衍生出很多事情,make your decision and do not look back,遇见挑战也不要轻言放弃。最后总成绩为365,政治68,英语80,数学106,计算机…...

    2024/4/24 10:18:37
  10. Qt串口通讯例子(再也不用担心串口问题了)

    很多小伙伴们对串口编程刚上手时,不知道如何下手,本例子带大家看看一个简单的串口通讯的例子,例子是网上的demo,这里简单的介绍下:这是我们常见的界面窗口,下面我们来解析下代码部分:串口步骤:* 1.设置串口参数* 2.打开串口* 3.读/写串口* 4.关闭串口#ifndef SERIALPOR…...

    2024/4/24 10:18:37
  11. Easter Eggs

    题目链接:Easter Eggs显然可以二分。 然后怎么check呢?显然我们把距离小于mid的点连起来,那么就相当于找一个最大独立集,然后最大独立集的个数要大于等于n。 然后因为连边的只是蓝色和红色之间,所以这是一个二分图,之间匈牙利即可。AC代码: #pragma GCC optimize("…...

    2024/4/27 22:23:05
  12. 基于PID的车辆ABS建模与仿真

    基于PID的车辆ABS建模与仿真1.背景2.PID3.汽车ABS原理4.汽车ABS的数学模型4.1 汽车动力学模型4.2 汽车轮胎模型4.3 汽车制动器模型5.汽车 ABS 的 Simulink 模型5.1 轮速Simulink模型5.2 车速Simulink模型5.3 滑移率仿真模型6 仿真结果 1.背景 随着汽车技术的不断进步,汽…...

    2024/4/24 10:18:37
  13. 算法-动态规划-新21点

    算法-动态规划-新21点 1 题目概述 1.1 题目出处 https://leetcode-cn.com/problems/new-21-game/ 1.2 题目描述 爱丽丝参与一个大致基于纸牌游戏 “21点” 规则的游戏,描述如下: 爱丽丝以 0 分开始,并在她的得分少于 K 分时抽取数字。 抽取时,她从 [1, W] 的范围中随机获得…...

    2024/4/24 10:18:33
  14. django 服务器重启uwsgi服务

    重启代码,该代码需要在 uwsgi.pid 文件目录下执行 uwsgi --reload uwsgi.pid如果你没有uwsgi.pid文件,需要在uwsgi.ini文件里面添加下面配置# uwsgi.pid文件前面的路径按照你的要求设置 pidfile = /usr/local/test_project/conf/uwsgi.pid配置完成后重启uwsgi服务会自动生成 …...

    2024/4/24 10:18:33
  15. static关键字有何魔法?竟让Spring Boot里搞出那么多静态内部类

    当大潮退去,才知道谁在裸泳。 作者:A哥(YourBatman) 公众号:BAT的乌托邦(ID:BAT-utopia) 文末是否有彩蛋:有目录前言版本约定正文Spring下的静态内部类认识静态/普通内部类static静态配置类提升配置优先级源码分析静态内部类在容器内的beanName是什么?进阶:Spring下…...

    2024/4/24 10:18:31
  16. Postman Script 脚本语法总结

    Postman的强大之处在于其允许在对某一个request访问的之前和之后分别运行自定义的一段Javascript脚本,这样直接就完成了一个chain request的效果,可以将数条request连结成一个流程完成一体化测试。这在很多的API操作中都是极其有用的,所以这里有必要总结一些常用语句。参考p…...

    2024/4/24 10:18:38
  17. 递归算法解决八皇后问题

    在 88 格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。高斯认为有 76 种方案。1854 年在柏林的象棋杂志上不同的作者发表了 40 种不同的解,后来有人用图论的方法解出 92 种结果。(这个问题也一共有92种…...

    2024/4/24 10:18:29
  18. 源码网站分享

    互站网:https://www.huzhan.com/挖鱼源码网:http://www.wayu.cn/懒人之家:https://www.lanrenzhijia.com/创e资源:https://www.chuange8.cn/...

    2024/4/24 10:18:29
  19. 【力扣】面试04.08:首个共同祖先

    题目描述 设计并实现一个算法,找出二叉树中某两个节点的第一个共同祖先。不得将其他的节点存储在另外的数据结构中。注意:这不一定是二叉搜索树。 算法 第一版的思路来源:将树的节点按照一定规则编号,然后反向计算祖节点的位置 class Solution:def lowestCommonAncestor(se…...

    2024/4/16 7:39:20
  20. Leetcode答题 --- 转换成小写字母

    题目 实现函数 ToLowerCase(),该函数接收一个字符串参数 str,并将该字符串中的大写字母转换成小写字母,之后返回新的字符串。示例 输入: "Hello" 输出: "hello"思路 使用String原生方法toLowerCase(),还可以通过ASCII枚举转换 实现 var toLowerCase = …...

    2024/4/19 8:32:29

最新文章

  1. 拉链法解决哈希冲突

    1.基本思想: 相同散列地址的记录链成一单链表,m个散列地址就设m个单链表,然后用一个数组将m个单链表的表头指针存储起来,形成一个动态的结构. 例如:一组关键字为{19,14,23,1,68,20,84,27,55,11,10,79},散列函数为:Hash(key)key%13, 就会发现有些元素是同义词,比如14%131,1%131…...

    2024/4/28 4:23:18
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. AI小程序的创业方向:深度思考与逻辑引领

    随着人工智能技术的快速发展&#xff0c;AI小程序逐渐成为创业的新热点。在这个充满机遇与挑战的时代&#xff0c;我们有必要深入探讨AI小程序的创业方向&#xff0c;以把握未来的发展趋势。 一、目标市场定位 首先&#xff0c;我们要明确目标市场。针对不同的用户需求&#x…...

    2024/4/27 11:03:33
  4. 在 Visual Studio Code (VSCode) 中隐藏以 . 开头的文件

    打开VSCode。 按下Ctrl ,快捷键打开设置。您也可以点击屏幕左下角的齿轮图标&#xff0c;然后选择“Settings”。 在设置搜索框中&#xff0c;键入files.exclude。 在找到的Files: Exclude项中&#xff0c;点击Add Pattern按钮来添加一个新的模式&#xff0c;或者直接在搜索…...

    2024/4/22 21:08:05
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/26 18:09:39
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/28 3:28:32
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/26 23:05:52
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/27 4:00:35
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/27 9:01:45
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/28 1:22:35
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/25 18:39:14
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/26 23:04:58
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/27 23:24:42
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/25 18:39:00
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/26 19:46:12
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/27 11:43:08
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/27 8:32:30
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57