32、在线对话状态跟踪的深度强化学习

在线对话状态跟踪的深度强化学习

1 引言

对话管理系统包括对话状态跟踪(DST)和对话策略,传统的对话管理系统是纯统计的。近年来,有研究提出了端到端的对话管理系统,它通过强化学习方法直接连接对话状态跟踪模块和对话决策策略模块。然而,这种端到端的方法在实际对话系统中存在诸多问题,其灵活性和可扩展性不如模块化对话系统。

2 在线DST的交互方法

判别式机器学习方法是目前DST的先进技术,但存在一些局限性:
1. 它们是监督学习(SL)方法,需要大量的离线数据标注,这不仅成本高,而且对于在线学习不可行。
2. 在有限的标注数据下,SL方法容易出现过调,导致泛化能力差。
3. 基于SL的DST方法独立于对话策略,DST模块无法动态适应用户习惯,限制了DST模块的在线更新。

为解决这些问题,提出了一种通过在线交互进行DST优化的深度强化学习(DRL)框架。强化学习长期以来用于更新任务导向对话系统中的对话策略模块,但除了少数DST和策略的联合学习模型外,很少专门用于DST模块。在此框架下,将DST视为一个代理(跟踪代理),对话系统的其他部分视为环境,这是首次专门将强化学习框架用于在线DST优化。

跟踪代理做出的决策(信念状态)是连续的,因此将DST视为一个连续控制问题,类似于机器人控制。虽然有一些先进算法可处理连续控制问题,如DDPG算法,但由于连续信念状态是连续且高维的,直接应用现有RL算法效果不佳。为此,借鉴同伴教学的思想构建了一种新的RL框架用于DST,使用一个训练良好的辅助跟踪器(如离线训练的传统跟踪器)作为教师,引导实际DST代理(学生)的优化过程,避免过调,实现稳健快速收敛。

同伴教学RL - DST框架中,辅助DST模型产生的辅助信念状态为$b_a$,跟踪代理产生的探索信念状态为$b_e$,$b_a$和$b_e$的差异将被输入到奖励信号中,显著减少跟踪代理的搜索空间。与也支持在线更新的端到端对话系统相比,RL - DST框架的模块化结构允许使用更灵活、可解释的对话管理模型,且由于使用了教师DST模型,跟踪代理的优化过程需要的对话数据少,训练更稳健。

3 输入和输出

为避免与策略代理的概念混淆,将跟踪代理的输入和输出分别替换为状态和动作。这里只考虑语义级对话管理器,输入是每个槽位的语义特征,从系统动作、口语理解(SLU)输出和上一轮对话的上下文提取;输出是当前轮对应槽位的信念状态。与策略代理的系统动作不同,跟踪代理的输出(信念状态)是连续的。用$s$表示跟踪代理的输入,$b_e$表示输出。

4 跟踪策略

跟踪策略是$s$和$b_e$之间的映射函数,旨在最大化预期累积奖励。由于跟踪代理的搜索空间是连续的,使用确定性强化学习算法(如DDPG算法)来优化跟踪策略,类似于机器人控制问题。

5 奖励信号

对话系统的奖励通常定义为轮次惩罚和成功奖励的组合,策略代理可以通过这两个奖励信号有效优化。但对于跟踪代理,由于连续输出导致搜索空间大,这两个信号不足以实现快速稳健收敛。因此,设计了另一个基本分数奖励信号来约束跟踪代理的搜索空间。跟踪代理的总体奖励由三种信号组成:
1. 轮次惩罚($r_{tp}$) :是一个负常数,用于惩罚长对话,假设短对话更好。
2. 成功奖励($r_{sr}$) :是整个对话在最后一轮的延迟奖励。当用户与机器的对话结束时,用户给出评估值来判断对话系统的性能。如果整个对话未达到用户目标,成功奖励为零;否则为正常数。
3. 基本分数($r_{bs}$) :用于减少跟踪代理的搜索空间。使用辅助DST,用辅助信念状态$b_a$引导跟踪代理的探索。如果探索信念状态$b_e$远离辅助信念状态,将给予惩罚,公式为$r_{bs} = -α||b_e - b_a||^2$,其中$|| · ||^2$是L2距离,$α ≥ 0$是信任因子,$α$越大,跟踪代理的性能越接近辅助DST模型。

