提高组复习一

本文深入探讨了数据结构中的前缀和与差分数组在区间查询和修改上的应用,阐述了ST表在区间最值问题中的高效解决方案,介绍了树状数组在动态维护区间和中的优势,并详细讲解了字典树在字符串处理中的作用。同时,涵盖了线段树的基本概念和操作,以及二叉堆和二叉查找树的特性与操作。这些数据结构和算法在解决实际问题中具有重要作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前缀和与差分
  • 一维前缀和数组的递推公式一维前缀和数组的递推公式
     
     
     
  • 求a[l...r]的区间和求a[l...r]的区间和a[l...r]
     
     
     
  • 维护一维前缀和数组的时间复杂度是?利用前缀和数组区间求和的时间复杂度是?维护一维前缀和数组的时间复杂度是?利用前缀和数组区间求和的时间复杂度是?
     
     
     
  • 在算法题中使用前缀和数组的主要目的是?在算法题中使用前缀和数组的主要目的是?使
     
     
     
  • 二维前缀和数组的递推公式二维前缀和数组的递推公式
     
     
     
  • 求(i,j)到(k,l)的区间和求(i, j)到(k, l)的区间和(i,j)(k,l)
     
     
     
  • 差分数组的递推公式差分数组的递推公式
     
     
     
  • 利用差分数组,将a[l...r]的每一项加上d,做法是:利用差分数组,将a[l...r]的每一项加上d,做法是:a[l...r]d
     
     
     
  • 利用差分数组,将a[l...r]的每一项减去d,做法是:利用差分数组,将a[l...r]的每一项减去d,做法是:a[l...r]d
     
     
     
  • 维护一维差分数组的时间复杂度是?利用差分数组区间修改的时间复杂度是?维护一维差分数组的时间复杂度是?利用差分数组区间修改的时间复杂度是?
     
     
     
  • 前缀和序列的差分序列是?前缀和序列的差分序列是?
     
     
     
  • 差分序列的前缀和序列是?差分序列的前缀和序列是?
     
     
     
区间最值问题,ST表(Sparse Table),倍增算法
  • 当需要频繁查询区间最值时,可以利用ST表把查询的时间复杂度降低为?当需要频繁查询区间最值时,可以利用ST表把查询的时间复杂度降低为?ST
  • 预处理ST表的时间复杂度是?预处理ST表的时间复杂度是?ST
     
     
     
  • 在预处理得到的ST表f[i][j]中,i表示?j表示?f表示?在预处理得到的ST表f[i][j]中,i表示?j表示?f表示?STf[i][j]ijf
     
     
     
  • f数组如何初始化?递推公式是?f数组如何初始化?递推公式是?f
  • 变量i的循环范围?变量j的循环范围?哪个是外循环?变量i的循环范围?变量j的循环范围?哪个是外循环?ij
     
     
     
  • 利用ST表求区间a[l...r]最大值的做法是?利用ST表求区间a[l...r]最大值的做法是?STa[l...r]
     
     
     
  • 能不能用ST表求区间和?为什么?能不能用ST表求区间和?为什么?ST
     
     
     
树状数组
  • 利用树状数组修改或查询的时间复杂度是?利用树状数组修改或查询的时间复杂度是?
     
     
     
  • 在树状数组这个数据结构中,我们把a[1...50]这个区间分成哪几组?在树状数组这个数据结构中,我们把a[1...50]这个区间分成哪几组?a[1...50]
  • 把a[1...22]这个区间分成哪几组把a[1...22]这个区间分成哪几组a[1...22]
  • 如果要对区间a[23...50]求和,如何计算?如果要对区间a[23...50]求和,如何计算?a[23...50]
     
     
     
  • 写出lowbit函数写出lowbit函数lowbit
     
     
     
  • lowbit(28)=?,lowbit(28−lowbit(28))=?lowbit(28) = ?,lowbit(28 - lowbit(28)) = ?lowbit(28)=?lowbit(28lowbit(28))=?
     
     
     
  • 如果用c数组来表示a数组的树状数组,那么c[1]到c[8]分别表示什么?如果用c数组来表示a数组的树状数组,那么c[1] 到 c[8]分别表示什么?cac[1]c[8]
     
     
     
  • c[28]表示什么?c[28]表示什么?c[28]
     
     
     
  • a[1...50]的区间和,可以表示为c数组哪几项之和?a[1...50]的区间和,可以表示为c数组哪几项之和?a[1...50]c
     
     
     
  • 如果n=100,当a[9]减少3时,需要更新c数组的哪几项?更新成多少?如果n = 100,当a[9]减少3时,需要更新c数组的哪几项?更新成多少?n=100a[9]3c
     
     
     
  • 根据前面的问题,回忆并写出update函数和getSum函数根据前面的问题,回忆并写出update函数和getSum函数updategetSum
     
     
     
