探索通义灵码在算法生成中的无限潜力——树篇

简介: 书接上文(https://developer.aliyun.com/article/1369561?spm=a2c6h.13148508.setting.14.34764f0e7tpJSK),由于算法的分类较多且实现语言不唯一,故此处想单独另开一文来进行测试。

前言

实测通义灵码:解锁智能编程的钥匙:https://developer.aliyun.com/article/1367211?spm=a2c6h.13148508.setting.15.5f074f0etrEHdr

探索通义灵码在算法生成中的无限潜力——数组篇:https://developer.aliyun.com/article/1367500?spm=a2c6h.13148508.setting.14.5f074f0etrEHdr

探索通义灵码在算法生成中的无限潜力——字符串篇:https://developer.aliyun.com/article/1368451?spm=a2c6h.13148508.setting.14.5a814f0eodKUMp

探索通义灵码在算法生成中的无限潜力——链表篇:https://developer.aliyun.com/article/1369561?spm=a2c6h.13148508.setting.14.34764f0e7tpJSK

树是一种抽象数据类型(ADT)或是实现这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>0) 有限节点组成一个具有层次关系的集合。

image.png

把它叫做「树」是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。

它具有以下的特点:

  • 每个节点都只有有限个子节点或无子节点;

  • 没有父节点的节点称为根节点;

  • 每一个非根节点有且只有一个父节点;

  • 除了根节点外,每个子节点可以分为多个不相交的子树;

  • 树里面没有环路。

树比链表稍微复杂,因为链表是线性数据结构,而树不是。 树的问题可以由 广度优先搜索深度优先搜索 解决。

二叉树

二叉树的最大深度

image.png


给出提问如下:

给定一个二叉树 root ,返回其最大深度。
二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。请结合以下代码完成:
class Solution:
def maxDepth(self, root: TreeNode) -> int:

生成代码如下:

image.png

验证代码正确性,完美通过!

image.png

验证二叉搜索树

image.png


给出提问如下:

给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。
有效 二叉搜索树定义如下:
节点的左子树只包含 小于 当前节点的数。
节点的右子树只包含 大于 当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
请结合以下代码完成:
class Solution:
def isValidBST(self, root: Optional[TreeNode]) -> bool:

生成代码如下:

image.png

验证代码正确性,完美通过!

image.png

对称二叉树

image.png


给出提问如下:

给你一个二叉树的根节点 root , 检查它是否轴对称。请结合以下代码完成:
class Solution:
def isSymmetric(self, root: Optional[TreeNode]) -> bool:

生成代码如下:

image.png

验证代码正确性,完美通过!

image.png

二叉树的层序遍历

image.png

给出提问如下:

给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。请结合以下代码完成:class Solution:
def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:

生成代码如下:

image.png

验证代码正确性,完美通过!

image.png

将有序数组转换为二叉搜索树

image.png


给出提问如下:

给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。
请结合以下代码完成:class Solution:
def sortedArrayToBST(self, nums: List[int]) -> Optional[TreeNode]:

生成代码如下:

image.png

验证代码正确性,完美通过!

image.png

N叉树

N 叉树的最大深度

image.png


给出提问如下:

给定一个 N 叉树,找到其最大深度。
最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。请结合以下代码完成:class Solution:
def maxDepth(self, root: 'Node') -> int:

生成代码如下:

image.png

但是不幸的是,这次并未成功通过,并且多次测试均存在语法错误。

image.png

image.png

唯一一次不存在语法错误的情况下,跟正确答案也有差距。

image.png

但是,经过排查,我意识到了通义灵码代码的逻辑似乎并没有问题,是由于力扣的测试用例的输入格式与通义灵码的理解不一致导致的。

所以此时,我给它进行了解释。

image.png

但是离谱的是,这一次依然是错的。

image.png

折腾了半个小时,终于给训练出来了,必须指明它的代码输出是错误的,并给出正确的值,以此来让通义灵码进一步修正代码。

image.png

验证代码正确性,完美通过!

image.png

N 叉树的层序遍历

image.png


给出提问如下:

给定一个 N 叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)。请结合以下代码完成:class Node:
def init(self, val=None, children=None):
self.val = val
self.children = children
class Solution:
def levelOrder(self, root):

生成代码如下:

image.png

验证代码正确性,完美通过!

image.png

N 叉树的前序遍历

image.png


给出提问如下:

给定一个 n 叉树的根节点 root ,返回 其节点值的 前序遍历 。请结合以下代码完成:class Node:
def init(self, val=None, children=None):
self.val = val
self.children = children
class Solution:
def preorder(self, root: 'Node') -> List[int]:

生成代码如下:

image.png

验证代码正确性,完美通过!

image.png

结论

