NLP中 大语言模型LLM中的思维链 Chain-of-Thought(CoT) GoT

文章目录

    • 介绍
    • 思路
    • CoT方法
    • Few-shot CoT
    • CoT Prompt设计
      • CoT
      • 投票式CoT-自洽性(Self-consistency)
      • 使用复杂的CoT
      • 自动构建CoT
      • CoT中示例顺序的影响
      • Zero-shot CoT 零样本思维链
    • GoT,Graph of Thoughts
    • 总结

介绍

在过去几年的探索中,业界发现了一个现象,在增大模型参数量和训练数据的同时,在多数任务上,模型的表现会越来越好。因而,现有的大模型LLM,最大参数量已经超过了千亿。

然而,增大模型参数规模,对于一些具有挑战的任务(例如算术、常识推理和符号推理)的效果,并没有太大提升。对于算术类推理任务,我们期望模型生成自然语言逻辑依据来指导并生成最终答案,但是获得逻辑依据是比较复杂昂贵的(标注成本层面)。

自从发现了大模型ICL(In-Context Learning)的能力后,这个问题有个新的解决思路:对某个任务Task,能否为大模型提供一些上下文in-context example作为Prompt,以此来提升模型的推理能力?实验表明,在复杂推理任务上加入ICL带来的增益不明显。因此,便衍生出了CoT的技术。
Chain-of-Thought(CoT)是一种改进的Prompt技术,目的在于提升大模型LLM在复杂推理任务上的表现,如算术推理(arithmetic reasoning)、常识推理(commonsense reasoning)、符号推理(symbolic reasoning)。思维链(CoT)便是一种用于设计 prompt 的方法,即 prompt 中除了有任务的输入和输出外,还包含推理的中间步骤(中间思维)。研究表明,CoT 能极大地提升 LLM 的能力,使之无需任何模型更新便能解决一些难题。

思路

ICL的思路是在新测试样本中加入示例(demonstration)来重构prompt。
与ICL(In-Context Learning)有所不同,CoT对每个demonstration,会使用中间推理过程(intermediate reasoning steps)来重新构造demonstration,使模型在对新样本预测时,先生成中间推理的思维链,再生成结果,目的是提升LLM在新样本中的表现。
在这里插入图片描述

CoT方法

一般来说CoT会分为两种:基于人工示例标注的Few-shot CoT和无人工示例标注的Zero-shot CoT。下面将逐一介绍。

Few-shot CoT

假设基于ICL的测试样本输入表示为 < i n p u t , d e m o n s t r a t i o n s > <input, demonstrations> <input,demonstrations>,那么加入Few-shot CoT的测试样本输入,可表示为 < i n p u t , C o T > <input, CoT> <input,CoT>

CoT Prompt设计

我们知道了加入CoT的示例后,能提升LLM的表现。那么我们应该如何构造或使用CoT?

CoT

Chain-of-Thought Prompting Elicits Reasoning in Large Language Models
这是思维链的开山之作。GPT 生成式预训练模型中的“T”,也就是 Transformer,就是谷歌大脑搞出来的。但是,预训练 + 精调的大模型搞了几年,仍然没办法很好地完成多步骤推理任务,比如数学问题和常识推理。
所以 Jason Wei 等人提出了思维链提示的方法,真的一下子就让大模型的逻辑推理能力不一样了。
具体来说,有三个不一样:

  • 常识推理能力赶超人类。以前的语言模型,在很多挑战性任务上都达不到人类水平,而采用思维链提示的大语言模型,在 Bench Hard(BBH) 评测基准的 23 个任务中,有 17 个任务的表现都优于人类基线。比如常识推理中会包括对身体和互动的理解,而在运动理解 sports understanding 方面,思维链的表现就超过了运动爱好者(95% vs 84%)。
  • 数学逻辑推理大幅提升。一般来说,语言模型在算术推理任务上的表现不太好,而应用了思维链之后,大语言模型的逻辑推理能力突飞猛进。MultiArith 和 GSM8K 这两个数据集,测试的是语言模型解决数学问题的能力,而通过思维链提示,PaLM 这个大语言模型比传统提示学习的性能提高了 300%!在 MultiArith 和 GSM8K 上的表现提升巨大,甚至超过了有监督学习的最优表现。这意味着,大语言模型也可以解决那些需要精确的、分步骤计算的复杂数学问题了。

