union的0x3个妙用(II)

Union Find 和一道谷歌面试题 复习经历 继续按照主题刷题。最近一次的中心内容是 union-find 这种数据结构。选择它的原因是我在一次谷歌面试中被问到了这个题,而且当时没有回答出来,这就刺激了我一定要把 union-find 搞懂的愿望。我并不是完全不懂这个数据结构,在斯坦福在 Coursera 中的 Algorithm Specialization 里 Tim Roughgarden 教授讲过的,我也动手实现过。只是这段... 阅读详情
2.union巧妙地实现多字节数据类型之间的转化

在涉及音视频编解码算法中,经常会涉及一些数据压缩、声音解码、图象的缩放等问题。
这里通过一个例子来推荐一种union绝妙用法(这种方法由Equator公司提供,在我们公司的图象处理算法中用得很多)。在该例子中,利用union结构n64u实现占8个字节n64类型与单字节的c0~c7的相互转换,从而达到数据压缩和分解的目的。
 
#include <stdio.h>
#define IN
#define OUT
#define INOUT
typedef unsigned long long  n64;
typedef unsigned int   n32;
typedef unsigned short  n16;
typedef unsigned char  n8;
 
typedef struct _s8t{
        unsigned char c0, c1, c2, c3, c4, c5, c6, c7;
}s8t;
 
/*利用n64和c0~c7占用同一内存区,实现它们之间的相互转换*/
typedef union {
        n64     n64;
        struct {
                n32 l0, l1;
        } u32;
        struct {
                long l0, l1;
        } s32;
        struct {
                unsigned short s0, s1, s2, s3;
        } u16;
        struct {
                short s0, s1, s2, s3;
        } s16;
        struct {
                unsigned char c0, c1, c2, c3, c4, c5, c6, c7;
        } u8;
        struct {
             char c0, c1, c2, c3, c4, c5, c6, c7;
        } s8;
} n64u;
 
#define MAX_DATA_COMPRESSED_NUM 8
 
int compress64_8(IN const n64* src,IN n16 n,OUT n8* dst);
int uncompress8_64(IN const n8* src,IN n16 n,OUT n64* dst);
 
int compress64_8(IN const n64* src,IN n16 n,OUT n8* dst)
{
 n64u n64u_data;
 register n64* n64ptr=(n64*)src;
 register n8* n8ptr=dst;
 n16 i=0,num=n;
 
 if(NULL==n64ptr || NULL==n8ptr || n<1)
 {
  printf("invalid param,src 0x%x,dst 0x%x,n %d/n",n64ptr,n8ptr,n); 
  return 0;
 } 
 
 for(i=0;i<num;i++)
 {
   n64u_data.n64 = *n64ptr++;
  
   /*用简单的均值法将8个点压缩成1个点*/
   *n8ptr++ = (n64u_data.u8.c0+n64u_data.u8.c1+n64u_data.u8.c2+/
    n64u_data.u8.c3+n64u_data.u8.c4+n64u_data.u8.c5+/
    n64u_data.u8.c6+n64u_data.u8.c7)/(sizeof(n64)/sizeof(n8)); 
 }
 return 1;
}
 
int uncompress8_64(IN const n8* src,IN n16 n,OUT n64* dst)
{
 n64u n64u_data;
 register n64* n64ptr=dst;
 register n8* n8ptr=(n8*)src;
 register n8  n8data;
 n16 i=0,num=n;  
 
 if(NULL==n64ptr || NULL==n8ptr || n<1)
 {
  printf("invalid param,src 0x%x,dst 0x%x,n %d/n",n64ptr,n8ptr,n); 
  return 0;
 } 
 
 for(i=0;i<num;i++)
 {
    n8data=*n8ptr++;
     
   /*将1个点解压成8个点,采用简单的还原,所以有失真*/     
    n64u_data.u8.c0 = n8data;
    n64u_data.u8.c1 = n8data; 
    n64u_data.u8.c2 = n8data; 
    n64u_data.u8.c3 = n8data;
    n64u_data.u8.c4 = n8data; 
    n64u_data.u8.c5 = n8data;
    n64u_data.u8.c6 = n8data;
    n64u_data.u8.c7 = n8data;    
     
    *n64ptr++ = n64u_data.n64;   
 }   
}