在对话中间,探索信念状态的即时奖励是$r_{tp} + r_{bs}$,最后一轮的即时奖励是$r_{sr}$。

6 实现细节

6.1 对话任务

在餐厅/旅游领域的任务导向对话系统(DSTC2/3)中评估该框架,这些系统是基于槽位的对话系统,有三种槽位类型:目标约束、请求槽位和搜索方法。不同类型的槽位对对话性能有不同影响,因此使用多个跟踪代理(每种类型一个)来表示对话跟踪策略,最终的总体输出是所有代理输出的拼接。

6.2 辅助多项式跟踪器

使用多项式跟踪器作为辅助DST,即受限马尔可夫贝叶斯多项式(CMBP),它是一种结合数据驱动和基于规则模型的混合模型,参数少,泛化能力好。CMBP中,当前轮的信念状态依赖于当前轮的观察和上一轮的信念状态,一般形式为:
$b_{t + 1}(v) = P(P^+ {t + 1}(v), P^- {t + 1}(v), \tilde{P}^+ {t + 1}(v), \tilde{P}^- {t + 1}(v), b^r_t, b_t(v))$,满足一定约束条件。

其中,$P(·)$是多项式函数,$b_{t + 1}(v)$表示特定槽位在第$(t + 1)$轮取$v$值的概率,约束条件包括概率约束、直觉约束和正则化约束。每个$v$有六个概率特征:
- $P^+ {t + 1}(v)$:第$t + 1$轮中告知或肯定$v$值的SLU假设得分之和。
- $P^-
{t + 1}(v)$:第$t + 1$轮中否定或拒绝$v$值的SLU假设得分之和。
- $\tilde{P}^+ {t + 1}(v) = \sum {v’ \notin {v, None}} P^+ {t + 1}(v’)$
- $\tilde{P}^-
{t + 1}(v) = \sum_{v’ \notin {v, None}} P^-_{t + 1}(v’)$
- $b^r_t$:第$t$轮值为“None”(未提及的值)的概率。
- $b_t(v)$:第$t$轮值为$v$的信念。

多项式阶数为3,多项式$P(·)$的系数通过离线预收集的训练数据优化。DSTC2/3中的每种槽位类型(目标、请求、方法)都有自己的多项式模型,分别用$P_g(·)$、$P_r(·)$和$P_m(·)$表示,同一槽位类型内不同槽位 - 值对的信念状态由相同的多项式更新。

6.3 跟踪代理

DSTC2/3中的三种槽位类型(目标、请求、方法)相互不影响,因此将DST跟踪代理分解为三个独立的跟踪代理($TA_G$、$TA_R$和$TA_M$)。这些跟踪代理具有独立的RL组件,形式为深度神经网络。每个跟踪代理的输入($s_g$、$s_r$和$s_m$)与多项式跟踪器的输入一致,每个槽位由六个概率特征表示;输出($b_{eg}$、$b_{er}$和$b_{em}$)是下一轮对应槽位的信念状态。采用深度确定性策略梯度(DDPG)算法优化这三个跟踪代理,框架的灵活性在于可以优化DST模块的部分组件,其他部分的信念状态仍可由辅助多项式DST产生,还能找出DST模块中对对话性能影响较大的部分。

6.4 DDPG用于跟踪策略

为优化具有连续高维输出空间的三个跟踪代理,使用DDPG算法,它是一种基于确定性策略梯度的无模型演员 - 评论家算法,可在连续动作空间上操作。该算法结合了演员 - 评论家方法和DQN算法的思想,有经验回放缓冲区并采用软更新策略。

在三个代理的训练过程中,每个跟踪代理有一个经验记忆,数据格式为$(s_t, b_{e_t}, r_t, s_{t + 1})$,其中$s_t$是槽位特征向量,$b_{e_t}$是对应槽位的探索信念状态,即时奖励$r_t$由每一轮的奖励函数$R(s_t, b_{e_t}, b_{a_t})$产生。