CoT 提示过程是一种最近开发的提示方法,它鼓励大语言模型解释其推理过程。思维链的主要思想是通过向大语言模型展示一些少量的 exapmles,在样例中解释推理过程,大语言模型在回答提示时也会显示推理过程。这种推理的解释往往会引导出更准确的结果。

以一个数学题为例:

标准prompting,模型输入:

问:罗杰有5个网球,他又买了两盒网球,每盒有3个网球。他现在有多少网球?
答:答案是11
问:食堂有23个苹果,如果他们用掉20个后又买了6个。他们现在有多少个苹果?

模型输出:

答:答案是27 × \times ×

可以看到模型无法做出正确的回答。但如果说,我们给模型一些关于解题的思路,就像我们数学考试,都会把解题过程写出来再最终得出答案,不然无法得分。CoT 做的就是这件事,示例如下:

CoT prompting,模型输入:

问:罗杰有5个网球,他又买了两盒网球,每盒有3个网球。他现在有多少网球?
答:罗杰一开始有5个网球,2盒3个网球,一共就是2*3=6个网球,5+6=11。答案是11.
问:食堂有23个苹果,如果他们用掉20个后又买了6个。他们现在有多少个苹果?

模型输出:

答:食堂原来有23个苹果,他们用掉20个,所以还有23-20=3个。他们又买了6个,所以现在有6+3=9。答案是9 ✓ \checkmark

可以看到,类似的算术题,思维链提示会在给出答案之前,还会自动给出推理步骤。
CoT 在实现上修改了 demonstration(示例) 每个 example 的 target,source 保留原样,但 target 从原先的 answer(a) 换成了 rationale® + a。因此可以看到右侧,所有内容均由模型生成,模型不是生成 a,而是生成r+a。
思维链提示,就是把一个多步骤推理问题,分解成很多个中间步骤,分配给更多的计算量,生成更多的 token,再把这些答案拼接在一起进行求解。

投票式CoT-自洽性(Self-consistency)

《Self-Consistency Improves Chain of Thought Reasoning in Language Models》
这篇文章是 CoT 后很快的一个跟进工作,是 CoT 系列改进的重要一步,在 2022 年 3 月在arxiv上被放出来。这篇文章几乎用的和 CoT 完全一样的数据集和设置,主要改进是对答案进行了多数投票(majority vote),并且发现其可以显著地提高思维链方法的性能。
论文基于一个思想:一个复杂的推理任务,其可以有多种推理路径(即解题思路),最终都能够得到正确的答案。故Self-Consistency在解码过程中,抛弃了greedy decoding的策略,而是使用采样的方式,选择生成不同的推理路径,每个路径对应一个最终答案。

具体做法为:

  1. 对于单一的测试数据,通过多次的解码采样,会生成多条推理路径和答案。
  2. 基于投票的策略,选择最一致的答案。

在下面的图中,左侧的提示是使用少样本思维链范例编写的。使用这个提示,独立生成多个思维链,从每个思维链中提取答案,通过“边缘化推理路径”来计算最终答案。实际上,这意味着取多数答案。
在这里插入图片描述
实验表明,对于同一问题生成更多的推理链以供投票往往能取得更好的效果。当推理链数量足够多时,这种方法效果能够胜过使用greedy decoding的CoT方法。

《On the advance of making language models better reasoners》
论文在Self-Consistency的基础上,进一步做了优化。

  1. Diverse Prompts
  • 对于每个测试问题,构造了 M 1 M_1 M1种不同的prompt(即由不同demonstration构造的prompt)
  • 对于每种不同的prompt,让LLM生成 M 2 M_2 M2条推理路径。
  • 则对于同一个测试问题,共生成了 M 1 ∗ M 2 M_1*M_2 M1M2条结果
  1. Verifier
  • 训练了一个Verifier,用于判断当前推理路径得出的答案正确与否。
  • 关于样本构建,使用LLM生成的推理路径和答案,与grandtruth进行对比,一致的即视为正样本,否则负样本。
  1. Vote
  • 训练好Verifier后,对与一个测试问题与LLM生成的多条推理路径,Verifier进行二元判别
  • 结合判别结果和投票结果,得出模型的最终预测。

