Wavelet tree

news/2025/11/18 23:04:52/文章来源:https://www.cnblogs.com/gsc0618china/p/19239668

具体学习可参考:

原文

知乎翻译版本

速通:

假设初始的数组是 \(T\)

init

初始化。

我们假设值域的最高 bit 位是 \(up\)。考虑从 \(up\) 开始往低位扫,每次我们把当前的 \(T\) 按照这一位的值做稳定排序并创建新版本,在过程中,我们给每一个 \(T\) 创建它的数组 \(B\) 表示接下来需要排序的关键字位的值(0/1-bit)。显然的,这个 \(B\) 也和 \(T\) 对应拥有多个版本。

access

\(T_i\)。因为我们只会存储 \(B\) 数组。

考虑求出来 \(T_i\) 的每一个 bit 位的值,最开始版本的 \(B\) 显然就是最高位的 0/1bit,并且位置还没开始排,直接用,然后考虑锁定这个 \(T_i\) 在下一个版本被排到第几个位置。如果这一位是 \(1\),那么下一个版本 \(0\) 和原本位置就在它前面的 \(1\) 会在它前面,算一下个数。如果是 \(0\) 的话就是前面的 \(0\) 在它前面。这样跳完所有版本即可。

用这个方法我们可以求解任意版本 \(T\) 的这个东西。

rank

\(T_{1,2,3,...i}\)\(c\) 的出现次数。我们考虑对于最终版本记录每个数的起始位置,那么现在我们就要求结束位置,因为最终版本显然相同数都在一段内。

我们考虑这样做,我们从初始版本扫,或者说从最高位开始扫,每次我们把 \(c\) 的当前位做一个限制(满足这一位等于 \(c\) 的这一位),维护当下版本满足当下限制的末尾位置,那么扫完了就是满足所有限制即 \(=c\) 的末尾位置了。记这个末尾位置是 \(t\),维护 \(t\),最开始 \(t=i\)(没有任何限制,显然末尾就是 \(i\))。

怎么做加入限制?比如加入的是最高位为 \(0\),那么就是查初始版本的 \(B\) 的前 \(t\)\(0\) 有多少个,有 \(c\) 个那么新的末尾就是 \(c\)。然后 \(1\) 的话同理,就是整个 \(B\)\(0\) 加上前 \(t\)\(1\)

最后得到一个 \(t\),算一下就有次数了。

用这个方法我们可以求解任意版本 \(T\) 的这个东西。

select

求第 \(i\)\(c\)。是 rank 的逆运算,类似,不多叙述。

用这个方法我们可以求解任意版本 \(T\) 的这个东西。

quantile

求区间第 \(k\) 小。

好的,终于到比较 hard 的问题了。既然我们有 wavelet tree 按照 bit 划分的结构,那么我们可以考虑利用这个结构。我们还是从初始版本和最高位开始扫,我们尝试用递归的一个结构,假设当前要求当前版本的 \([l,r]\)\(min:k-th\),我们考虑这个区间里面 \(B=0,1\) 的,\(B=0\)\(B=1\) 的在排序后显然分别都对应一个区间,并且 \(B=0\) 的区间里的数显然均小于 \(B=1\) 的,那么我们就类似 01trie 一样决策一下走到哪里即可,递归下去即可。

ranking

显然等价于 quantile,做法也类似,不讲了 qwq。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/969438.shtml

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

相关文章

买完学习机还需要去线下补课吗? AI 学习机 + 自习室是中小学生普娃的更优解!

买完学习机还需要去线下补课吗? "AI 学习机 + 自习室"是中小学生普娃的更优解!当孩子成绩不理想时,单一依赖 AI 学习机常陷入 “诊断不深、练习盲目、缺乏监督” 的困境 —— 而 2025 年异军突起的黑马品牌…

251118

251118今天我发现了世界的三大奥秘 1 偏执转移,人对某些事物会产生强迫性的偏执,例如过度整洁,必须用同一个水杯喝水等等,在涉及相关的精神原始创伤被解决之前,偏执会一直存在,并且会以不同形式表现出来 2 图文印…

拥护UE4.27、UE5.0、UE5.1、UE5.2、UE5.3、UE5.4、UE5.5的VS2022一键安装技巧

拥护UE4.27、UE5.0、UE5.1、UE5.2、UE5.3、UE5.4、UE5.5的VS2022一键安装技巧pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-fam…

Dify VS LangGraph

目录1. 优先选择 Dify 的场景2. 优先选择 LangGraph 或 LangChain 高代码开发的场景总结:核心决策依据参考资料 实际落地中,也可结合使用:例如用 Dify 快速搭建 MVP 验证需求,待业务稳定后,将核心复杂逻辑用 Lang…

