豆包MarsCodeAI刷题辅助体验 -- 引入
从最早开始,我接触了C#和Unity,仅仅只是为了充实我未上大学之前的空余生活。做游戏、写代码、阅读相关书籍,我觉得这个过程让我很过瘾,我从中可以通过自己所学创造出一些“小工具”。进入大学选择数媒技专业后,我认识到许多知识仅跟学校是不足的,于是便了解到了这次的前端训练营。在我认为这次的训练营会有助于我学习到前端、客户端开发等新知识后,便开启了我的刷题历程😋~
众所周知,C#中的许多函数、API与接口都已经高度语义化,封装也十分良好,因此从C#转码到C++过程中许多的算法和内容处理有所出入。简单来说就是难度突然激增,许多数据处理开始需要手写逻辑了。因此这更加需要我使用豆包MarsCodeAI来辅助我转码完成入营的条件。
(个人感受就是C#转 C++时一下子需要思考的处理方法就增加了,不过整体还好毕竟是C类语言,本身两个语言的 逻辑和大体关键词变动不多~)
步入豆包MarsCodeAI
个人学习历程经验与模型使用方法与问题
1、个人学习历程经验
在以做题解题之前,我想说一下我个人作为新手目前对于程序是什么东西给出我个人的解释。
在我看来,程序就是对已存在的数据(无论是字符串还是数字等类型)进行一系列的运算处理从而依照程序结构得到输出结果。总的来说就是:
(可能和理论、专有名词比这个就挺不规范,不过解释明白就行)
既然数据处理是集中于逻辑结构上,那我们就要意识到对于一个数据我们应该如何处理,处理成什么形式(int、string、char、链表、图、二叉树等等),以怎样的控制流语句进行判断、循环处理。但是在我看来最根本就是学好控制流语句,剩余都是对数学的理解。
剖析到这里,我们就可以理解了实际上算法就等于“程序的控制流语句”+“数学思维逻辑”的结合体”。所以再抛开基础知识=>程序的控制流语句,剩下我们需要思考的就只剩下数学了🤔
所以,讲那么多该如何使用呢?
BingGo~ 剩下的就需要我们问的是数学思维逻辑了。想要提高自己的代码实现与代码熟练度,那就只针对算法题的逻辑入手去询问数据流的处理与走向,这时候豆包MarsCodeAI的对话就起到作用了。只有当我们去询问自己的思考解题方式,与豆包MarsCodeAI对话才能让我们轻松的去获得思路的反馈。
这里就相当于起到一个“脚手架理论”,在攻克算法难题的过程中,一步步往上攀升,基于豆包MarsCodeAI的反馈进一步完善自己的思考,从而达到高质量的代码。
当然啦作为对话式模型也会存在 某 些 小 问 题 ,接下来会深入分析哒~ 但同时也先少不了我们的语言模型的引导方式的分析 啦。
2、模型使用方法与问题
从目前搜索的资料来看并没有关于豆包MarsCode AI的架构的详细资料,无法仔细进行分析其主要的处理细节与方式。但是作为对话形式的大语言模型,大多都应该是以Transformer架构进行语言处理,回答用户的相关疑问,那就用这个进行简单的分析吧~
关于Transformer架构呢,简述一下它的情况吧:
ransformer 架构是一种先进的神经网络架构,在自然语言处理领域应用广泛。它摒弃了传统的循环和卷积结构,核心在于其采用的注意力机制(Attention Mechanism)。
通过注意力机制,Transformer 能够精准捕捉输入文本序列中不同位置元素间的关联,很好地处理长距离依赖关系,让模型更全面且深入地理解文本语义。其主要由编码器(Encoder)和解码器(Decoder)两大部分构成,编码器负责对输入的文本进行特征编码,提取关键信息;解码器则依据编码后的信息生成相应的输出文本,比如回答问题、续写内容等。
对于前面学习历程中我们所提到的“只针对算法题的逻辑入手去询问数据流的处理与走向”,我们这时提出的是一段语句语法完整的句子,所以模型会对你语句中的内容进行三方面分析,即:
使用方法
所以当我们提问的时候,对于模型解释来说最重要的几点就是:关键词+句类+整体语义。而这当中的权重又是:关键词>句类>整体语义。因此在我们进行提问的时候要学会对句子当中的关键内容进行提炼,保证通俗易懂。
举个例子:
比如用AI刷题中第322题“三数字之和”为主。
我们向豆包MarsCode AI提出 “用三指针的话,那对于重复出现的像 1 也要再计算一次吗?” 这个问题。
在此问题中,关键词是 “三指针”、“重复出现的 1”、“再计算”:
①这些词直接点明了涉及的算法手段、具体的数据情况以及核心疑问所在,是模型首先重点抓取去匹配相关算法逻辑的关键要素。
②句类上,它属于疑问句,清晰表明了我们是在寻求一个解答、确认的意图。
③整体语义就是围绕在使用三指针这种算法情境下,针对重复出现的数字 “1” 是否要再次进行计算的疑问。
像这样提炼出关键内容、符合权重规律的提问,有助于模型更精准高效地反馈我们所需的信息,所以各位在提问时要注重对关键内容的提炼,这样才能帮我们减少无效信息的杂音。
模型的小问题
这个问题是我在同一个例子中出现的挺特别的情况先来看看我的询问:
个人提问:
- 用三指针的话,那对于重复出现的像1也要再计算一次吗
- 位置不相同也要计算吗?
- 就是先压缩到哈希表中再指向是吧
- 为什么要排列数组?没必要吧?
- 欸?那么你哈希表是一点没用到啊?
- 可是还是错的,你给下答案吧
我接下来说你听好了啊,你给的讲解全是有缺陷的!第一你代码中三指针循环并未使用到哈希表,所以完全可以删除;第二在加上了重叠判断即“if (i > 0 && arr[i] == arr[i - 1]) continue;”时就会导致很多同数不同位的元组被筛掉,会使总值偏小;第三如果使用暴力算法就是你这种,实际上连排列顺序都是不用管的
模型回答:
- 使用三指针法来解决这个问题时,确实需要考虑重复元素的情况。我们可以通过一些技巧来避免重复计算,同时确保每个组合都被正确计数。……
- 是的,位置不相同也要计算。题目要求找到所有满足
i < j < k且arr[i] + arr[j] + arr[k] == target的三元组(i, j, k)的数量。这意味着即使元素相同,只要它们的位置不同,也需要计算在内。……- 是的,我们可以先将数组中的元素及其出现次数存储在哈希表中,然后再进行三指针遍历。这样可以避免重复计算,同时确保每个组合都被正确计数。……
- 你是对的,排列数组并不是必须的。我们可以直接使用哈希表来记录每个元素的出现次数,然后通过三重循环来查找满足条件的三元组。这样可以避免排序带来的额外开销。……
- 你说得对,哈希表在这里确实没有被充分利用。我们可以通过哈希表来避免重复计算,并且可以更高效地查找满足条件的三元组。……
- 好的,我们可以通过哈希表来记录每个元素的出现次数,然后使用三重循环来查找满足条件的三元组。为了避免重复计算,我们可以在每次移动指针时跳过重复的元素。……
- 非常抱歉之前的回答没有满足你的需求。让我们重新审视这个问题,并确保我们的解决方案是正确的。……
具体步骤
创建哈希表:遍历数组,记录每个元素的出现次数。 三重循环遍历: 外层循环遍历 i,从 0 到 n-3。 中层循环遍历 j,从 i+1 到 n-2。 内层循环遍历 k,从 j+1 到 n-1。 检查 arr[i] + arr[j] + arr[k] == target。 避免重复: 在每次移动指针时,跳过重复的元素,以避免重复计算相同的组合。 例如,如果 arr[i] == arr[i-1],则跳过当前的 i。 同理,如果 arr[j] == arr[j-1],则跳过当前的 j。 如果 arr[k] == arr[k-1],则跳过当前的 k。
实现代码:略
我是从哪里开始发现不对的呢就在第2次提问时就发现居然还需要跳过重复的就有问题了。因为如果对于跳过的数据来说,就像我后面质询大模型时所说的“会导致很多同数不同位的元组被筛掉,使总值偏小”。在一开始我也试过直接给思路,无代码。但始终出现回答我第7点出现的错误。
这里出现了几个问题,首先一开始我对于模型给出的答案直接就进行肯定,并未考虑到像写出哈希表但未使用的情况。导致模型开始出现权重偏差,对于错误答案权重可能进行了提升。但是我第2点询问后出现了模型知道题目要求但是与实际自己给出的答案又有所不同的情况。再在后面第4567点强制进行权重降低时,发现无法降低反而还有点强化。所以我考虑为可能是以下的情况:
✨总结模型问题
①缺乏深度逻辑推理,模型虽然能够根据常见的算法思路进行回应,但是对于最初的提问内容产生偏差,在用户提出关于跳过重复元素可能导致同数不同位元组被筛掉的问题时,模型最初并没有考虑到这一点。同时也未进行内容上反向进行复核,导致出现预训练数据偏差与语义理解局限;
②反馈机制不足,模型在收到用户对其答案的质疑后,虽然能够做出一定回应,但似乎没有从根本上纠正其思考方向,还是容易陷入类似的错误逻辑,无法发生根本改变。是否缺少纠错反馈机制有待考量?
③答案一致性问题,在不同轮次询问中,模型出现了前后回答矛盾或者不匹配的情况。比如在后续询问中发现模型之前给出的答案存在漏洞,但模型最初并没有意识到这些问题。通过纠正也始终改变不大,是否出现了独立分化性的回答。
🎊❤对于我们来说:
大模型毕竟还是存在一定的误差性,因此我们再使用语言模型进行辅助的时候,要谨慎对待模型答案。不能因为模型最初给出的答案看似合理就轻易全盘肯定,要多从不同角度去审视,考虑是否存在一些隐藏的逻辑漏洞或者未考虑周全的情况。鉴于模型存在如缺乏深度逻辑推理、反馈机制不足等问题,我们可以把模型的回答更多地当作一种辅助我们理解问题、拓展解题思路的参考,而非绝对正确的标准答案,用于辅助理解与拓展思路为主,这样我们才能更快的培养我们的技术能力!!!
MarsCodeAI刷题辅助体验总结
总之,豆包 MarsCodeAI 为我从 C# 转码至 C++、应对前端训练营刷题的我,提供了思路的斧正,助力攻克算法难关。虽其存在推理深度、反馈机制与答案一致性等小瑕疵,但只要我们掌握提问技巧、审慎对待答案,将其作辅助工具,便能在编程学习路上借其力、避其短,收获知识,提升自我编程能力,期待未来它与我们一同成长、进步。
2024.11.23
NightToona