DDPG算法使用确定性策略梯度(DPG)方法更新深度神经网络,有两个函数:
1. 演员策略函数$\pi(s_t|\theta)$将输入确定性地映射到输出。
2. 评论家函数$Q(s_t, b_{e_t}|\beta)$使用贝尔曼方程学习,旨在最小化损失函数:
$L(\beta) = E_{s_t, b_{e_t}, r_t}[(Q(s_t, b_{e_t}|\beta) - y_t)^2]$,其中$y_t = r_t + \lambda Q(s_{t + 1}, \pi(s_{t + 1}|\beta)), r_t)$,$r_t$是第$t$轮的即时奖励,$\lambda \in [0, 1]$是折扣因子。

演员策略的目标是最大化从起始状态开始的累积折扣奖励,性能目标为$J(\pi) = E[\sum_{t = 1}^{T} \gamma^{t - 1}r_t|\pi]$,演员策略梯度为:
$\nabla_{\theta}J \approx E_{s_t}[\nabla_{b_e}Q(s, b_e|\beta)| {s = s_t, b_e = \pi(s_t)}\nabla {\theta}\pi(s|\theta)|_{s = s_t}]$

7 联合训练过程

在跟踪代理的学习过程中,对话策略固定,跟踪器不断变化。由于DST是对话策略代理环境的一部分,当跟踪代理优化时,对话策略代理的环境也会改变,因此可以进一步优化对话策略以提高对话系统性能,即DST和策略的联合训练。联合训练过程包括四个阶段:
1. 对话策略代理的预训练 :将多项式方法作为系统的跟踪器,使用DQN算法更新对话策略$N_1$个回合。
2. 跟踪代理的预训练 :通过最小化与多项式跟踪器输出的均方误差,更新跟踪代理的演员$N_2$个回合。
3. 跟踪代理的训练 :将多跟踪代理作为系统的跟踪器,通过最小化方程(2)更新多跟踪代理的评论家,通过方程(3)更新演员$N_3$个回合。
4. 对话策略代理的训练 :使用DQN算法更新对话策略$N_4$个回合。

联合训练的具体步骤如下表所示:
| 阶段 | 操作 |
| ---- | ---- |
| 对话策略代理预训练 | 1. 初始化对话策略$Q(\varphi)$,跟踪代理$TA_G$的$Q(\beta_g)$、$\pi(\theta_g)$,$TA_R$的$Q(\beta_r)$、$\pi(\theta_r)$,$TA_M$的$Q(\beta_m)$、$\pi(\theta_m)$;2. 设置多项式方法为跟踪器;3. 循环$N_1$个回合,使用DQN算法更新对话策略 |
| 跟踪代理预训练 | 循环$N_2$个回合,通过最小化与多项式跟踪器输出的均方误差更新跟踪代理的演员 |
| 跟踪代理训练 | 1. 设置多跟踪代理为跟踪器;2. 循环$N_3$个回合,通过最小化方程(2)更新多跟踪代理的评论家,通过方程(3)更新演员 |
| 对话策略代理训练 | 循环$N_4$个回合,使用DQN算法更新对话策略 |

8 实验

8.1 实验目标

  1. 验证优化后的在线DST的口语对话系统(SDS)的性能。
  2. 验证联合训练DST和对话策略的对话系统的性能。

8.2 数据集

在DSTC2/3的领域评估该框架。DSTC2中有8个可请求槽位和4个可告知槽位,DSTC3中有12个可请求槽位和8个可告知槽位,DSTC3的任务更复杂,语义错误率也更高。基于DSTC2/3的数据集,实现了一个基于议程的用户模拟器和错误模型,以模拟人类用户的行为和输入模块的错误。

8.3 实验系统

比较了六个具有不同DST模型的口语对话系统:
1. Polynomial :基线系统,使用多项式DST,对应的策略代理是每层128个节点的两层DQN网络。
2. TA_G :只估计目标约束的信念状态,其他两部分信念状态由多项式跟踪器产生。
3. TA_R :只估计请求槽位的信念状态,其他两部分信念状态由多项式跟踪器产生。
4. TA_M :只估计搜索方法的信念状态,其他两部分信念状态由多项式跟踪器产生。
5. TA_ALL :整个信念状态直接由上述三个跟踪代理产生。
6. TA_noteaching :类似于$TA_ALL$,但不使用基本分数奖励信号,相当于直接在线训练一个神经网络DST跟踪器。

