Radix Tree用法

目录

  • 一、radix tree定义
  • 二、radix tree操作
    • 参考资料

一、radix tree定义

对于长整型数据的映射,如何解决Hash冲突和Hash表大小的设计是一个很头疼的问题。
radix树就是针对这种稀疏的长整型数据查找,能快速且节省空间地完成映射。借助于Radix树,我们可以 实现对于长整型数据类型的路由。 利用radix树可以根据一个长整型(比如一个长ID)快速查找到其对应的对象指针。这比用hash映射来的简单,也更节省空间,使用hash映射hash函数难以设计,不恰当的hash函数可能增大冲突,或浪费空间。

二、radix tree操作

radix Tree(基数树) 其实就差不多是传统的二叉树,只是在寻找方式上,利用比如一个unsigned int的类型的每一个比特位作为树节点的判断。
可以这样说,比如一个数1000101010101010010101010010101010,那么按照Radix 树的插入就是在根节点,如果遇到0,就指向左节点,如果遇到1就指向右节点,在插入过程中构造树节点,在删除过程中删除树节点。如果觉得太多的调用Malloc的话,可以采用池化技术,预先分配多个节点。
(使用一个比特位判断,会使树的高度过高,非叶节点过多。故在实际应用中,我们一般是使用多个比特位作为树节点的判断,但多比特位会使节点的子节点槽变多,增大节点的体积,一般选用2个或4个比特位作为树节点即可)

#include "radix.h"
struct radix radix;
uint64_t tmp = 0, node, addr;
radix_init(&radix);radix_put(&radix, (void *)(uint64_t)(4), (uint64_t)i); // 插入元素 4 到地址 i 中
radix_get(&radix, (uint64_t)i, (void **)&tmp); 	  // 负数:获取失败; 0:获取成功
radix_remove(&radix, (uint64_t)i, (void **)&tmp); // 删除元素radix_iter_init_position(&radix, &iter, 6);	  
radix_iter_prev(&iter, (void **)&node, &addr) // 获取元素前一个

参考资料

  1. 数据结构之Radix Tree

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

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

相关文章

数组实现循环队列(增设队列大小size)

目录 一、前言 1.如何实现循环? 2.如何判断队列为空? 3.如何判断队列为满? 二、循环队列的结构定义 三、循环队列的创建及其初始化 四、入队 五、出队 六、取队头元素 七、取队尾元素 八、循环队列判空 九、循环队列判满 十、循环…

虾皮数据分析网站:了解Shopee市场趋势与优化运营的利器

在如今的电商时代,越来越多的人选择在虾皮购物(Shopee)平台上开设自己的店铺。然而,要在这个竞争激烈的市场中脱颖而出并取得成功,并不是一件容易的事情。为了更好地了解市场趋势、优化产品和店铺运营,了解…

Java面试题(每天10题)-------连载(40)

目录 Mysql篇 1、表中有大字段X(例如:text类型),且字段X不会经常更新,将该字段拆成子表好处是什么? 2、Mysql中InnoDB引擎的行锁是通过加载什么上完成的? 3、Mysql中控制内存分配的全局参数…

功能需求与程序的关系

确定程序的输入和输出:根据功能需求,确定程序的输入数据和输出结果。这有助于我们明确程序的功能和实现方式。设计程序的算法和逻辑:根据功能需求,设计程序的算法和逻辑。这包括确定程序的数据结构、流程控制和算法实现等方面。划…

使用GDBdeug调试QNX程序

使用GDBdeug调试QNX程序 远程调试 启动GDB,比如我的host是x86_64平台,因此: ./qnx/qos223/host/linux/x86_64/usr/bin/x86_64-pc-nto-qnx7.1.0-gdb 连接远程设备,比如雷达: target qnx 172.168.1.10:8000 设置远程工…

​ 华大基因发布《2023年全球地中海贫血认知现状报告》

在地中海沿岸地区、非洲、中东、东南亚和中国南部,一种名为地中海贫血(以下简称“地贫”)的遗传性血红蛋白疾病十分高发,已成为严重危害公共健康和社会稳定的重大问题。近日,华大基因发布《2023年全球地中海贫血认知现…

鸿蒙系统扫盲(四):鸿蒙使用的是微内核?

我们常说,看一个系统是不是自研,就看它的内核,常见的内核分为:宏内核和微内核,当然还有两者结合体,他们到底有什么区别? 1.白话宏内核和微内核 有一天,你结婚了,你和你…

微机原理9

一、单项选择题(本大题共15小题,每小题3分、共45分。在每小题给出的四个备选项中,选出一个正确的答案,请将选定的答案填涂在答题纸的相应位置上。) 8088 系统的内存最大容量为 16MB. 其地址总线为() A. 16 位 B. 20 位 C. 24 位 D. 32 位 2,以CPU为核心…

