当前位置: 首页 > news >正文

ChatGPT研究分享:机器第一次开始理解人类世界

0、为什么会对ChatGPT感兴趣

一开始,我对ChatGPT是没什么关注的,无非就是有更大的数据集,完成了更大规模的计算,所以能够回答更多的问题。

但后来了解到几个案例,开始觉得这个事情并不简单。我先分别列举出来,具体解读在文末说明。

1)ChatGPT能够进行数学运算,但大数运算和复杂运算,基本都会出错。

2)ChatGPT能够解读出最新的网站内容。(已知训练集停留在了2021年)

  1. 认识算法原理

个人认为,“算法的研究,本质上是在还原人类的思维”。将算法原理和人类思维过程进行对比,能够更好的理解ChatGPT是什么,以及为什么能够做到现在的效果。

1.1 Encoder-Decoder:解决特征工程问题

受到造物者的馈赠,大脑能够完成复杂的思维运算。但不幸的是,这个思维过程仍然是黑盒的。

给出一张图片,如果问题是这张图片是什么色调,你能够通过统计像素点色度的分布,给出准确答案;如果问题是这张图片是谁,你同样能够给出答案,但无法描述过程。

你工作中处理的各类问题,属于那种类型?

Anyway,不论思维过程多么复杂,它的框架是通用的:

传统机器学习,是在学习人脑是如何进行“运算”的。比如:“1”,“3”,“5”是单数,“2”,“4”,“6”是双数;算法可以帮你得出 x/2=1 是单数,x/2=0是双数。

(个人认为)深度学习,则开始学习“从编码特征到运算”这一整个过程。

显然,解决的问题越复杂,需要的数据量越多。但人脑并不需要这么多数据,我认为核心差距是,算法目前并不善于“总结归纳”中间过程。

于是,Encoder-Decoder结构就诞生了:

传统机器学习的训练模式是,人工对输入数据进行清洗,转化为特征向量(中间编码),然后基于特征和标签,训练模型(Decoder)。

但在复杂问题中,特征工程也变成了一个“不可描述”的过程。于是开始弱化特征工程的作用,直接用最原始的数据去进行训练,企图让算法解决整个黑盒过程。也因此开始强调数据量的大小,因为过渡黑盒,需要足够多的数据训练,大力出奇迹。

而Encoder-Decoder则是做了一层提炼,同时训练两个模型,一个用于学习编码过程,一个用于学习运算过程。各司其职,大幅提升了整体的效率和可控性。

1.2 RNN和Attention:解决序列化的问题

和常见的分类、打标任务不同,语言是有序的。需要相应的上下文和描述语句,才能正确理解。比如,高考经典病句“三个学校的老师”,到底是来自三个不同学校的老师,还是同一个学校的三个老师,是会产生歧义的。

因此,基于Encoder-Decoder,设计了如下的RNN结构:

从信息流的层面理解,所有信息通过编码,逐单元向前传递。解码过程,也是逐单元进行信息提取,同时把已提取的信息也作为补充输入。

跟背课文的过程很像。先背第一段,再带着第一段的记忆,背第二段。全部背完后,先默写第一段,然后带着已默写的第一段,默写第二段。

RNN的设计模式,把语言的有序性很好的体现了出来。但同样存在一个问题,编码和解码的过程是单向的,信息会逐渐丢失,越靠前的信息丢失的越厉害。

同样以背课文为例。RNN就像是只允许你背一遍,背完第一段就不允许再看第一段。那么必然最后一段记忆清晰,第一段则记不住多少。

为了弥补这个问题,于是设计了Attention机制。相当于,尽管只允许你背一遍,但会在默写的时候,给你提示,帮助你正确的默写出来。

一种最简单的全局Attention机制如下(相当于提供了一个大纲):

而目前最流行的Attention机制是Self-Attention(相当于给划了重点):

上图中,之所以会将three给到school,正是因为在Attention中,明确指出了“三个”是用来修饰“学校”的。

1.3 Transformer:解决长序列的问题(并没有完全弄懂)

RNN的结构虽然非常精妙的表达出了语言的有序性,但和人脑的思维仍然存在差异:人会从全局视角去接收输入,而不是单向处理。