传统基于监督学习的DST方法使用准确率或L2范数等指标进行评估,但在线DST优化不需要语义标注,目标是提高对话性能。因此,使用对话性能指标(平均长度和成功率)评估在线DST性能。奖励方面,每轮轮次惩罚为 - 0.05,对话成功奖励为1,两者之和用于评估,奖励范围在0到1之间。$TA_G$、$TA_R$和$TA_M$跟踪代理的基本分数信任因子在DSTC2中分别为0.2、0.2、4,在DSTC3中分别为0.07、0.07、4。每个设置记录窗口大小为1000的移动奖励和对话成功率,最终结果是25次运行的平均值。

8.4 DRL - 基于DST的评估

评估了五个不同在线DST模型($TA_G$、$TA_R$、$TA_M$、$TA_ALL$和$TA_noteaching$)的系统性能。这五个系统的对话策略代理使用相同的多项式跟踪器,通过DQN算法优化$N_1$(DSTC2/3中分别为10000/20000)个回合。然后开始训练跟踪代理,在前$N_2$(DSTC2/3中均为1000)个回合,使用均方误差(MSE)对所有跟踪代理的DDPG演员部分进行预训练,预训练后,使用DDPG算法对跟踪代理优化$N_3$(DSTC2/3中分别为19000/29000)个回合。多项式SDS中的对话策略代理优化$N_1 + N_2 + N_3$个回合。

不同DST模型在DSTC2和DSTC3中的性能如下表所示:
| DSTC2 | 成功率 | 轮数 | 奖励 |
| ---- | ---- | ---- | ---- |
| Polynomial | 0.769 | 5.013 | 0.519 ± 0.016 |
| TA_ALL | 0.775 | 4.474 | 0.551 ± 0.018 |
| TA_G | 0.767 | 4.375 | 0.548 ± 0.020 |
| TA_R | 0.763 | 5.057 | 0.510 ± 0.022 |
| TA_M | 0.765 | 5.121 | 0.509 ± 0.018 |
| TA_noteaching | - | - | - |

DSTC3 成功率 轮数 奖励
Polynomial 0.744 6.566 0.415 ± 0.077
TA_ALL 0.713 4.117 0.507 ± 0.083
TA_G 0.719 4.290 0.505 ± 0.075
TA_R 0.701 6.438 0.379 ± 0.028
TA_M 0.731 6.540 0.404 ± 0.021
TA_noteaching - - -

从实验结果可以看出,不同的DST模型在成功率、轮数和奖励方面表现不同。例如,在DSTC2中,$TA_ALL$的成功率略高于$Polynomial$,轮数更少,奖励更高;而$TA_noteaching$系统崩溃。在DSTC3中也有类似的情况。这表明所提出的联合训练框架和不同的跟踪代理设置对对话系统的性能有不同的影响,进一步说明了该研究对于优化在线DST和提高对话系统性能的重要性。

综上所述,通过深度强化学习框架进行在线DST优化,结合联合训练的方法,能够在一定程度上提高对话系统的性能,为对话系统的发展提供了新的思路和方法。未来可以进一步研究如何更好地平衡不同跟踪代理的作用,以及如何在更复杂的对话场景中应用该框架。

9 实验结果分析

9.1 不同模型性能对比

从实验数据来看,不同的DST模型在DSTC2和DSTC3数据集上呈现出不同的性能表现。在DSTC2中,TA_ALL模型在成功率、轮数和奖励方面都有较好的表现,成功率达到0.775,轮数为4.474,奖励为0.551 ± 0.018,相比基线系统Polynomial有一定的提升。而TA_noteaching模型则崩溃,无法正常运行,这可能是由于缺少基本分数奖励信号,导致搜索空间过大,模型难以收敛。

在DSTC3中,虽然TA_ALL的成功率略低于Polynomial,但轮数大幅减少,奖励也有所提高,说明该模型在提高对话效率方面有一定的优势。TA_G、TA_R和TA_M模型在不同的指标上也有各自的表现,这表明不同类型的跟踪代理对对话性能的影响不同。

9.2 联合训练的效果

联合训练过程包括对话策略代理的预训练、跟踪代理的预训练、跟踪代理的训练和对话策略代理的训练四个阶段。通过这种联合训练的方式,可以充分利用不同模块之间的相互作用,提高对话系统的整体性能。从实验结果来看,经过联合训练的系统在对话成功率和奖励方面都有一定的提升,说明联合训练是一种有效的优化方法。