通义灵码对于基础树算法的处理也可以说是游刃有余了,今天的测试并没有碰到太多问题,唯一想总结的就是两个点:

  1. 在通义灵码初次生成代码时给入过多的提示可能会导致它的过度解读,并且如果此时生成的代码存在语法错误或者逻辑错误,再通过后期引导的方式很难让其自己完成代码修正(如果能也会耗费较长时间)。这种情况下的策略是尽量确保首次输入的是关键信息,比如我常常使用的实现目标+头部代码串的方式,当其第初次生成的代码能保证正常运行后,如有问题再慢慢进行引导调优。

  2. 引导优化的策略也很重要,就今天测试而言,在N 叉树的最大深度这一题里就用到了一个方法。首先第一是得确保通义灵码和我们处于同频,即它编写代码使用的输入输出和我们力扣中测试的输入输出是一致的(只是以此为例,实际上这也算是大模型的普遍引导方式)。当确认同频之后,如果它仍然存在错误,就需要开始逐步引导,给出适当的输入来强制它说出输出。

    • 如果代码错误,但通义灵码说出的输出却是正确的,此时就是出现了代码逻辑幻觉。我使用的策略是会告知通义灵码“按照上述代码逻辑,当输入为XXX时,你的输出是XXX,这个是错误的,正确输出应该是XXX,请你修正代码

    • 如果代码错误,且通义灵码说出的输出也错误,这时我采取的第一个策略会是清除记忆之后重新生成(利用随机性),其实也有点碰运气的意思;第二种就是会告知通义灵码“你说的输出不对,正确的输出应该是XXX,请你根据正确输出修正你的代码逻辑

当然了,大模型都具有随机性,我给出的prompt也不一定每次能100%成功,在这里也只是起到一个抛砖引玉的效果,也期望各位大佬看到之后能够一起多多交流~

相关文章
|
23天前
|
存储 算法 C语言
"揭秘C语言中的王者之树——红黑树:一场数据结构与算法的华丽舞蹈,让你的程序效率飙升,直击性能巅峰!"
【8月更文挑战第20天】红黑树是自平衡二叉查找树,通过旋转和重着色保持平衡,确保高效执行插入、删除和查找操作,时间复杂度为O(log n)。本文介绍红黑树的基本属性、存储结构及其C语言实现。红黑树遵循五项基本规则以保持平衡状态。在C语言中,节点包含数据、颜色、父节点和子节点指针。文章提供了一个示例代码框架,用于创建节点、插入节点并执行必要的修复操作以维护红黑树的特性。
45 1
|
3月前
|
存储 算法 Java
Java中,树与图的算法涉及二叉树的前序、中序、后序遍历以及DFS和BFS搜索。
【6月更文挑战第21天】Java中,树与图的算法涉及二叉树的前序、中序、后序遍历以及DFS和BFS搜索。二叉树遍历通过访问根、左、右子节点实现。DFS采用递归遍历图的节点,而BFS利用队列按层次访问。以下是简化的代码片段:[Java代码略]
36 4
|
3月前
|
存储 算法 Linux
【数据结构和算法】---二叉树(1)--树概念及结构
【数据结构和算法】---二叉树(1)--树概念及结构
34 0
|
2月前
|
大数据 UED 开发者
实战演练:利用Python的Trie树优化搜索算法,性能飙升不是梦!
【7月更文挑战第19天】Trie树,又称前缀树,是优化字符串搜索的高效数据结构。通过利用公共前缀,Trie树能快速插入、删除和查找字符串。
67 2
|
2月前
|
机器学习/深度学习 数据采集 算法
Python实现GBDT(梯度提升树)回归模型(GradientBoostingRegressor算法)项目实战
Python实现GBDT(梯度提升树)回归模型(GradientBoostingRegressor算法)项目实战
|
2月前
|
机器学习/深度学习 数据采集 算法
Python实现GBDT(梯度提升树)分类模型(GradientBoostingClassifier算法)并应用网格搜索算法寻找最优参数项目实战
Python实现GBDT(梯度提升树)分类模型(GradientBoostingClassifier算法)并应用网格搜索算法寻找最优参数项目实战
|
2月前
|
算法 JavaScript
JS 【详解】树的遍历(含深度优先遍历和广度优先遍历的算法实现)
JS 【详解】树的遍历(含深度优先遍历和广度优先遍历的算法实现)
43 0
JS 【详解】树的遍历(含深度优先遍历和广度优先遍历的算法实现)
|
3月前
|
机器学习/深度学习 数据采集 存储
算法金 | 决策树、随机森林、bagging、boosting、Adaboost、GBDT、XGBoost 算法大全
**摘要:** 这篇文章介绍了决策树作为一种机器学习算法,用于分类和回归问题,通过一系列特征测试将复杂决策过程简化。文章详细阐述了决策树的定义、构建方法、剪枝优化技术,以及优缺点。接着,文章讨论了集成学习,包括Bagging、Boosting和随机森林等方法,解释了它们的工作原理、优缺点以及如何通过结合多个模型提高性能和泛化能力。文中特别提到了随机森林和GBDT(XGBoost)作为集成方法的实例,强调了它们在处理复杂数据和防止过拟合方面的优势。最后,文章提供了选择集成学习算法的指南,考虑了数据特性、模型性能、计算资源和过拟合风险等因素。
41 0
算法金 | 决策树、随机森林、bagging、boosting、Adaboost、GBDT、XGBoost 算法大全
|
3月前
|
机器学习/深度学习 算法
梯度提升树GBDT系列算法
在Boosting集成算法当中,我们逐一建立多个弱评估器(基本是决策树),并且下一个弱评估器的建立方式依赖于上一个弱评估器的评估结果,最终综合多个弱评估器的结果进行输出。
|
3月前
|
存储 算法 Python
python常用算法(5)——树,二叉树与AVL树(一)
python常用算法(5)——树,二叉树与AVL树