动态重心

如果树 \(T\) 删去某个节点 \(u\) 后,所有子树大小均不超过 \(n / 2\),则 \(u\) 为 \(T\) 的重心。 性质一棵树的重心一定在直径上。 重心只有 1/2 个。如果有两个则相邻,删去它们的连边后变成两个 \(n / 2\) 的子树…

nerdbox 进程树

root 3525 1.6 3.0 4557956 120436 pts/1 Sl 22:45 0:01 /usr/local/bin/containerd-shim-nerdbox-v1 -namespace default -id test -address /run/containerd/containerd.sockroot@localhost:~# /usr/s…

GAN生成对抗网络学习-例子:生成逼真手写数字图 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

LangChain v1.0 大模型的调用

LangChain之大模型的调用 from langchain_openai import ChatOpenAI from dotenv import load_dotenv import osload_dotenv() api_key = os.getenv(DEEPSEEK_API_KEY) model = ChatOpenAI(model=deepseek-chat,temper…

从工匠故事读懂开源软件的特点与价值 - 实践

从工匠故事读懂开源软件的特点与价值 - 实践2025-11-18 22:47 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: bl…

linuxserver/librespeed镜像在host网络模式下自定义web监听端口

首先挂载宿主机自定义config目录到容器的/config目录。 docker-compose.yml片段示例:volumes:- /path/to/config:/config然后容器启动后,在宿主机的目录中找到config/nginx/site-confs/default.conf文件打开 修改其中…

详细介绍:pdf解析工具---Miner-u 本地部署记录

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Maven 无用依赖清理与依赖冲突解决

Maven 无用依赖清理与依赖冲突解决目录一、核心目标二、无用依赖清理方案1. 利用 Maven 自带依赖分析命令核心命令报告结果解读与使用关键注意事项2. 手动梳理间接依赖(依赖树命令详解)核心命令与参数解析命令输出解…

强化学习从入门到放弃 —— 跟着 OpenAI 学强化学习

核心概念解析 简而言之,强化学习是关于智能体(agent)以及它们如何通过试错来学习的研究。它将这样一种理念形式化:对智能体的行为进行奖励或惩罚,会使它在未来更有可能重复或放弃该行为。 强化学习能做什么? 强化…

使用Action表驱动代替switch…case语句

大家都知道,代码中出现过多的if…else嵌套语句时很难读,所以常用switch…case语句进行代替,代码的可读性就好了很多。 举个简单的例子:public void DoSomeThing(string str){if (str == "A") {DoSomethi…

LangChain v1.0 Agent的工具定义及调用

LangChain Agent工具的定义 大模型是Agent的大脑,工具就是Agent的手和脚 构建Agent时,要提供一个工具列表 首先需要创建Agent项目安装LangGraph CLI(python需要大于等于3.11版本)pip install --upgrade "langgr…

linux c qt

您提到的“Linux C Qt”可能涉及以下几个方面:1. Linux 环境下的 C 编程C 是一种底层语言,适合开发系统级程序、驱动、性能敏感的应用等。 在 Linux 系统中,C 程序可以通过 gcc 编译,使用 make 构建,支持多种操作…

linux c mysql库

在 Linux 系统中,如果你想要使用 C 语言 与 MySQL 进行交互,通常需要使用 MySQL C API 或者 MySQL Connector/C,这是 MySQL 官方提供的 C 语言接口。? 一、MySQL C API(原生接口) MySQL C API 是 MySQL 官方提供…

L11 RuoYi_数据分页的总条数分析

作业好像没限制条件,照抄ppt 今日配乐:风雷鼓 过程 选择:系统管理->日志管理->操作日志访问日志页面发起了三次请求sys_oper_type:返回10种操作类型sys_common_status:返回系统两种状态list?pageNum=1&p…

2025最新江苏苏州、高邮、镇江方向(专线)物流、当日往返运输、配送中心、分拨中心服务商推荐:时效性高,线路可定制,提供仓储、供应链等物流全链条服务

随着商贸流通领域的快速发展,高效可靠的物流服务成为连接生产与市场的关键纽带。在2025年物流行业竞争格局中,山东临沂大金物流有限公司凭借近二十年的专业积淀与区域深耕优势,成为众多企业信赖的物流合作伙伴。 山…

c#json帮助类

public class JsonFileHelper{public static string JsonConfigFileName = "SunSofteWareAppConfig.Json";#region 配置文件读写private static JsonSerializerSettings _settings = new JsonSerializerSett…