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

简介: 书接上文(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%成功,在这里也只是起到一个抛砖引玉的效果,也期望各位大佬看到之后能够一起多多交流~

相关文章
|
7天前
|
存储 算法 Java
Java中,树与图的算法涉及二叉树的前序、中序、后序遍历以及DFS和BFS搜索。
【6月更文挑战第21天】Java中,树与图的算法涉及二叉树的前序、中序、后序遍历以及DFS和BFS搜索。二叉树遍历通过访问根、左、右子节点实现。DFS采用递归遍历图的节点,而BFS利用队列按层次访问。以下是简化的代码片段:[Java代码略]
16 4
|
3天前
|
存储 算法 Linux
【数据结构和算法】---二叉树(1)--树概念及结构
【数据结构和算法】---二叉树(1)--树概念及结构
10 0
|
7天前
|
算法 Java 机器人
Java数据结构与算法:AVL树
Java数据结构与算法:AVL树
|
6天前
|
机器学习/深度学习 算法
梯度提升树GBDT系列算法
在Boosting集成算法当中,我们逐一建立多个弱评估器(基本是决策树),并且下一个弱评估器的建立方式依赖于上一个弱评估器的评估结果,最终综合多个弱评估器的结果进行输出。
|
8天前
|
存储 算法 Python
python常用算法(5)——树,二叉树与AVL树(一)
python常用算法(5)——树,二叉树与AVL树
|
10天前
|
算法 数据可视化 Python
Python中的决策树算法探索
Python中的决策树算法探索
|
16天前
|
机器学习/深度学习 算法 前端开发
决策树与随机森林算法在分类问题中的应用
本文探讨了决策树和随机森林两种监督学习算法,它们在分类任务中表现出强大的解释性和预测能力。决策树通过特征测试进行分类,构建涉及特征选择、树生成和剪枝。随机森林是集成学习方法,通过构建多棵决策树并汇总预测结果,防止过拟合。文中提供了Python代码示例,展示如何使用sklearn构建和应用这些模型,并讨论了参数调优和模型评估方法,如交叉验证和混淆矩阵。最后,强调了在实际问题中灵活选择和调整模型参数的重要性。
41 4
|
17天前
|
存储 机器学习/深度学习 算法
使用决策树算法预测隐形眼镜类型
使用决策树算法预测隐形眼镜类型
24 2
|
17天前
|
存储 算法 Python
决策树算法
决策树算法
13 2
|
22天前
|
存储 算法 测试技术
数据结构学习记录——树习题-Complete Binary Search Tree(题目描述、输入输出示例、数据结构的选择、核心算法、计算左子树的规模)
数据结构学习记录——树习题-Complete Binary Search Tree(题目描述、输入输出示例、数据结构的选择、核心算法、计算左子树的规模)
19 1