你在背课文的时候,显然不会局限自己只背一遍。而是通篇反复阅读,没有顺序,直到全部背下来。

因此,Transformer打破了RNN的单向传递机制,同时输入全部信息,并完全基于Attention去实现。其中涉及到了几个关键点:

  • Positional Encoding:虽然顺序输入不重要,但仍然需要知道每个字的位置是什么,因此设计了Positional Encoding。相当于你可以随意阅读,并且仍然知道第几段是第几段。

  • Multi-Head Attention:原理上仍然和Self Attention接近,但是增加了多个并行的维度。相当于用不同的角度去解读重点是什么,增加了信息传递的丰富性。相当于从多个角度去划重点。

  • encoder层数和decoder层数:出现神经网络中堆叠层数的效果。本质是通过全局传递的模式,增大了信息传递效率,堆层数有利于增强学习能力。(RNN中的encoder和decoder单元也存在层数的概念,但是不属于核心设计,因此通常不体现。)

个人理解的效果如下所示:

下面这个动图也比较形象

1.4 ChatGPT:解决训练效率的问题

上述的模型结构,不论怎么优化,本质过程都还是“使用大量数据进行训练,生成模型后进行预测”的过程。而问题的复杂度越高,需要的数据量越大,训练的计算成本也越高。不管结构如何精妙,仍然会存在一个效率带来的瓶颈。

而ChatGPT的核心优势,就是突破了效率瓶颈。其训练过程如下:

1)输入“问题”和“正确答案”,训练初始的NLP模型。

2)输入“问题”、“初始模型的答案”和“正确的分数”,训练奖励模型。(实际上提供的是“正确的排序”,这里用“分数”为了更好的理解。)

3)输入“问题”,不提供“正确答案”,用奖励模型去训练初始的NLP模型。

之所以能够提效,就是第三步已经剔除了“人工打标”这个成本最高的工作,两个模型自身就构成了训练体系。

传统的训练过程,相当于告诉你一堆问题和答案,你去寻找其中的规律;而ChatGPT的训练过程,相当于教你判断善恶,建立三观,你自己再基于三观,去寻找最正确的答案。

2、从结果推断具体实现

OpenAI没有完全公开其实现逻辑,但是通过一些有意思的问答表现,能够推断包含哪些细节因素。

2.1 同样的输入给予不同的结果:存在随机因素

不论算法多么复杂,它仍然是符合“因果论”的,不是“混沌”的。这就意味着,给特定输入就会返回特定的输出,具备一一对应的关系。

但在ChatGPT的问答过程中,并不符合这个效果。对于同一个问题,不论是整体内容,还是细节措辞,都会存在差异。

又基本可以断定,ChatGPT不是一个实时更新的模型,仍然依赖人工去进行周期性的迭代调优。因此,ChatGPT一定在某个环节中加入了“随机因素”,可能的位置在:

  • 输入:假设把时间、环境等因素一并加入到输入中去,那么输出结果会发生改变。ChatGPT是否有在考虑基于这些因素,产生个性化的对话风格?

  • 预测:在常规算法训练中,往往也会加入随机因素,以避免陷入“局部最优解”。ChatGPT目前应该是处于公测,收集训练集的阶段,是否特意加上随机因素,来扩大样本丰富性?

  • 排序:算法本质上是在输出概率最大的解,但也可能是在TOP中选一个。应该也能实现扩大样本丰富性的效果。

我更倾向于是为了收集样本。因为从AI的商业化应用角度来说,随机性并不是个有利因素,人们更需要可靠可信的对话机器人。

2.2 对于复杂问题的响应时间会更长:存在预处理逻辑,判断问题的复杂度

问题的复杂度,会影响训练的时间,因为算法需要更多的数据和计算来推导因果关系。但一旦训练完成,模型就固定了下来,运算的过程不会因为输入的改变而改变。

但实际体验过程中,ChatGPT对于复杂性的问题,明显表现出了更长的运算时间(不论是开始响应的时间,还是逐字吐出的速度。因为还包含网络因素,不确定这个现象是否客观)