9.3 信任因子的影响

基本分数奖励信号中的信任因子α对跟踪代理的性能有重要影响。α越大,跟踪代理的性能越接近辅助DST模型。在实验中,不同的跟踪代理(TA_G、TA_R和TA_M)设置了不同的信任因子,这是为了根据不同槽位类型的特点进行调整。例如,在DSTC2中,TA_M的信任因子为4,可能是因为搜索方法槽位对对话性能的影响较大,需要更严格地约束跟踪代理的搜索空间。

10 总结与展望

10.1 研究成果总结

本文提出了一种基于深度强化学习的在线对话状态跟踪(DST)优化框架,通过同伴教学的思想构建了新的RL框架,解决了传统监督学习方法在在线DST中的局限性。具体成果如下:
1. 解决传统方法局限性 :传统的判别式机器学习方法在DST中存在数据标注成本高、过调、无法动态适应用户习惯等问题,本文的方法通过强化学习实现了DST模块的在线更新。
2. 构建新的RL框架 :借鉴同伴教学思想,使用辅助DST模型引导跟踪代理的优化过程,减少了搜索空间,提高了训练的稳健性和收敛速度。
3. 联合训练提高性能 :通过联合训练DST和对话策略,充分利用不同模块之间的相互作用,提高了对话系统的整体性能。

10.2 未来研究方向

虽然本文的研究取得了一定的成果,但仍有一些问题需要进一步研究:
1. 平衡不同跟踪代理的作用 :不同类型的跟踪代理对对话性能的影响不同,未来可以研究如何更好地平衡它们的作用,以达到最佳的对话效果。
2. 复杂对话场景应用 :目前的实验主要在餐厅/旅游领域的任务导向对话系统中进行,未来可以将该框架应用于更复杂的对话场景,如多领域对话、开放域对话等。
3. 模型可解释性 :深度强化学习模型通常具有较高的复杂性,缺乏可解释性。未来可以研究如何提高模型的可解释性,以便更好地理解模型的决策过程。

10.3 研究意义

本文的研究对于对话系统的发展具有重要意义:
1. 提高对话系统性能 :通过优化在线DST和对话策略,提高了对话系统的成功率、效率和用户体验。
2. 推动深度强化学习在对话系统中的应用 :为深度强化学习在对话系统中的应用提供了新的思路和方法,促进了该领域的发展。
3. 为实际应用提供参考 :研究成果可以为实际对话系统的开发和优化提供参考,具有一定的实用价值。

11 流程图总结

下面是整个在线DST优化过程的mermaid流程图:

graph LR
    classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
    classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px

    A([开始]):::startend --> B(初始化模型):::process
    B --> C{选择数据集}:::decision
    C -->|DSTC2| D(设置参数N1=10000,N2=1000,N3=19000):::process
    C -->|DSTC3| E(设置参数N1=20000,N2=1000,N3=29000):::process
    D --> F(对话策略代理预训练):::process
    E --> F
    F --> G(跟踪代理预训练):::process
    G --> H(跟踪代理训练):::process
    H --> I(对话策略代理训练):::process
    I --> J(评估模型性能):::process
    J --> K([结束]):::startend

这个流程图展示了从开始到结束的整个在线DST优化过程,包括模型初始化、数据集选择、参数设置、训练阶段和性能评估等步骤,清晰地呈现了整个研究的流程。

12 数据表格总结

为了更直观地对比不同DST模型在DSTC2和DSTC3中的性能,下面将实验数据整理成一个综合表格:
| 数据集 | DST模型 | 成功率 | 轮数 | 奖励 |
| ---- | ---- | ---- | ---- | ---- |
| DSTC2 | Polynomial | 0.769 | 5.013 | 0.519 ± 0.016 |
| DSTC2 | TA_ALL | 0.775 | 4.474 | 0.551 ± 0.018 |
| DSTC2 | TA_G | 0.767 | 4.375 | 0.548 ± 0.020 |
| DSTC2 | TA_R | 0.763 | 5.057 | 0.510 ± 0.022 |
| DSTC2 | TA_M | 0.765 | 5.121 | 0.509 ± 0.018 |
| DSTC2 | TA_noteaching | - | - | - |
| DSTC3 | Polynomial | 0.744 | 6.566 | 0.415 ± 0.077 |
| DSTC3 | TA_ALL | 0.713 | 4.117 | 0.507 ± 0.083 |
| DSTC3 | TA_G | 0.719 | 4.290 | 0.505 ± 0.075 |
| DSTC3 | TA_R | 0.701 | 6.438 | 0.379 ± 0.028 |
| DSTC3 | TA_M | 0.731 | 6.540 | 0.404 ± 0.021 |
| DSTC3 | TA_noteaching | - | - | - |