int main(int argc, char *argv[])
{
 n64  n64data[MAX_DATA_COMPRESSED_NUM];
 n8   n8data[MAX_DATA_COMPRESSED_NUM];
 s8t  s8t_data[MAX_DATA_COMPRESSED_NUM]
 =
 {/*即将被压缩的数据,一个数据占一个字节*/
  {1,2,3,4,5,6,7,8},/*8个字节被压缩成单个字节*/
  {2,2,3,4,5,6,7,7},
  {3,2,3,4,5,6,7,6},  
  {4,2,3,4,5,6,7,5},
  {5,2,3,4,5,6,7,4},
  {6,2,3,4,5,6,7,3},
  {7,2,3,4,5,6,7,2},
  {8,7,6,5,4,3,2,1}             
 }; 
 
 n16 i,n=MAX_DATA_COMPRESSED_NUM;
 
 printf("data:/n");  
 for(i=0;i<n;i++)
 {
      n64data[i] = *(n64*)&s8t_data[i];  
       
      printf("%3u %3u %3u %3u %3u %3u %3u %3u/n",
     s8t_data[i].c0,s8t_data[i].c1,s8t_data[i].c2,
     s8t_data[i].c3,s8t_data[i].c4,s8t_data[i].c5,
        s8t_data[i].c6,s8t_data[i].c7);       
 }
 printf("/n"); 
  
 compress64_8(n64data,n,n8data);
 
 printf("compressed to:/n");
 for(i=0;i<n;i++)
 {
      printf("%3u ",n8data[i]);    
 } 
 printf("/n/n"); 
  
 uncompress8_64(n8data,n,n64data);
 
 printf("uncompressed to:/n");
 for(i=0;i<n;i++)
 {
      *(n64*)&s8t_data[i] = n64data[i];  
  
      printf("%3u %3u %3u %3u %3u %3u %3u %3u/n",
         s8t_data[i].c0,s8t_data[i].c1,s8t_data[i].c2,
         s8t_data[i].c3,s8t_data[i].c4,s8t_data[i].c5,
         s8t_data[i].c6,s8t_data[i].c7);       
 } 
 printf("/n");  
}
 
/*
运行结果:
data:
  1   2   3   4   5   6   7   8
  2   2   3   4   5   6   7   7
  3   2   3   4   5   6   7   6
  4   2   3   4   5   6   7   5
  5   2   3   4   5   6   7   4
  6   2   3   4   5   6   7   3
  7   2   3   4   5   6   7   2
  8   7   6   5   4   3   2   1
compressed to:
  4   4   4   4   4   4   4   4
uncompressed to:
  4   4   4   4   4   4   4   4
  4   4   4   4   4   4   4   4
  4   4   4   4   4   4   4   4
  4   4   4   4   4   4   4   4
  4   4   4   4   4   4   4   4
  4   4   4   4   4   4   4   4
  4   4   4   4   4   4   4   4
  4   4   4   4   4   4   4   4
*/
 
如果对Equator感兴趣可以访问 www.equator.com。
 
 
3.使不同数据包兼容
 
union的用法如下:
struct _my_struct
{
 unsigned int struct_id
 
 typedef union _my_union
 {
   struct my_struct_1;
   struct my_struct_2;
   struct my_struct_3;
 
 }my_union;
 
}my_struct;
 
我们公司在处理音频视频数据流方面,为了区分音频和视频数据以及来自网络和编解码的数据并减少内存占用使用了下面的数据结构。这种union使用方法在网络应用中特别常见。在数据结构TFrameBufferInfo中,用bufferType标识数据来源。
 
/** /struct TABufferInfoFromCodec
 * /brief  来自编码器的音频数据的缓冲区信息
 */
typedef struct
{
 int  codecId;          /**< codec ID */
 int  packetNum;        /**< 该帧数据一共有多少个包 */
 int  actualNum;        /**< 当前已存入的包数 */
 int  packetLen;        /**< 正常数据包最大长度,包括包头 */ 
 int  leftPacketLen;    /**< 最后一个数据包大小,包括包头 */
 int  frameSample;      /**< 0x00表示8kHz,0x01表示11kHz*/
 int  timeStamp;        /**< 表示该帧的编码时间 */
 int  dataLen;          /**< 数据长度,包括包头 */
 int  ready;            /**< 该帧数据的数据包是否都已经写入*/
 unsigned char* buffer; /**< 数据指针 */
 int  reserve1;         /**< 保留位,用0填充 */

} TABufferInfoFromCodec;
 