如果这个命题成立的话,有两种实现可能:

  • 有多种模型实习:ChatGPT背后同时训练了多个不同复杂度的模型。在实际执行的时候,它会先判断问题的复杂度,再去选择用哪个模型来生成答案。

  • 具备运算优化能力:ChatGPT模型自带的编码能力,会对运算复杂度进行优化。比如对于简单的问题,引入更多的乘0操作,从而大幅提升运算速度。

直觉判断,后者的概率更高。这也意味着ChatGPT的表现力更贴近人类的思维了:同样一个人,对复杂问题会思考的时间更长。

2.3 并不能发起测试请求,但仍然能够得到答案:不存在准确匹配关键词的逻辑,更多依赖相似性

回到一开始的漏洞分析场景。

从原理上来说,ChatGPT是不支持发起请求的。但当输入url的时候,ChatGPT仍然能够作出回答。

经过一些测试,可以很明确的发现,ChatGPT是基于domain、url中的信息去做的内容匹配。一个典型表现是,当你输入相似但并不存在的url时,ChatGPT仍然能够作出回答。

这个过程依靠的就是路径相似性。ChatGPT并不认为url是个一一对应的关键词,而是认为url中包含一定的逻辑。因此它会通过domain、path等文字,去推断网页的真实内容,并进行回答。(通过"Apache HTTP"、"2.4.0"、"2.4.49"这几个关键词,也并没有找到完全匹配的漏洞,应当是进行了一定的杜撰。)

换一句话说,ChatGPT的模型结构会让它认为万事均由潜在逻辑关系。但也有很多场景是强加的匹配规则,并没有逻辑,而ChatGPT强行计算出了一种逻辑。

3、从原理推导应用场景

总结一下,ChatGPT擅长逻辑(尤其是语言逻辑),但缺乏专业知识的积累。

基于此,可以推导一下ChatGPT适用的场景:

3.1 常规NLP任务(翻译、分类、总结等)

本质工作,不多描述

3.2 AIGC(讲故事、生成话术、串联框架等)

可以将ChatGPT视为一个“语言艺术家”,擅长基于一些关键点,去做逻辑串联,生成完整的答案。

因此,大部分只需要逻辑,不需要事实的场景,ChatGPT都能应付的来。

3.3 代码

ChatGPT在代码领域表现相当优秀,但显然没有人告诉它各种编程语言的语法。个人推测,是因为代码本身是以语言为基础的,所以ChatGPT能够很顺利的掌握。

而编写代码的过程,其本质上是一种“翻译”流程:程序员将脑海中的逻辑,编写成特定的编程语言。

“语言”和“翻译”,本就是ChatGPT的老本行,表现优异自不在话下。

3.4 逆向

逆向本质上也是一种“翻译”:将加密、编码过的汇编代码,还原为可读的代码,甚至还原为清晰的逻辑。

目前ChatGPT的训练集主要来源于互联完上搜集的信息。如果能够喂给它大量的源码和汇编代码,以及相关的分析报告,应当能够在逆向领域表现出优异的成绩。

4、一些思考点

4.1 从ChatGPT的能力看待:“科技奇异点”

我对下一个“科技奇异点”的定义是:机器具备人类的思维,并可以替代人类完成推理和研究工作,从而大幅提升生产力。

而基于上述对ChatGPT的研究,我认为已经接近这个临界点,因为这是我认知内,机器第一次开始理解人类世界。

对“理解”这个词,我再展开说明一下。过往的机器学习,都是在特定领域下完成某一项特定的工作任务(包括去年爆火的AIGC)。这也就意味着机器并不理解问题,只是执行人们给它安排好的算式。

对话式机器人其实很早就有了(Siri、小爱同学、小度小度等),但其核心是“功能库”。这些机器人的工作模式是“接受对话->提取关键词->匹配功能库->执行特定功能”,而ChatGPT是在没有“功能库”的情况下,实现的各种问答。

换言之,传统机器学习是某种工具,而ChatGPT则是一个“被灌输了大量知识的婴幼儿”(国外有测试表明ChatGPT符合9岁小孩的“心智”)。

4.2 从ChatGPT的原理看待:语言的力量