在这里插入图片描述
实验结果显示,本论文的方法相对基于Greedy Decode和Self-Consistency能得到更优的效果。

使用复杂的CoT

《Complexity-based prompting for multi-step reasoning》
面对这么多可选的CoT,简单的CoT示例和复杂的CoT示例,对新的样本推理结果会不会产生影响?答案是Yes。
论文探讨了一个问题,在包含简单推理路径的demonstrations和复杂推理路径的demonstrations下,哪个效果会表现较好?(这里的简单和复杂是指 推理链/推理步骤的长度)

本论文继承了Self-Consistency的思想,具体方法:

  1. 对于同一个测试问题,使用功能LLM(GPT-3)生成 N N N条不同的推理链+答案;
  2. 对于生成的推理链+答案,按照推理链的长度进行倒序排序;
  3. 保留TopK条推理链+答案,并使用投票的方式,选取最终预测。

实验结果表明,本论文的方法效果优于以下方法: (1)人工构建Cot、(2)random Cot、(2)Complex CoT(数据集中最长的多个思维链作为demonstrations)。

在这里插入图片描述

自动构建CoT

《Automatic chain of thought prompting in large language models》
上面提到的方法是基于人工构造CoT,那我们能否让模型自己来生成CoT?本论文就提供了这样一种自动生成CoT的思路。
本论文提到的Manual-CoT,可以等同于Few-shot CoT来理解。
在这里插入图片描述
由于Zero-Shot-CoT方法存在不稳定性,而Manual-CoT方法需要大量人工成本投入。作者提出了一种基于Auto-CoT的方法,自动构建包含问题和推理链的说明样例(demonstrations)。
整个过程分了两个阶段:

  1. question cluster: 目的是将数据集中的question划分到不同簇中。
  • 使用Sentence-Bert计算每个question的向量表示;
  • 使用k-means方法将question记性簇划分;
  • 最后对每个簇中的question,根据距离中心点距离,升序排序。
  1. demostration sampling: 目的是从每个簇中选取一个代表性的question,基于LLMs,使用Zero-Shot-CoT生成推理链。
  • 对于每一个簇 i i i里的每一个问题 q j ( i ) q^{(i)}_j qj(i),使用Zero-Shot-CoT的方法,将 [ Q : q j ( i ) , A : [ P ] ] [Q:q^{(i)}_j,A:[P]] [Q:qj(i),A:[P]](其中 [ P ] [P] [P]表示"Let’s think step by step")输入到LLMs,LLMs生成该问题的推理链 r j ( i ) r^{(i)}_j rj(i)和答案 a j ( i ) a^{(i)}_j aj(i)

  • 若问题 q j ( i ) q^{(i)}_j qj(i)不超过60个tokens,且推理链 r j ( i ) r^{(i)}_j rj(i)不超过5个推理步骤,则将问题+推理链+答案,加入到demostrations列表中: [ Q : q j ( i ) , A : r j ( i ) 。 a j ( i ) ] [Q:q^{(i)}_j,A:r^{(i)}_j。a^{(i)}_j] [Q:qj(i),A:rj(i)aj(i)]

  • 遍历完所有簇,将得到k个demostrations,将其拼接上测试question,构造成新的Prompt,输入LLMs便可得到生成结果。

值得一提的是,Auto-CoT在多个开源推理任务的数据集上,效果与Manual-CoT相当,甚至某些任务表现得更好。
在这里插入图片描述

CoT中示例顺序的影响

《Chain of thought prompting elicits reasoning in large language models》

尽管CoT是ICL的一种特殊形式,但是与ICL有所不同的是,CoT中demonstrations的排序对其在新测试样本中的生成结果影响较小,论文对demonstrations进行重排序,在多数推理任务上仅导致小于2%的性能变化。(demonstrations顺序对ICL影响较大)

Zero-shot CoT 零样本思维链

与Few-shot CoT不同,Zero-shot CoT并不需要人为构造demonstrations,只需要在prompt中加入一个特定的指令,即可驱动LLMs以思维链的方式生成结果。

当然这种不需要人工构造demonstrations的方式,效果相对Few-shot CoT会表现稍微差一点点。但是相对Zero-shot和Few-shot的方法而言,Zero-shot CoT在复杂任务推理上却能带来巨大的效果提升。
在这里插入图片描述
《Large language models are zero-shot reasoners》