/** /struct TVBufferInfoFromCodec
 * /brief  来自编码器的视频数据的缓冲区信息
 */
typedef struct
{
 int  codecId;          /**< codec ID */
 int  bKeyFrame;        /**< TRUE:关键帧 */
 int  packetNum;        /**< 该帧数据一共有多少个包 */
 int  actualNum;        /**< 当前已存入的包数 */
 int  packetLen;        /**< 正常数据包最大长度,包括包头 */ 
 int  leftPacketLen;    /**< 最后一个数据包大小,包括包头 */
 int  timeStamp;        /**< 表示该帧的编码时间 */
 int  dataLen;          /**< 数据长度,包括包头 */
 int  ready;            /**< 该帧数据的数据包是否都已经写入*/
 unsigned char* buffer; /**< 数据指针 */
 int reserve1;          /**< 保留位,用0填充 */

} TVBufferInfoFromCodec;
 
 
/** /struct TVBufferInfoToCodec
 * /brief  来自网络的视频数据的缓冲区信息
 */
typedef struct
{
 int  codecId;          
 int  bKeyFrame;       
 int  packetNum;       
 int  actualNum;       
 int  packetLen;       
 int  leftPacketLen;    
 int  rtpLen;           
 int  timeStamp;        
 int  firstSquence;     
 int  dataLen;          
 int  ready;           
 unsigned char* buffer;

} TVBufferInfoToCodec;
 
/** /struct TABufferInfoToCodec
 * /brief  来自网络的音频数据的缓冲区信息
 */
typedef struct
{
 int  codecId;          
 int  packetNum;        
 int  actualNum;        
 int  packetLen;        
 int  leftPacketLen;    
 int  rtpLen;           
 int  timeStamp;        
 int  firstSquence;     
 int  dataLen;          
 int  ready;            
 unsigned char* buffer; 
 int reserve1;         

} TABufferInfoToCodec;
 
 
/** /struct TABufferInfoToCodec
 * /brief  数据缓冲区信息结构
 */
typedef struct
{
 int bufferType;
 
 union
 { 
  TVBufferInfoFromCodec bufferInfoFromVCoder; 
  TABufferInfoFromCodec bufferInfoFromACoder; 
  TVBufferInfoToCodec bufferInfoFromVNetWork;
  TABufferInfoToCodec bufferInfoFromANetWork; 

 } buffer_info;
 
} TFrameBufferInfo; 
 
int send_to(void* stream);

int send_to(void* stream)
{
 /*省略*/
}
 
int main(int argc, char *argv[])
{
  TFrameBufferInfo tFrameBufferInfo;
  TVBufferInfoFromCodec* pVBufferInfoFromCodec;
  unsigned char buffer[1200*5];/*最大存放5个数据包*/
    
  /*假设你要向网络发送一段视频数据,音频接收为1,
  视频接收为2,*音频发送为3,视频发送为4*/
  tFrameBufferInfo.bufferType=4;
  
  pVBufferInfoFromCodec
   =&tFrameBufferInfo.buffer_info.bufferInfoFromVCoder;
  
  pVBufferInfoFromCodec->bKeyFrame     = 1;
  pVBufferInfoFromCodec->packetNum     = 2;  
  pVBufferInfoFromCodec->actualNum     = 2;
  pVBufferInfoFromCodec->leftPacketLen = 123;
  pVBufferInfoFromCodec->dataLen       = 1323;  
  pVBufferInfoFromCodec->ready         = 1;  
  pVBufferInfoFromCodec->buffer        = buffer;
  
   send_to((void*)&tFrameBufferInfo);
} 
HFSS新手避坑指南:从零搭建T形波导功分器(含参数扫描与优化实战) 本文为HFSS新手提供T形波导功分器设计的详细指南,涵盖基础设置、建模技巧、参数扫描与优化实战。重点解析内场分析中的常见陷阱,如单位设置、波端口定义和布尔运算错误,并分享优化设计的关键步骤,帮助工程师快速掌握HFSS在微波器件设计中的应用。 阅读详情

相关推荐

Zephyr、FreeRTOS 和 RT-Thread