我过去没有重视过NLP领域的算法发展,觉得和传统搜广推并没有本质区别。依靠海量训练集进行总结记忆,然后回答学习过的内容,不会进行推理和创造。但在ChatGPT表现出惊人的知识储备后(回答从没见过的问题,做从未见过的运算),确实引起了一些思考。

显然,ChatGPT在特定专业领域的能力并不强,甚至经常会杜撰一些内容,你也许会嘲笑ChatGPT在一本正经的胡说八道。但我看到的却是,ChatGPT仅依靠语言能力,就推理出了很多的专业能力。

换位思考一下,假设没有人告诉你99乘法表,也没人告诉你“乘号”的含义。只告诉你“1*1=1”,“2*2=4”,你要如何计算出“9*9=81”呢?

从这个现象,可以引申出一个哲学思考:语言和知识的关系。ChatGPT本质上还是一个NLP模型,它计算的是字与字之间的概率关系。而ChatGPT正是基于这种文字之间的概率空间,总结出了各种各样的公式定理。也许,我们高估了“知识的复杂度”。

4.3 从ChatGPT的现状看待:后续迭代方向

对比人类的思维,我认为ChatGPT目前缺少两个关键能力:1)没有记忆;2)无法直接学习知识;

1)没有记忆

回顾一下ChatGPT的训练过程:先训练一个初始模型,再训练一个奖励模型。类比下来,第一个过程获得的是原始信息的积累,即记忆,第二个过程获得的是知识的迭代。

而目前对于ChatGPT的各项优化工作,都集中在后面这个过程。换而言之,ChatGPT的知识在不断完善,但记忆并没有更新。而显然,对于人类思维来说,这两者都是不可或缺的。

尽管有一些对话会让ChatGPT看起来能够记忆内容,比如“先告诉ChatGPT你的名字,然后让ChatGPT复述一遍”。但这个效果本质上是因为ChatGPT可以基于整个对话去回答问题,因此能够把对话的历史信息包含进来,并没有“记住”这个信息。

2)无法直接学习知识

ChatGPT非常擅长讲故事,处理比较纯粹的语言类问题。但专业领域的明确任务,却处理不好。我认为ChatGPT目前差的是“已知经验的输入”。

在人类的教育过程中,是有老师在告诉你,乘法应该怎么计算的。因此你不用从头开始去推导和总结,直接应用即可。这个过程大幅度提高了学习的效率。而ChatGPT需要从0开始推导这个东西,那他要经历的,是人类从远古时期至今的迭代过程,显然存在巨大的挑战。如果ChatGPT能够接受到构造好的经验输入,那就可以省略掉很多的工作,让算法也“站在巨人的肩膀上”。

不幸的是,这两项能力目前都没有解,因为其算法性质仍然是黑盒的。上面我们提到了,现有的算法框架结构已经对人类的思维方式做了粗力度的抽象,因此取得了如今的成就。但更近一步的核心(比如,信息是如何被编码和计算的)目前仍然黑盒,也就限制了对其进行更深度的交互和优化。

但随着人们对思维模式和算法的研究深入,相信能够发明出更完善的架构来。到那个时候,算法高度还原人类思维,离“科技奇异点”应该就相当接近了。

4.4 从ChatGPT的问答过程看待:如何提问

随着对话式算法的诞生,Prompt Engineering这个概念也随之而来:人们发现,有时候之所以得不到理想的答案,与其去优化模型,不如去优化提问。

这个概念是最新才了解到,在此不作展开。

我更想借这个话题,再次提一个观点,“算法的研究,本质上是在还原人类的思维”。你如何设计合理的Prompt,来得到理想的答案,和你在现实中如何提问,是同样的场景。只不过,你目前面对的是一个“心智只有9岁小孩”的AI模型,所以提问时,需要更多的引导和提示。

因此,保持对AI技术的关注,实际上也能够帮助你解读自己是如何思考问题的。

4.5 从ChatGPT的训练过程看待:如何更高效的培养人才

继续回应上面的话题,“算法的研究,本质上是在还原人类的思维”。而ChatGPT,实际上把培养人才的过程,已经进行了抽象。

将算法的演变过程,转化成现实场景,其实是如下的效果:

1)在相对简单的场景下,会直接告诉你解决方案。把对应的模型确定好,按照这个逻辑跑就行,能够快速得到想要的结果。

