自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 收藏
  • 关注

原创 KMP 算法中的 next 数组推导(图解 + 代码实现)

本文详细解析了KMP算法中Next数组的推导过程及意义,并通过图解和代码实现了Next数组的构建,帮助读者深入理解KMP算法的工作原理。

2022-06-05 17:39:04 7523 6

原创 C++ 中的 RVO 和 NRVO

RVO(Return Value Optimization,返回值优化)和 NRVO(Named Return Value Optimization,命名返回值优化)是C++编译器用于优化函数返回对象时可能产生的临时对象的一种技术。

2025-03-14 15:34:13 680

原创 为什么需要移动构造

移动构造的必要性

2025-03-07 15:38:21 270

原创 C++ 中的 char[] 和 char*

特性char*char[]类型指针数组内存区域可能为常量区或堆栈(局部变量)或全局区(全局变量)可重新赋值是(指向其他地址)否(数组名为常量指针)修改内容若指向常量区则不可修改可修改sizeof返回指针大小返回数组总大小内存管理需手动释放(若指向堆)自动管理。

2025-02-26 09:37:29 529

转载 交叉引用转为上标

交叉引用改为上标

2024-12-23 16:37:19 374

原创 C++ 封装 Socket 进行通信

基于 C++ 的封装文章目录基于 C++ 的封装通信 socket 的封装服务端的封装测试-客户端测试-服务端测试结果通信 socket 的封装此处封装 socket 的功能主要是用于通信,因此包括用于通信的文件套接字 m_fd,用于通信的函数 sendMsg 和 recvMsg;另外,在通信时,会出现 TCP 粘包问题,因此通过辅助函数 readn 和 writen 来解决该问题;对于客户端和服务器,其中服务器的套接字有两种,用于监听和用于通信;而客户端的套接字功能只有通信,因此客户端也使用当前

2024-09-14 11:36:03 883

原创 多线程服务端实现

要实现多线程功能,即服务器能和多个客户端进行通信,对服务端的代码进行修改即可。客户端的代码不动。

2024-09-09 11:30:17 587

原创 单线程 TCP/IP 服务器和客户端的实现

需要指定协议簇为 IPv4(AF_INET),端口为 9898,注意此处的 9898 在主机上的存储方式为小端,需要将其转化为网络中的存储方式即大端。定义缓冲区 buff 用于存放接收到的数据和放置需要发送的数据;指定服务器地址,并将字符串转换为网络中的字节序 ip;使用 fd 监听客户端请求,若收到请求,将客户端的 ip 和端口信息写入。使用套接字 cfd 进行通信,将接收到的数据放入 buff 中;是将监听的文件描述符 fd,和本机的 ip 和端口进行绑定;将主机上的端口转化为网络中的端口;

2024-09-08 18:20:18 1617

原创 C++ 实现线程池

线程池的基本概念是,在应用程序启动时创建一定数量的线程,并将它们保存在线程池中。当需要执行任务时,从线程池中获取一个空闲的线程,将任务分配给该线程执行。当任务执行完毕后,线程将返回到线程池,可以被其他任务复用。

2024-09-06 21:20:45 1093

原创 说话人识别 CAM 论文阅读:CAM: CONTEXT-AWARE MASKING FOR ROBUST SPEAKER VERIFICATION

提出了上下文感知隐蔽 CAM;使网络聚焦在感兴趣的语音而模糊不相关的噪声;

2024-07-26 16:05:35 1257 2

原创 D-TDNN 论文阅读:Densely Connected Time Delay Neural Network for Speaker Verification

论文提出了一种新的 D-TDNN,与现有的相比,参数量更少;还提出了 D-TDNN 的一种变体;D-TDNN-SS;

2024-07-26 15:59:59 1265

原创 LeetCode 454. 四数相加 II

种组合方式,我们的任务就算找出这些组合方式中有多少种组合的和为。原理:四个数组中的组合方式有固定的数字,即。将其分为两块时间复杂度最小,本文中,分成。

2024-07-17 11:02:45 663

原创 ASP 论文阅读:Attentive Statistics Pooling for Deep Speaker Embedding

在传统说话人识别中,是对整个帧进行平均;在本文中,为不同的帧赋予不同的权重;最终生成加权平均值和加权标准差;这样可以捕捉说话人特征的长期变化。

2024-07-12 15:56:37 1098 3

原创 侯捷C++面向对象笔记二:string 的实现

带指针的对象,必须要有和。

2024-07-11 13:57:30 330

原创 动态规划:钢条切割问题

如上图所示:切割长度为 4 的钢条会求 3 2 1 钢条的最优解,但是每个求最优解都是独立的,这样会导致大量的重复。动态规划就是为了解决这样的问题。通过以上步骤可以得知,动态规划的关键在于找到重复子问题,然后利用数组来存放重复子问题。以上为记住最大价格的方法,减少了很多次重复计算;可见,通过计时,快了 13 倍不止;即求具体的钢条切割方案。参考资料:《算法导论》

2024-07-11 10:50:02 899

原创 侯捷 C++面向对象笔记一:complex 的实现

侯捷老师的 C++ 课程笔记,Complex 实现

2024-07-10 15:06:32 810