论文首先提出了Zero-shot CoT的方法,整个流程包含两部分:

1.Reasoning Extraction

  • 使用一个特定的"reasoning" prompt,是语言模型LLM生成原始问题的思维链,如"Let’s think step by step."(让我们一步步来思考)

2.Answer Extraction

  • 基于第一步的结果,添加一个"answer" prompt,要求LLM生成正确的结果。
  • 这一个步骤中,LLM的输入格式为:quesiton + “reasoning” prompt + result(CoT) + “answer” prompt,输出为:result(answer)

值得一提的是,论文同时发现了,当模型LLM变得越来越大,对于使用Zero-shot的结果带来的增益不大,但是对使用Zero-shot CoT的结果带来的增益较大。
在这里插入图片描述
《Scaling Instruction-Finetuned Language Models》

既然在上一篇论文中,已经发现了LLM存在Zero-shot CoT的能力,那如果事先对LLM进行基于CoT的instruction tuning,那模型使用Zero-shot CoT方式在对unseen样本进行预测时,效果会不会更好?本论文给出了肯定的答案。

论文探索了以下可能影响LLM在unseen task上表现的因素:

  1. 任务数量
  2. 模型大小
  3. 指令微调(instruction tuning)

论文微调数据集包含了1836种指令任务,473个数据集和146种任务类型构成,数据集中包含了9个人工标注的CoT数据集。同时保留一个没出现过的held-out数据集作为模型评估数据集。
在这里插入图片描述
使用的模型是PaLM,而经过instruction tuning的模型,称为FlanPaLM(Finetuned Language PaLM)。

  1. 增加微调任务数量,可以提高LLM表现。但任务数量超过一定值后,不管模型尺寸是否增大,受益都不大。推测原因有:
    (1)额外的任务多样化不足,没有为LLM提供新的知识;
    (2) 多任务指令微调只是更好地激发了模型从预训练任务中学习到知识的表达能力,而微调任务超过一定值后,对表达能力没有太大帮助。
  2. 微调和未微调的PaLM,从8B增大到540B,在unseen任务上效果越来越好;
  3. 微调数据与CoT数据的关系
    (1) 微调数据中删除CoT数据,会降低PaLM的推理能力
    (2) 微调数据包含CoT数据,会全面提高所有评测任务的表现

GoT,Graph of Thoughts

研究论文:https://arxiv.org/pdf/2308.09687v2.pdf
官方实现:https://github.com/spcl/graph-of-thoughts
有研究者改进了 CoT,提出了使用 CoT 实现自我一致的方法(CoT-SC);这个方案是生成多个 CoT,再选出其中最佳的结果。还有研究者更进一步提出了思维树(ToT),其做法是通过树(tree)来建模 LLM 推理过程。这能让模型使用不同的思维路径,并能提供全新的功能,比如基于不好的结果反向回溯推理过程。不幸的是,由于 ToT 方法为思维过程强加了严格的树结构,所以会极大限制 prompt 的推理能力。
苏黎世联邦理工学院、Cledar 和华沙理工大学的一个研究团队提出了更进一步的想法:思维图(GoT)。让思维从链到树到图,为 LLM 构建推理过程的能力不断得到提升,研究者也通过实验证明了这一点。他们也发布了自己实现的 GoT 框架。
在进行思考时,人类不会像 CoT 那样仅遵循一条思维链,也不是像 ToT 那样尝试多种不同途径,而是会形成一个更加复杂的思维网。举个例子,一个人可能会先探索一条思维链,然后回溯再探索另一条,然后可能会意识到之前那条链的某个想法可以和当前链结合起来,取长补短,得到一个新的解决方案。类似地,大脑会形成复杂的网络,呈现出类似图的模式,比如循环模式。算法执行时也会揭示出网络的模式,这往往可以表示成有向无环图。
为了解答这些问题以及更多其它问题,这些研究者设计了一种实现 GoT 的模块化架构。该设计有两大亮点。

一是可实现对各个思维的细粒度控制。这让用户可以完全控制与 LLM 进行的对话并使用先进的思维变换,比如将正在进行的推理中两个最有希望的思维组合起来得到一个新的。
二是这种架构设计考虑了可扩展性 —— 可无缝地扩展用于新的思维变换、推理模式(即思维图)和 LLM 模型。这让用户可使用 GoT 快速为 prompt 的新设计思路构建原型,同时实验 GPT-3.5、GPT-4 或 Llama-2 等不同模型。