你是…更适合用嵌入式新手,刚接触 RTOSFreeRTOS(入门简单)IoT 项目开发,需要 BLE/WiFi/MQTTZephyr(协议全)想快速构建可部署的产品Zephyr(模块统一)只做单个任务或简单状态机控制FreeRTOS(轻量)做平台化、持续集成、自动测试Zephyr(CI 支持强)

is0815的博客 2240

SQL语句中union all和union的区别以及用法

起因 一次渗透过程中目标使用的SQL Server有联合注入,发现使用union all 不报错,union报错,同时还有一个就是字段的类型,发现类型不对也会报错,贴张图 union+all+select+123123,1,'2','3',null,null,null--+- 不报错 union+select+123123,1,'2','3',null,null,null--+- 报错 注意点: 1 union结果集种的列名总是等于第一个select语句中的类型。 2 union

demopy’s blog 3477

vue 插件vue-awesome-swiper实现 三张图片,左右两边显示一半的效果的示例

希望我的愚见能够帮助你哦~,若有不足之处,还望指出,你们有更好的解决方法,欢迎大家在评论区下方留言支持,大家一起相互学习参考呀~

weixin_50450473的博客 3244

MySql(5)—— union、limit

union 合并查询结果集 案例:查询工作岗位是MANAGER和SALESMAN的员工? select ename,job from emp where job = 'MANAGER' or job = 'SALESMAN'; select ename,job from emp where job in('MANAGER','SALESMAN'); +--------+----------+ | ename | job | +--------+----------+ | ALLEN | SAL

qq_44824574的博客 1209

Windows10系统添加虚拟网卡(Microsoft Loopback Adapter)的方法

1、按下win + R键,在其中输入:hdwwiz,然后 (enter) 2、点击下一步即可 3、其次选择【网络适配器】,然后点击【下一步】。 4、在厂商处选择Microsoft,网络适配器处选择【Microsoft Loopback Adapter】选项 ,点击【下一步】。 5、通过上面几个步骤的设置后,一块虚拟网卡的安装设置就算是完成了。 ...

一个懒鬼的博客 2万+

帆软FineBI考试题

Flint 补录表,有批次删除功能。在分析主题内添加数据时能够选择批量添加数据。插件安装过程中有报错提示需要下载 Fine I for Excel 运行环境进行修复,修复完毕后重新安装插件。图例显示支持自定义设置,且图例标题支持隐藏显示。finebi中的指标如果想进行维度区间/真的自定义分组,不能直接拖拽到组建区域中需要先转化为维度方可进行指标分组。excel报表不支持分页。

Davina_yu的博客 1601

联合(union)的最详细用法

联合(union)的声明和结构与结构体类似,但是本质不同。    联合的所有成员引用的是内存中的相同位置。当你想在不同时刻把不同的东西存储于同一位置时,就可以使用联合。   构体(struct)中所有变量是“共存”的——优点是“有容乃大”,全面;缺点是struct内存空间的分配是粗放的,不管用不用,全分配。   而联合体(union)中是各变量是“互斥”的——缺点就是不够“包容”;但优点是内

时光漫走 3万+

DeerFlow 系列教程 第三篇 | 核心技术深度剖析:Skills、Memory 与 Context Engineering

摘要化是 Context Engineering 中最关键的组件——它直接决定了长对话的可用性。Skills 技能系统通过渐进式加载的三层模型,在保持系统提示词轻量的同时,支持无限数量的技能扩展。从发现到执行的 10 个生命周期阶段,配合 AI 驱动的安全扫描和多层缓存,构成了一个生产级的技能管理框架。Memory 长期记忆系统通过文件系统持久化、LLM 驱动的信息提取和防抖动异步更新,实现了跨会话的认知持久化。六类事实分类体系和修正信号检测机制,让 Agent 能够从交互中持续学习和改进。

weixin_43674738的博客 280

关于union的用法整理

联合(union)在C/C++里面见得并不多,但是在一些对内存要求特别严格的地方,联合又是频繁出现,那么究竟什么是联合、怎么去用、有什么需要注意的地方呢?就这些问题,我试着做一些简单的回答,里面肯定还有不当的地方,欢迎指出!  1、什么是联合?    “联合”是一种特殊的类,也是一种构造类型的数据结构。在一个“联合”内可以定义多种不同的数据类型, 一个被说明为该“联合”类型的变量中,允许装入该

