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

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

相关文章
|
3月前
|
存储 算法 C语言
"揭秘C语言中的王者之树——红黑树:一场数据结构与算法的华丽舞蹈,让你的程序效率飙升,直击性能巅峰!"
【8月更文挑战第20天】红黑树是自平衡二叉查找树,通过旋转和重着色保持平衡,确保高效执行插入、删除和查找操作,时间复杂度为O(log n)。本文介绍红黑树的基本属性、存储结构及其C语言实现。红黑树遵循五项基本规则以保持平衡状态。在C语言中,节点包含数据、颜色、父节点和子节点指针。文章提供了一个示例代码框架,用于创建节点、插入节点并执行必要的修复操作以维护红黑树的特性。
101 1
|
8天前
|
算法
树的遍历算法有哪些?
不同的遍历算法适用于不同的应用场景。深度优先搜索常用于搜索、路径查找等问题;广度优先搜索则在图的最短路径、层次相关的问题中较为常用;而二叉搜索树的遍历在数据排序、查找等方面有重要应用。
15 2
|
5月前
|
存储 算法 Java
Java中,树与图的算法涉及二叉树的前序、中序、后序遍历以及DFS和BFS搜索。
【6月更文挑战第21天】Java中,树与图的算法涉及二叉树的前序、中序、后序遍历以及DFS和BFS搜索。二叉树遍历通过访问根、左、右子节点实现。DFS采用递归遍历图的节点,而BFS利用队列按层次访问。以下是简化的代码片段:[Java代码略]
46 4
|
20天前
|
并行计算 算法 IDE
【灵码助力Cuda算法分析】分析共享内存的矩阵乘法优化
本文介绍了如何利用通义灵码在Visual Studio 2022中对基于CUDA的共享内存矩阵乘法优化代码进行深入分析。文章从整体程序结构入手,逐步深入到线程调度、矩阵分块、循环展开等关键细节,最后通过带入具体值的方式进一步解析复杂循环逻辑,展示了通义灵码在辅助理解和优化CUDA编程中的强大功能。
|
1月前
|
存储 算法 关系型数据库
数据结构与算法学习二一:多路查找树、二叉树与B树、2-3树、B+树、B*树。(本章为了解基本知识即可,不做代码学习)
这篇文章主要介绍了多路查找树的基本概念,包括二叉树的局限性、多叉树的优化、B树及其变体(如2-3树、B+树、B*树)的特点和应用,旨在帮助读者理解这些数据结构在文件系统和数据库系统中的重要性和效率。
18 0
数据结构与算法学习二一:多路查找树、二叉树与B树、2-3树、B+树、B*树。(本章为了解基本知识即可,不做代码学习)
|
5月前
|
存储 算法 Linux
【数据结构和算法】---二叉树(1)--树概念及结构
【数据结构和算法】---二叉树(1)--树概念及结构
50 0
|
2月前
|
大数据 UED 开发者
实战演练:利用Python的Trie树优化搜索算法,性能飙升不是梦!
在数据密集型应用中,高效搜索算法至关重要。Trie树(前缀树/字典树)通过优化字符串处理和搜索效率成为理想选择。本文通过Python实战演示Trie树构建与应用,显著提升搜索性能。Trie树利用公共前缀减少查询时间,支持快速插入、删除和搜索。以下为简单示例代码,展示如何构建及使用Trie树进行搜索与前缀匹配,适用于自动补全、拼写检查等场景,助力提升应用性能与用户体验。
54 2
|
1月前
|
存储 算法
数据结构与算法学习十六:树的知识、二叉树、二叉树的遍历(前序、中序、后序、层次)、二叉树的查找(前序、中序、后序、层次)、二叉树的删除
这篇文章主要介绍了树和二叉树的基础知识,包括树的存储方式、二叉树的定义、遍历方法(前序、中序、后序、层次遍历),以及二叉树的查找和删除操作。
24 0
|
1月前
|
存储 算法 Java
数据结构和算法--分段树
数据结构和算法--分段树
14 0