通过这个表格,可以更清晰地看到不同模型在不同数据集上的性能差异,为进一步的研究和优化提供了有力的依据。

综上所述,本文通过深度强化学习框架进行在线DST优化,并结合联合训练的方法,在一定程度上提高了对话系统的性能。未来的研究可以围绕平衡不同跟踪代理的作用、在更复杂场景中应用该框架以及提高模型可解释性等方面展开,为对话系统的发展做出更大的贡献。

基于径向基函数神经网络RBFNN的自适应滑模控制学习(Matlab代码实现)内容概要:本文介绍了基于径向基函数神经网络(RBFNN)的自适应滑模控制方法,并提供了相应的Matlab代码实现。该方法结合了RBF神经网络的非线性逼近能力和滑模控制的强鲁棒性,用于解决复杂系统的控制问题,尤其适用于存在不确定性和外部干扰的动态系统。文中详细阐述了控制算法的设计思路、RBFNN的结构与权重更新机制、滑模面的构建以及自适应律的推导过程,并通过Matlab仿真验证了所提方法的有效性和稳定性。此外,文档还列举了大量相关的科研方向和技术应用,涵盖智能优化算法、机器学习、电力系统、路径规划等多个领域,展示了该技术的广泛应用前景。; 适合人群:具备一定自动控制理论基础和Matlab编程能力的研究生、科研人员及工程技术人员,特别是从事智能控制、非线性系统控制及相关领域的研究人员; 使用场景及目标:①学习和掌握RBF神经网络与滑模控制相结合的自适应控制策略设计方法;②应用于电机控制、机器人轨迹跟踪、电力电子系统等存在模型不确定性或外界扰动的实际控制系统中,提升控制精度与鲁棒性; 阅读建议:建议读者结合提供的Matlab代码进行仿真实践,深入理解算法实现细节,同时可参考文中提及的相关技术方向拓展研究思路,注重理论分析与仿真验证相结合。
先展示下效果 https://pan.quark.cn/s/a4b39357ea24 本项目是本人参加BAT等其他公司电话、现场面试之后总结出来的针对Java面试的知识点或真题,每个点或题目都是在面试中被问过的。 除开知识点,一定要准备好以下套路: 个人介绍,需要准备一个1分钟的介绍,包括学习经历、工作经历、项目经历、个人优势、一句话总结。 一定要自己背得滚瓜烂熟,张口就来 抽象概念,当面试官问你是如何理解多线程的时候,你要知道从定义、来源、实现、问题、优化、应用方面系统性地回答 项目强化,至少与知识点的比例是五五开,所以必须针对简历中的两个以上的项目,形成包括【架构和实现细节】,【正常流程和异常流程的处理】,【难点+坑+复盘优化】三位一体的组合拳 压力练习,面试的时候难免紧张,可能会严重影响发挥,通过平时多找机会参与交流分享,或找人做压力面试来改善 表达练习,表达能力非常影响在面试中的表现,能否简练地将答案告诉面试官,可以通过给自己讲解的方式刻意练习 重点针对,面试官会针对简历提问,所以请针对简历上写的所有技术点进行重点准备 Java基础 JVM原理 集合 多线程 IO 问题排查 Web框架、数据库 Spring MySQL Redis 通用基础 操作系统 网络通信协议 排序算法 常用设计模式 从URL到看到网页的过程 分布式 CAP理论 锁 事务 消息队列 协调器 ID生成方式 一致性hash 限流 微服务 微服务介绍 服务发现 API网关 服务容错保护 服务配置中心 算法 数组-快速排序-第k大个数 数组-对撞指针-最大蓄水 数组-滑动窗口-最小连续子数组 数组-归并排序-合并有序数组 数组-顺时针打印矩形 数组-24点游戏 链表-链表反转-链表相加 链表-...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值