shanchangyi的博客 2754

Vue3 - Element Plus 表格组件 el-table “表格行数据中又嵌套了二维对象数组“,按平级循环渲染(嵌套数组视为同级行数据), 对嵌套的数组循环展示为表格,智能合并行或列详细教程

vue3,nuxt3,element-plus,table表格组件,el-table,vue3element表格组件,数据中有二维数组怎么遍历循环显示,表格数据带二级数组怎么循环渲染显示,表格数据中存在一个数组要怎么才能显示到表格,el-table表格合并详细教程示例,table表格如果对象里面还有对象数组那该怎么去渲染,平常都是数组中一个对象渲染成一行,每行中还有嵌套数组怎么办,每个行数据下还有一个数组怎么显示,怎么把表格相同的数据合并为一行,合并上下两行相同数据单元格,合并行或列如果遇到相同单元格就合

🏆 前端领域优质创作者 1万+

点云焊缝提取

本文介绍了一个基于PCL库的点云处理流程,包含三个核心模块:MLS平滑处理通过多项式拟合修正点云位置;差异提取通过双向匹配定位源/目标点云的非重叠区域;统计过滤剔除离群噪声点。该流程采用"平滑-筛选-净化"的通用思路,将复杂算法封装为可配置接口,实现了工业级点云预处理。文章重点分析了各模块的原理、PCL接口调用及参数设计逻辑,同时指出参数调优、算法扩展等深入探索方向,展现了PCL在点云处理中的模块化优势与实用价值。

weixin_45196569的博客 250

union的用法