原创 CN-Celeb 论文阅读:CN-Celeb: multi-genre speaker recognition

建立了一个更大的数据集;包含 11 种类型下的 3000 个说话人;本文收集了一个数据集 CN-Celeb2,结合之前的 CN-Celeb1 一起组成了 CN-Celeb 数据集;基于新的数据集,对 i-vector 和 x-vector 进行了评估;证明了多类型说话人识别的主要挑战在于类型的复杂性和类型不匹配;使用对类型进行训练可以带来一些改善,尤其在 PLDA 分数上;在说话人识别技术在实践践行中普遍适用之前,多类型说话人识别将是需要解决的主要障碍之一。

2024-07-10 14:51:07 1786 2

原创 图解一维卷积(Conv1d, TDNN)计算中维度变化

有如下输入:表示 298 个时间帧,每个时间帧有 80 个维度的输入;

2024-07-03 16:48:58 1897

原创 单链表中的头指针初始化问题

以初始化单链表头节点为例,我们的目的是通过函数使得头指针指向头节点;头指针即头节点的地址;在进入函数前创建一个头指针Node*head此时仅仅创建了一个指针变量,此时根据语法,这是一个未指明地址指向的野指针,需对其进行初始化;此处我们选取函数对其进行初始化;首先需要一块固定大小的内存,可通过malloc或new获取;此函数返回分配空间的首地址;我们的想法是让head指向这一块空间;像这样能否直接传递指针呢?}像这样的话就陷入了和在初始化基本类型时的问题,即传递的不是head而是一个副本;...

2022-07-30 21:42:12 1636

原创 循环队列 C++ 实现

因此可以得出结论,入队列时,在队列未满时,元素入队,队尾元素。为解决假溢出问题,采用循环队列,循环队列即一种逻辑上的环状结构,但在物理空间上仍然为顺序存储,即数组。测试方案依次入队列至如下情况,此时将不能入队列,rear=7,front=0;出队列四次,入队列五次,此时队列已满;入队列代码size=MAX时队列已满,不能入队列;出队列四次,入队列两次,此时队头为4,队尾指针为1;表示队列已满,若队列未满,则入队列,入队列后若。表示队列已空,若队列未满,则入队列,出队列后若。...

2022-07-25 17:34:47 3806

原创 数据结构 栈的顺序和链式结构 C++实现

顺序存储结构的栈栈的定义const int MAXSIZE = 50;typedef int Elemtype;typedef struct{ Elemtype data[MAXSIZE]; int top;} SqStack;栈的初始化令栈顶指针 top 为 -1 即可;void InitStack(SqStack &S) { S.top = -1;}判断栈空bool StackEmpty(SqStack S) { if(S.top

2022-03-30 22:29:59 1885

原创 数据结构 单链表 C++ 实现

单链表单链表的定义typedef int ElemType;typedef struct LNode { ElemType data; LNode *next;} LNode, *LinkList;此处 LNode 强调一个结点,*LinkList 强调一个单链表的头指针,本例中只有头指针使用 *LinkList ;单链表的头指针和头节点若单链表没有头节点,那么单链表的头指针则指向链表的第一个元素;若由头节点,头指针指向头节点;例如头指针为 L;如果链表为空,则有 L ==

2022-03-25 10:26:39 3622

原创 数据结构 顺序表 C++实现

顺序表此处实现的顺序表为**第一个位置为 data[0] **的顺序表顺序表的定义为const int MAX = 50;typedef int ElemType;typedef struct { ElemType data[MAX]; int length;} SeqList; //data[0] 为第一个元素顺序表元素的插入在顺序表 L 位置 i 处插入元素 e需要注意的几个点:插入元素,插入位置范围为 1 ~ length +

2022-03-21 18:20:57 1275

原创 按数组顺序创建一个完全二叉树

按照数组顺序插入到二叉树中参考文章数组与二叉树的对应关系:一个结点在数组中的序号为 i,则其左孩子结点序号为 2 * i,右孩子结点序号为 2 * i + 1;根据这条关系,我们可以建立个按照数组顺序的二叉树;/*将数组 arr 按照顺序建立二叉树,i 为当前插入元素在数组中的位置,n 为数组元素个数,root 为本次插入的结点地址;这个函数的左右是将数组中 arr[i] 元素插入到地址为 root 的位置上,那么结点 root 的左孩子结点插入元素为 arr[2 * i],右孩子结点插入元素为

2022-02-14 21:39:56 2653

原创 后缀表达式 实现整数的四则运算(带括号和多位数处理) C++ 实现

中缀表达式转化为后缀表达式,并通过后缀表达式计算值中缀表达式转化为后缀表达式转化规则:设立一个操作符栈,用来存储操作符;设置一个数组或者队列用来存储后缀表达式(此处使用队列);从左到右扫描中缀表达式遇操作数直接加入到后缀表达式(此处即加入到队列末或数组末尾)注意一个操作数可能是多位,需要作为一个整体读入,例如 50 需要作为一个整体读入遇操作符 op入栈op 优先级高于栈顶优先级op 为 ( 直接入栈;出栈(出栈后元素添加到后缀表达式的末尾).

2022-02-11 20:40:17 1921

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除