在这里插入图片描述

总结

对于大模型LLM涌现的CoT能力,业界目前的共识是:当模型参数超过100B后,在复杂推理任务中使用CoT是能带来增益的;而当模型小于这个尺寸,CoT并不会带来效果增益。要让大型语言模型(LLM)充分发挥其能力,有效的 prompt 设计方案是必不可少的,为此甚至出现了 prompt engineering 这一新兴领域。
目前,思维链只是在一些有限的领域,比如数学问题,五个常识推理基准(CommonsenseQA,StrategyQA,Date Understanding 和 Sports Understanding 以及 SayCan)上显现出作用,其他类型的任务,像是机器翻译,性能提升效果还有待评估。
还记得在Pretrain+Fine-tuning时代下,对于复杂数学推理任务,如MultiArith、GSM8K下,效果还是不太理想,而短短几年时间,LLM+CoT的模式已经大大提升了该领域的解决能力。随着LLM的继续发展,未来必定会发现更多LLM隐藏的能力和使用方法,让我们拭目以待。

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

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

相关文章

C语言之strstr函数的使用和模拟实现

C语言之strstr函数的模拟实现 文章目录 C语言之strstr函数的模拟实现1. strstr函数的介绍2. strstr函数的使用3. strstr的模拟实现3.1 实现思路3.2 实现代码 1. strstr函数的介绍 函数声明如下&#xff1a; char * strstr ( const char * str1, const char * str2 ); strs…

怎样自动把网页截图发到微信群里

现在很多公司都在使用企业微信了&#xff0c;不但方便公司内部交流和客户交流&#xff0c;还能组建各种小组群&#xff0c;业务群。企业微信群提供一个机器人的功能&#xff0c;方便我们把公司业务信息&#xff0c;或来自外部的信息自动发布到群里。 这里研究一下如何向微信群…

Maxwell安装部署消费到kafka集群

1.上传安装包到linux系统上面 2.解压安装包到安装目录下&#xff0c;并且重命名 [rootVM-4-10-centos package]# tar -zxvf maxwell-1.29.2.tar.gz -C /opt/software/3.配置mysql 增加以下配置 #数据库id server-id 1 #启动binlog&#xff0c;该参数的值会作为binlog的文件…

分布式锁详解