什么是union union类似于结构体,但是又不完全一样。union也可以叫做共用体,声明方式是这样的: union{ 变量A 变量B }共用体名称; 之所以叫做共用体是因为union中的所有变量共用一段内存,储存在相同的内存地址中,因此其中的某个变量在被赋值之后,其他的变量也会共用这个值。比如: union{ float rgb_data; //float型数据共32位,4个字节 unsigned long color; //long型数据共32位,4个字节 unsigned c

weixin_45247630的博客 8711

【重识云原生】第四章云网络4.7.5节vDPA方案——virtio的半硬件虚拟化实现

vDPA(vhost Data Path Acceleration)即是让virtio数据平面不需主机干预的解决方案。该框架由Redhat提出,实现了virtio数据平面的硬件卸载。控制平面仍然采用原来的控制平面协议,当控制信息被传递到硬件中,硬件完成数据平面的配置之后,数据通信过程由硬件设备(智能网卡)完成,虚拟机与网卡之间直通。中断信息也由网卡直接发送至虚拟机不需要主机的干预。......

junbaozi的专栏 2188

联合体union在立体几何中的妙用

<!-- @page {margin:2cm} pre {font-family:"DejaVu Sans Mono",monospace} p.我的格式-western {font-family:"DejaVu Sans",sans-serif; font-size:10pt} p.我的格式-cjk {font-size:10pt} p.我的格式-ctl {fo

开发游戏,辉煌全中国 2187

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

3.weighted quick union

上一篇文章介绍的2.quick find and quick union是基础版的,但是它无法处理大型数据集的动态连接,所以我们还要对其进行改进。 weighted quick-union 1.1 基本思想 1.2 Java代码 1.3 python代码实现 1.4 复杂度分析 weighted quick-union-改进2-压缩路径(path compression) 2.1 基本原理

多元思考力 2807

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Quick-Union算法

前言 在上一节博客上已经介绍了Quick-Find算法,但是呢,Quick-Find算法太low了,运行慢,要是拿着它去找13亿人的关系链,那怕是电脑的风扇不太够用啊。所以我们这次学习它的升级版Quick-Union。 Quick-Union算法 回忆Quick-Find中union函数,就像是暴力强算,遍历所有数字的ID,然后把有着相同ID的数全部改掉,现在我们来引入“树”的概念来...

qq_39747794的博客 2598

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Union Find 题型总结

Connecting Graph 给一个图中的n个节点, 记为1到n. 在开始的时候图中没有边。 你需要完成下面两个方法: connect(a, b), 添加连接节点a,b的边. query(a, b), 检验两个节点是否联通 思路:Union Find模板要会背诵; public class ConnectingGraph { private class Unio...

leetcode 解题思路 1181

算法——union find的C++实现

问题描述:图的动态连通性问题,要求能够添加连接,判断一对对象是否相连等 quick find 解决思路:若给出的两个对象连通,则使两者的ID值置为相同,判断是否连通时也只用判断值是否相同即可。 代码实现: class quick_find { private: int count;//The count of connected component public: //p_ID is a pointer to ID_array //initiali

weixin_43718641的博客 1045

c# union结构体_C#联合Union的实现方式

一.基础篇C#不像C++,他本身是没有联合Union的,但是可以通过手动控制结构体每个元素的位置来实现,这需要结合使用StructLayoutAttribute、LayoutKind以及FieldOffsetAttribute。使用它们的时候必须引用System.Runtime.InteropServices下面是我写的模拟U的联合。[StructLayout(LayoutKind.Explici...

weixin_42498981的博客 1388

union的作用 c语言,C语言union的作用

1. 为了方便看懂代码。比如说想写一个3 * 3的矩阵,可以这样写:[注:下面用红色部分标记的地方是后来添加上去的,谢谢yrqing718的提醒!]structMatrix{union{struct{float_f11, _f12, _f13, _f21, _f22, _f23,_f31, _f32, _f33;};floatf[3][3];}_matrix;};structMatrix m;这两...

weixin_28811055的博客 413

从0到1深入理解并查集(Union-Find)

并查集(Union-Find)是一种树型的数据结构,用于处理一些不交集合(Disjoint Sets)的合并及查询问题。它在解决连通性问题、图论算法等方面有着广泛的应用。:查找元素所属的集合(通常返回集合的代表元素):合并两个元素所在的集合。

2302_80955585的博客 1105

Appium3.1.0和2.X的初始化比较

我是看到Pypi上appium-python-client的示例代码,才搞定的;desired_capabilities这个参数是可选的(其实必须要提供),类型是Dict。其他几个参数大概的意思你也能猜出来,而且类似的在selenium中也是有差不多的变化。但看到这里,怎么去写这个AppiumOptions呢?而到了Appium3.1.0开始,变化略大。参数,那怎么传递软件包这些呢?这个时候的Remote类的。

Mantou023的博客 726

Find-Union算法 并查集

前言 在前两次的博客中已经介绍了Quick-Find,Quick-Union算法,这两个算法或多或少都有不足,这一次我们学习最终豪华版的Union-Find算法。 Union-Find算法 在Quick-Union中我们已经采用了“树”的概念,但Quick-Find算法的union会出现极端情况,也就是产生一课光杆司令的树,这种树会极大的增加时间复杂度,不利于大的数据处理。所以我们在原有的基...

qq_39747794的博客 488

java c语言union转换_C语言联合体(union)的使用方法及其本质-union

转载自:https://blog.youkuaiyun.com/si_zhou_qun_84342712/article/details/531871061.联合体union的基本特性——和struct的同与不同union,中文名“联合体、共用体”,在某种程度上类似结构体struct的一种数据结构,共用体(union)和结构体(struct)同样可以包含很多种数据类型和变量。 不过区别也挺明显: 结构体(st...

weixin_35725559的博客 290

UNION 跨链 AI Agent 框架与插件开发实战

AI Agent 正在成为多链智能系统的创新引擎。UNION 提供了灵活的跨链 AI Agent 框架和插件机制,支持智能体自动化、跨链交互、任务编排和生态扩展。本文系统梳理 UNION 跨链 AI Agent 框架原理、插件开发流程与实战方法,结合 Python 代码、可视化图表和最佳实践,助力中国开发者高效构建智能化、可扩展的多链 AI Agent 系统。多链节点Agent 框架核心插件管理器自定义插件AI 能力引擎业务系统 图1:UNION 跨链 AI Agent 框架架构图需求分析插件设计开发实现集

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 1154

并查集Union-Find

坑越挖越大实在不厚道,开始填http://blog.youkuaiyun.com/dm_vincent/article/details/7655764 这个写得很易懂了,不打算摘转,请大家直接看原文 并参考了《Introduction to Algorithms》,这里用自己的方式归纳下1)互斥集(Disjoint Sets) 不相交集合们形成的整体 「建模」元素本身+集合编号(唯一代表,represe

musaxic的博客 605
上一篇: 宏的几个绝妙用法
下一篇: union的0x3个妙用(I)
embeddedsoft
博客等级 码龄20年 51粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值