线段树
  • 如果u结点表示区间a[l...r],则它的左孩子和右孩子分别表示什么区间?如果u结点表示区间a[l...r],则它的左孩子和右孩子分别表示什么区间?ua[l...r]
     
     
     
  • 用线段树表示序列a[1...13],一共有多少个结点?用线段树表示序列a[1...13],一共有多少个结点?线a[1...13]
     
     
     
  • 接上题,若要查询区间a[7...12],可以通过哪几个结点的值来获得?接上题,若要查询区间a[7...12],可以通过哪几个结点的值来获得?a[7...12]
     
     
     
  • 若a序列有n个数,则声明线段树时,设置结构体数组的长度最少为多少?若a序列有n个数,则声明线段树时,设置结构体数组的长度最少为多少?an线
     
     
     
  • 如果要查询的区间是a[A...B],当前查询到的结点编号是u,则:如果要查询的区间是a[A...B],当前查询到的结点编号是u,则:a[A...B]u
  • 满足什么条件时,可以直接返回该结点的值?满足什么条件时,可以直接返回该结点的值?
  • 满足什么条件时,需要遍历该结点的左子树?满足什么条件时,需要遍历该结点的左子树?
  • 满足什么条件时,需要遍历该结点的右子树?满足什么条件时,需要遍历该结点的右子树?
     
     
     
  • 如果要修改的数是a[pos...pos],当前查询到的结点编号是u,则:如果要修改的数是a[pos...pos],当前查询到的结点编号是u,则:a[pos...pos]u
  • 满足什么条件时,可以直接修改该结点的值?满足什么条件时,可以直接修改该结点的值?
  • 满足什么条件时,需要修改的区间在该结点的左子树?满足什么条件时,需要修改的区间在该结点的左子树?
  • 满足什么条件时,需要修改的区间在该结点的右子树?满足什么条件时,需要修改的区间在该结点的右子树?
     
     
     
  • 在建立线段树,或单点修改的函数中,最后一行代码是什么?在建立线段树,或单点修改的函数中,最后一行代码是什么?线
     
     
     
字典树
  • 如果用n个字符串建立字典树,每个字符串的长度不超过10,则最多有多少个结点?如果用n个字符串建立字典树,每个字符串的长度不超过10,则最多有多少个结点?n10
  • 每个结点最多有多少个子结点?每个结点最多有多少个子结点?
     
     
     
  • 写出在字典树上插入字符串的函数,(写出大意,或者用伪代码皆可)写出在字典树上插入字符串的函数,(写出大意,或者用伪代码皆可)()
     
     
     
  • 写出在字典树上查询字符串的函数,(写出大意,或者用伪代码皆可)写出在字典树上查询字符串的函数,(写出大意,或者用伪代码皆可)()
     
     
     
二叉堆
  • 如果二叉堆根结点编号为1,u号结点有左孩子、右孩子、父结点,则它们的编号分别是?如果二叉堆根结点编号为1,u号结点有左孩子、右孩子、父结点,则它们的编号分别是?1u
     
     
     
  • 小根堆的定义是什么?小根堆的定义是什么?
     
     
     
  • 在用数组模拟二叉堆时,插入新元素的操作是什么?(写出大意,或者用伪代码皆可)在用数组模拟二叉堆时,插入新元素的操作是什么?(写出大意,或者用伪代码皆可)()
     
     
     
  • 在用数组模拟二叉堆时,删除堆顶元素的操作是什么?(写出大意,或者用伪代码皆可)在用数组模拟二叉堆时,删除堆顶元素的操作是什么?(写出大意,或者用伪代码皆可)()
     
     
     
  • 在用数组模拟二叉堆时,删除u号结点的操作是什么?(写出大意,或者用伪代码皆可)在用数组模拟二叉堆时,删除u号结点的操作是什么?(写出大意,或者用伪代码皆可)u()
     
     
     
  • 如何用优先队列声明一个小根堆?其中元素的类型为int。如何用优先队列声明一个小根堆? 其中元素的类型为int。?int
  • 这时需要重新定义“<”运算符,还是“>”运算符?这时需要重新定义“<”运算符,还是“>”运算符?<>
     
     
     
二叉查找树
  • 二叉查找树的()序遍历是有序序列?是升序还是降序?二叉查找树的()序遍历是有序序列?是升序还是降序?
     
     
     

  • 写出在二叉查找树上插入一个元素的函数,(写出大意,或者用伪代码皆可)写出在二叉查找树上插入一个元素的函数,(写出大意,或者用伪代码皆可)()
     
     
     

  • 在二叉查找树上,如果x大于等于u号结点的数值,则x的后继()在二叉查找树上,如果x大于等于u号结点的数值,则x的后继()xux

  • 在二叉查找树上,如果x小于u号结点的数值,则x的后继()在二叉查找树上,如果x小于u号结点的数值,则x的后继()xux
     
     
     

  • 在Treap树中,约定根结点的优先级大于它的孩子的优先级,在Treap树中,约定根结点的优先级大于它的孩子的优先级,Treap,

  • 如果u号结点的优先级小于它的右孩子的优先级,应该执行()操作?如果u号结点的优先级小于它的右孩子的优先级,应该执行()操作?u

  • 执行该操作后,u号结点的右孩子是原来的(),u号结点成了原来u的右孩子的()执行该操作后,u号结点的右孩子是原来的(),u号结点成了原来u的右孩子的()uuu
     
     
     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值