文章目录 分布式锁1. [传统锁回顾](https://blog.csdn.net/qq_45525848/article/details/134608044?csdn_share_tail%7B%22type%22:%22blog%22,%22rType%22:%22article%22,%22rId%22:%22134608044%22,%22source%22:%22qq_45525848%22%7D)1.1. 从减库存聊起1.2. 环境准备1.3. 简…

98、Text2Room: Extracting Textured 3D Meshes from 2D Text-to-Image Models

简介 github 利用预训练的2D文本到图像模型来合成来自不同姿势的一系列图像。为了将这些输出提升为一致的3D场景表示&#xff0c;将单目深度估计与文本条件下的绘画模型结合起来&#xff0c;提出了一个连续的对齐策略&#xff0c;迭代地融合场景帧与现有的几何形状&#xff0…

nginx国密ssl测试

文章目录 文件准备编译部署nginx申请国密数字证书配置证书并测试 文件准备 下载文件并上传到服务器&#xff0c;这里使用centos 7.8 本文涉及的程序文件已打包可以直接下载。 点击下载 下载国密版openssl https://www.gmssl.cn/gmssl/index.jsp 下载稳定版nginx http://n…

9.9 Windows驱动开发:内核远程线程实现DLL注入

在笔者上一篇文章《内核RIP劫持实现DLL注入》介绍了通过劫持RIP指针控制程序执行流实现插入DLL的目的&#xff0c;本章将继续探索全新的注入方式&#xff0c;通过NtCreateThreadEx这个内核函数实现注入DLL的目的&#xff0c;需要注意的是该函数在微软系统中未被导出使用时需要首…

用XMind2TestCase,测试更轻松

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

数据库-MySQL之数据库必知必会10-13章

第10章 创建计算字段 拼接字段 使用Concat()函数 执行算术计算 示例&#xff1a;从 Products 表中返回 prod_id、prod_price 和 sale_price。sale_price 是一个包含促销价格的计算字段。提示&#xff1a;可以乘以 0.9&#xff0c;得到原价的 90%&#xff08;即 10%的折扣&…

2023.11.24 海豚调度,postgres库使用

目录 海豚调度架构dolphinscheduler DAG(Directed Acyclic Graph)&#xff0c; 个人自用启动服务 DS的架构(海豚调度) 海豚调度架构dolphinscheduler 注:需要先开启zookeeper服务,才能进行以下操作 通过UI进行工作流的配置操作, 配置完成后, 将其提交执行, 此时执行请求会被…

数组基础知识

数组基础&#xff08;不定时更新&#xff09; 数组基础 数组基础 &#xff08;1&#xff09;数组是存放在连续内存空间上的相同类型数据的集合。数组可以方便的通过下标索引的方式获取到下标下对应的数据。数组下标都是从0开始的。数组内存空间的地址是连续的。 &#xff08;…

【科普知识】什么是步进电机?

德国百格拉公司于1973年发明了五相混合式步进电机及其驱动器&#xff0c;1993年又推出了性能更加优越的三相混合式步进电机。我国在80年代以前&#xff0c;一直是反应式步进电机占统治地位&#xff0c;混合式步进电机是80年代后期才开始发展。 步进电机是一种用电脉冲信号进行…

Verilog基础:时序调度中的竞争(一)

相关阅读 Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482 作为一个硬件描述语言&#xff0c;Verilog HDL常常需要使用语句描述并行执行的电路&#xff0c;但其实在仿真器的底层&#xff0c;这些并行执行的语句是有先后顺序…

【TypeScript】常见数据结构与算法(二):链表

文章目录 链表结构&#xff08;LinkedList&#xff09;链表以及数组的缺点数组链表的优势 什么是链表?封装链表相关方法源码链表常见面试题237-删除链表中的节点206 - 反转链表 数组和链表的复杂度对比 链表结构&#xff08;LinkedList&#xff09; 链表以及数组的缺点 链表…

Interactive Visual Data Analysis

Words&Contents Home | Interactive Visual Data Analysis Book Outline 这本书对视觉、互动和分析方法进行了系统而全面的概述&#xff0c;作为数据可视化方面比较好的读物&#xff1b; 目录 Words&Contents Book Outline &#xff08;一&#xff09;Introduct…

AIGC 3D即将爆发,混合显示成为产业数字化的生产力平台

2023年&#xff0c;大语言模型与生成式AI浪潮席卷全球&#xff0c;以文字和2D图像生成为代表的AIGC正在全面刷新产业数字化。而容易为市场所忽略的是&#xff0c;3D图像生成正在成为下一个AIGC风口&#xff0c;AIGC 3D宇宙即将爆发。所谓AIGC 3D宇宙&#xff0c;即由文本生成3D…

VBA_MF系列技术资料1-227

MF系列VBA技术资料 为了让广大学员在VBA编程中有切实可行的思路及有效的提高自己的编程技巧&#xff0c;我参考大量的资料&#xff0c;并结合自己的经验总结了这份MF系列VBA技术综合资料&#xff0c;而且开放源码&#xff08;MF04除外&#xff09;&#xff0c;其中MF01-04属于定…

安装compiler version 5

这个compiler version5 在我的资源里面可以免费下载&#xff1b; 另外这个东西还需要安装&#xff0c;安装教程在这里&#xff1a;Keil最新版保姆教程&#xff08;解决缺少V5编译器问题&#xff09; - 哔哩哔哩 (bilibili.com) 看吧安装好了year

【C语言】qsort的秘密

一&#xff0c;本文目标 qsort函数可以对任意类型数据甚至是结构体内部的数据按照你想要的规则排序&#xff0c;它的功能很强大&#xff0c;可是为什么呢&#xff1f; 我将通过模拟实现qsort函数来让你对这整个过程有一个清晰的深刻的理解。 二&#xff0c;qsort函数原型 v…

leetcode刷题详解一

算法题常用API std::accumulate 函数原型&#xff1a; template< class InputIt, class T > T accumulate( InputIt first, InputIt last, T init );一般求和的&#xff0c;代码如下&#xff1a; int sum accumulate(vec.begin() , vec.end() , 0);详细用法参考 lo…