2)随着场景逐渐复杂,解决方案本身变得“只可意会”了。这个时候,会尝试甩给你大量的case,让你自己琢磨出解决方案来。

3)但喂case积攒经验是个很耗精力的事情。所以,为了提高效率,在喂case的同时,会告诉你方法论。只要用这个方法论,配合一定的实战case,大概率能得出想要的解决方案和结果来。

5、结语

在AIGC年爆火之后,设计从业人员就开始担忧起自己的工作。同样,ChatGPT可预见的也会对很多行业带来冲击,比如教育。AI是否会最终取代人类的话题,似乎也从“遥不可及”,变得“忧心忡忡”。

我认为,AI一定会取代部分人,但不会取代所有人,也不会凌驾于人类之上。

正如工业时代的到来,取代了体力工作者;AI时代的到来,也会取代脑力工作者。而所谓的“专业”能力,往往会在这个浪潮下,被快速取代。(想想当年的“八级技工”,技术再厉害,也比不过新的机器。)

同样的,不论工业时代,还是AI时代,对于整个人类来说,都是一种进步。它意味着生产力大幅提升,意味着有更多的精力被释放出来,可以往更深的领域去探索。而这个世界足够复杂,远没有到被穷举干净的地步。

事实上,历史上每次有这种想法的时候,都会打开一片新的天地。比如19世纪末,物理学家说“物理学的大厦已经落成”,但随之而来就出现了“相对论”和“量子力学”。

身处这个时代,我们需要考虑的,不是如何阻止AI的到来。而是从自身出发,去考虑如何发挥人类的思维优势,利用好AI,从而去造福更多的人类。

相关文章:

ChatGPT研究分享:机器第一次开始理解人类世界

0、为什么会对ChatGPT感兴趣一开始,我对ChatGPT是没什么关注的,无非就是有更大的数据集,完成了更大规模的计算,所以能够回答更多的问题。但后来了解到几个案例,开始觉得这个事情并不简单。我先分别列举出来&#xff0c…...

可换皮肤的Qt登录界面

⭐️我叫忆_恒心,一名喜欢书写博客的在读研究生👨‍🎓。 如果觉得本文能帮到您,麻烦点个赞👍呗! 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧,喜欢的小伙伴给个三连支持一下呗。👍⭐️❤️ 可换皮肤的Qt登录界面 QSS的学习笔记 快…...

Spring的常见问题汇总

一、bean实例化1、构造方法底层是无参构造方法来new的对象。2、静态工厂实例化Bean实质上就是:创建一个静态工厂类,然后调用静态工厂类的静态方法,来创建对象。3、实例工厂与FactoryBean实质上就是:创建一个工厂类,工厂…...

yolov8训练筷子点数数据集

序言 yolov8发布这么久了,一直没有机会尝试一下,今天用之前自己制作的筷子点数数据集进行训练,并且记录一下使用过程以及一些常见的操作方式,供以后翻阅。 一、环境准备 yolov8的训练相对于之前的yolov5简单了很多,…...

使用 Python 从点云生成 3D 网格

从点云生成 3D 网格的最快方法 已经用 Python 编写了几个实现来从点云中获取网格。它们中的大多数的问题在于它们意味着设置许多难以调整的参数,尤其是在不是 3D 数据处理专家的情况下。在这个简短的指南中,我想展示从点云生成网格的最快和最简单的过程。…...

vue使用split()将字符串分割数组join()将数组转字符串reverse()将数组反转

1.split() 将字符串切割成数组 const str Hello Vue2 Vue3 console.log(str.split()) console.log(str.split()) console.log(str.split( )) console.log(str.split( , 2)) console.log(str.split( , 6))输出如下 1.split()不传参数默认整个字符串作为数组的一个元素&#xf…...

队列实现及leetcode相关OJ题

上一篇写的是栈这一篇分享队列实现及其与队列相关OJ题 文章目录一、队列概念及实现二、队列源码三、leetcode相关OJ一、队列概念及实现 1、队列概念 队列同栈一样也是一种特殊的数据结构,遵循先进先出的原则,例如:想象在独木桥上走着的人&am…...

【Log4j2远程命令执行复现CVE-2021-12-09】