Java题4:关于java的选择题简答题及答案

题目1:Java中的基本数据类型不包括以下哪种类型? A. double B. string C. char D. boolean 答案:B. string 题目2:以下哪个关键字用于定义一个类? A. class B. interface C. extends D. implements 答案:A…

2023年12月4日:多继承

代码 #include <iostream>using namespace std;class Sofa { private:string sit;int *len; public:Sofa(){cout << "Sofa::无参构造函数" << endl;}Sofa(string sit,int len):sit(sit),len(new int(len)){cout << "Sofa::有参构造函数…

Flutter 开发入门文章汇总

官网文档很详细&#xff0c;搭建环境和学习组件基本可以参考 官网文档 上拉加载和下拉刷新 Flutter 上拉加载和下拉刷新 - 掘金 gradle flutter配置gradle&#xff08;个人笔记&#xff0c;非教程&#xff09;_flutter gradle_追寻着星星的方向的博客-CSDN博客 gradle下载…

【uni-app】赋予你的APP(Android原生)小程序开发能力

采用DCloud(数字天堂&#xff08;北京&#xff09;网络技术有限公司)的uniMPsdk(uni小程序SDK)&#xff0c;是为原生App打造的可运行基于 uni-app 开发的小程序前端项目的框架&#xff0c;从而帮助原生App快速获取小程序的能力。 uni-app文档地址(小程序开发人员开发用) uniMP…

全网最新最全的自动化测试教程:python+pytest接口自动化(9)-cookie绕过登录(保持登录状态

在编写接口自动化测试用例或其他脚本的过程中&#xff0c;经常会遇到需要绕过用户名/密码或验证码登录&#xff0c;去请求接口的情况&#xff0c;一是因为有时验证码会比较复杂&#xff0c;比如有些图形验证码&#xff0c;难以通过接口的方式去处理&#xff1b;再者&#xff0c…

Day39| Leetcode 62. 不同路径 Leetcode 63. 不同路径 II

补 Leetcode 62. 不同路径 题目链接 62 不同路径 dfs题不多说了&#xff0c;dp也可以做。 class Solution { public:int uniquePaths(int m, int n) {int dp[109][109];//vector<vector<int>> dp(m, vector<int>(n, 0));for(int i0;i<m;i){dp[i][0] …

java连接池 理解及解释(DBCP、druid、c3p0、HikariCP)

一、在Java开发中&#xff0c;有许多常见的数据库连接池可供选择。以下是一些常见的Java数据库连接池&#xff1a;不使用数据库连接池的特性&#xff1a; 优点&#xff1a;实现简单 缺点&#xff1a;网络 IO 较多数据库的负载较高响应时间较长及 QPS 较低应用频繁的创建连接和关…

学习pytorch17 pytorch模型保存及加载

pytorch模型保存及加载 代码 import torch import torchvisionvgg16 torchvision.models.vgg16(pretrainedFalse)# 1. save model 1 保存模型结构及模型参数 torch.save(vgg16, ./vgg16_save1.model)# 2. save model 2 只保存模型参数 比第一种保存方法保存的文件要小 t…

企业架构LB-服务器的负载均衡之LVS实现

企业架构LB-服务器的负载均衡之LVS实现 学习目标和内容 1、能够了解LVS的基本工作方式 2、能够安装配置LVS实现负载均衡 3、能够了解LVS-NAT的配置方式 4、能够了解LVS-DR的配置方式 #一、LVS介绍和安装 LVS&#xff08;Linux Virtual Server&#xff09;即Linux虚拟服务器&…

【bug排查解决】现象级延迟8-10s

业务背景 最近公司在做物联网相关的项目&#xff0c;调试过程中发现好玩的bug。 首先一个数据采集场景&#xff0c;plc采集数据全链路&#xff1a; kepServer&#xff08;kepserver IOT gateway&#xff09; -> emqx &#xff08;查看日志&#xff09;-> iot服务 -> 业…

Vue项目目录结构

项目结构 目录说明.vscodeVSCode工具的配置文件node_modulesVue项目的运行依赖文件public资源文件夹&#xff08;浏览器图标&#xff09;src源码文件夹.gitignore配置git忽略文件index.html入口HTML文件package-lock.json信息描述文件&#xff08;所有模块&#xff09;package…

分布式追踪

目录 文章目录 目录自定义指标1.删除标签2.添加指标3.禁用指标 分布式追踪上下文传递Jaeger 关于我最后最后 自定义指标 除了 Istio 自带的指标外&#xff0c;我们还可以自定义指标&#xff0c;要自定指标需要用到 Istio 提供的 Telemetry API&#xff0c;该 API 能够灵活地配…