目录 一、前言 二、漏洞环境构建 三、复现过程 一、前言 Log4j2是基于log4j这个java日志处理组件进行二次开发和改进而来的。也是目前最常用的日志框架之一,在之前的博客中(http://t.csdn.cn/z9um4)我们阐述了漏洞的原理和大致的利用方…...

Jenkins 平台搭建 | 为 Jenkins 配置 nginx 反向代理

以 Centos7 系统为例,详细记录一下 Jenkins 搭建流程。 参考官网:https://www.jenkins.io/doc/book/installing/linux/#red-hat-centos Install Jenkins 从 redhat-stable yum 存储库中安装 LTS(长期支持) 版本,该版…...

【云原生】Docker 架构及工作原理

一、Docker 概述二、Client 客户端三、Docker 引擎四、Image 镜像五、Container 容器六、镜像分层可写的容器层七、Volume 数据卷八、Registry 注册中心九、总结一、Docker 概述 Docker 是一个开发、发布和运行应用程序的开放平台。Docker使您能够将应用程序与基础架构分离&am…...

【Java 】Java NIO 底层原理

文章目录1、 Java IO读写原理1.1 内核缓冲与进程缓冲区1.2 java IO读写的底层流程2、 四种主要的IO模型3、 同步阻塞IO(Blocking IO)4、 同步非阻塞NIO(None Blocking IO)5、 IO多路复用模型(I/O multiplexing)6、 异步…...

Vue基础27之VueUI组件

Vue基础27Vue UI组件库移动端常用 UI 组件库PC 端常用 UI 组件库Element-ui插件基本使用安装引入并使用main.jsApp.vue按需引入安装 babel-plugin-componentbabel.config.jsmain.jsApp.vueVue UI组件库 移动端常用 UI 组件库 Vant https://youzan.github.io/vant Cube UI htt…...

第35篇:Java代码规范全面总结

编程规范目的是帮助我们编写出简洁、可维护、可靠、可测试、高效、可移植的代码,提高产品代码的质量。 适当的规范和标准绝不是消灭代码内容的创造性、优雅性,而是限制过度个性化, 以一种普遍认可的统一方式一起做事,提升协作效率,降低沟通成本。 代码的字里行间流淌的是软…...

Cookie和Session详解

目录 前言: Session详解 Cookie和Session区别和关联 服务器组织会话的方式 使用Tomcat实现登录成功跳转到欢迎页面 登录前端页面 登录成功后端服务器 重定向到欢迎页面 抓包分析交互过程 小结: 前言: Cookie之前博客有介绍过&#x…...

Linux之磁盘分区、挂载

文章目录一、Linux分区●原理介绍●硬盘说明查看所有设备挂载情况挂载的经典案例二、磁盘情况查询基本语法应用实例磁盘情况-工作实用指令一、Linux分区 ●原理介绍 Linux来说无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,…...

web渗透之jwt 安全问题

前言JWT 全称 JSON Web Token,是一种标准化格式,用于在系统之间发送加密签名的 JSON 数据。原始的 Token 只是一个 uuid,没有任何意义。JWT 包含了部分业务信息,减少了 Token 验证等交互操作,效率更高JWT组成JWT 由三部…...

好用的5款国产低代码平台介绍

一、云程低代码平台 云程低代码平台是一款基于springboot、vue.js技术的企业级低代码开发平台,平台采用模型驱动、高低码融合、开放扩展等设计理念,基于业务建模、流程建模、表单建模、报表建模、大屏建模等可视化建模工具,通过拖拉拽零代码方…...

【前端学习记录】webpack学习之mini-css-extract-plugin插件

前言 最近在学习尚硅谷的webpack5课程,看到mini-css-extract-plugin这个插件的时候,感觉很有帮助,之前都没有在css这方面深入思考过,课程中的一些记录写在下面 为什么需要优化CSS Css 文件目前被打包到 js 文件中,当…...

FPGA基于RIFFA实现PCIE采集HDMI传输,提供工程源码和QT上位机

目录1、前言2、RIFFA理论基础3、设计思路和架构4、vivado工程详解5、上板调试验证并演示6、福利:工程代码的获取1、前言 PCIE是目前速率很高的外部板卡与CPU通信的方案之一,广泛应用于电脑主板与外部板卡的通讯,PCIE协议极其复杂&#xff0c…...

SpringBoot解析指定Yaml配置文件

再来个文章目录 文章目录前言1、自定义配置文件2、配置对象类3、YamlPropertiesSourceFactory下面还有投票,帮忙投个票👍 前言 最近在看某个开源项目代码并准备参与其中,代码过了一遍后发现多个自定义的配置文件用来装载业务配置代替数据库…...

C++基础算法③——排序算法(选择、冒泡附完整代码)

排序算法 1、选择排序 2、冒泡排序 1、选择排序 基本思想:从头至尾扫描序列,每一趟从待排序元素中找出最小(最大)的一个元素值,然后与第一个元素交换值,接着从剩下的元素中继续这种选择和交换方式,最终得到一个有序…...

《高质量C/C++编程》读书笔记一

前言 这本书是林锐博士写的关于C/C编程规范的一本书,我打算写下一系列读书笔记,当然我并不打算全盘接收这本书中的内容。   良好的编程习惯,规范的编程风格可以提高代码的正确性、健壮性、可靠性、效率、易用性、可读性、可扩展性、可复用性…...

【完美解决】python flask如何直接加载html,css,js,image等下载的网页模板

python flask如何直接加载下载的网页模板问题解决办法问题 本人网页开发小白,刚学了用flask,下载了一套网页模板,启动一个网页的确很简单,但是发现无论怎么改这里的 static_folder值都无法找到CSS,JS,IMAGE,FONT等资源 app Flas…...

2023美赛C题【分析思路+代码】

以下内容为我个人的想法与实现,不代表任何其他人。 文章目录问题一数据预处理时间序列模型创建预测区间单词的任何属性是否影响报告的百分比?如果是,如何影响?如果不是,为什么不是?问题二问题三难度评估模型…...

考研复试6 编译原理

第一章 编译器简介 1. 编译器的核心功能 把源代码翻译成目标代码 2. 编译器设计两个原则: 语义相同;以某种可察觉的方式改进输入程序 3. 编译器内部结构 前端:依赖于源语言,与目标机器无关。将输入的代码映射到 IR。包括分析部…...

uni-app:登录与支付--用户信息

用户信息 实现用户头像昵称区域的基本布局 在 my-userinfo 组件中&#xff0c;定义如下的 UI 结构&#xff1a; <template><view class"my-userinfo-container"><!-- 头像昵称区域 --><view class"top-box"><image src"…...

Docker 部署 MySQL

1. 进入下面路径下 -v 使用相对路径的方式挂载的目录docker会自动创建&#xff0c;路径为&#xff1a;/var/lib/docker/volumes/ cd /var/lib/docker/volumes/ 2. 指定版本5.7启动容器mysql docker run -p 3316:3306 --name mysql-master \ -v mysql-master-log:/var/log/mys…...

警惕,3月20日WOS目录更新,50本SCI/SSCI被剔除,这个出版社多达18本

2023年3月SCI、SSCI期刊目录更新 2023年3月20日&#xff0c;Web of Science核心期刊目录再次更新&#xff01;此次2023年3月SCIE & SSCI期刊目录更新&#xff0c;与上次更新&#xff08;2023年2月&#xff09;相比&#xff0c;共有50本期刊被剔除出SCIE & SSCI期刊目录…...

【 Linux入门 】之 手搓 命令行解释器 bash(带源码)

目的基本结构提取输入命令fgets的使用命令初步处理命令的本质创建子进程重要知识补充进程替换命令处理简单 bash 完成及演示优化bashls颜色输出颜色实现cd命令ecport 命令envecho $echo $&#xff1f;目的 主要目的在于进一步了解 Linux 系统下使用进程相关的系统调用 及 shel…...

【运维】运维常用命令

shell大全读取文件每一行内容文件是否存在数组定义和循环取值变量循环流程控制语句&#xff1a;case判断数值相等/大于/小于判断字符串相等awk求和、平均、最大、最小sed用法exprbc计算器读取文件每一行内容 while read line doecho $line done < a.txt文件是否存在 if [ …...