news 2026/3/29 21:47:56

郭其先生利用DeepSeek实现的PostgreSQL递归CTE实现DFS写法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
郭其先生利用DeepSeek实现的PostgreSQL递归CTE实现DFS写法

测试用表

CREATETABLEtree_nodes(idINTPRIMARYKEY,parent_idINTREFERENCEStree_nodes(id),nameVARCHAR(50));INSERTINTOtree_nodesVALUES(1,NULL,'根节点'),(2,1,'子节点1'),(3,1,'子节点2'),(4,2,'孙子节点1'),(5,2,'孙子节点2'),(6,3,'孙子节点3');

使用递归 CTE 实现 DFS:

WITHRECURSIVE dfsAS(-- 锚点:从根节点开始SELECTid,parent_id,name,1ASdepth,ARRAY[id]ASpath,ARRAY[name]::text[]ASpath_names,FALSEASis_cycleFROMtree_nodesWHEREparent_idISNULLUNIONALL-- 递归部分:深度优先遍历SELECTtn.id,tn.parent_id,tn.name,d.depth+1,d.path||tn.id,d.path_names||tn.name,tn.id=ANY(d.path)ASis_cycleFROMtree_nodes tnJOINdfs dONtn.parent_id=d.idWHERENOTd.is_cycle-- 防止循环)-- 按深度优先顺序输出SELECTid,parent_id,name,depth,path,path_namesFROMdfsORDERBYpath;

使用栈模拟 DFS

WITHRECURSIVE dfs_stackAS(-- 初始栈:包含根节点SELECT1ASstep,idAScurrent_node,name,ARRAY[id]ASstack,ARRAY[]::INT[]ASvisited,'visit'ASactionFROMtree_nodesWHEREparent_idISNULLUNIONALL-- 模拟栈操作:弹出、压入SELECTd.step+1,CASE-- 如果有未访问的子节点,访问第一个WHENEXISTS(SELECT1FROMtree_nodes tnWHEREtn.parent_id=d.current_nodeANDtn.id!=ALL(d.visited))THEN(SELECTtn.idFROMtree_nodes tnWHEREtn.parent_id=d.current_nodeANDtn.id!=ALL(d.visited)ORDERBYtn.idLIMIT1)-- 否则回溯ELSEd.stack[array_length(d.stack,1)-1]END,tn.name,CASE-- 访问新节点:压栈WHENEXISTS(SELECT1FROMtree_nodes tnWHEREtn.parent_id=d.current_nodeANDtn.id!=ALL(d.visited))THENd.stack||(SELECTtn.idFROMtree_nodes tnWHEREtn.parent_id=d.current_nodeANDtn.id!=ALL(d.visited)ORDERBYtn.idLIMIT1)-- 回溯:出栈ELSEd.stack[1:array_length(d.stack,1)-1]END,d.visited||d.current_node,CASEWHENEXISTS(SELECT1FROMtree_nodes tnWHEREtn.parent_id=d.current_nodeANDtn.id!=ALL(d.visited))THEN'push'ELSE'pop'ENDFROMdfs_stack dLEFTJOINtree_nodes tnONtn.id=d.current_nodeWHEREarray_length(d.stack,1)>0-- 栈不为空时继续)SELECTstep,current_node,name,stack,action,visitedFROMdfs_stackORDERBYstep;
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/27 15:56:52

HY-MT1.5长文本翻译指南:上下文保持技术详解

HY-MT1.5长文本翻译指南:上下文保持技术详解 随着全球化进程的加速,高质量、多语言互译能力成为AI大模型落地的关键需求之一。腾讯近期开源的混元翻译大模型HY-MT1.5系列,凭借其在翻译质量、上下文理解与边缘部署方面的突出表现,…

作者头像 李华
网站建设 2026/3/27 8:15:12

翻译大模型部署陷阱:HY-MT1.5常见问题解决

翻译大模型部署陷阱:HY-MT1.5常见问题解决 随着多语言交流需求的爆发式增长,高质量、低延迟的翻译大模型成为智能应用的核心组件。腾讯开源的混元翻译大模型 HY-MT1.5 系列,凭借其在多语言支持、边缘部署能力和上下文理解方面的突出表现&…

作者头像 李华
网站建设 2026/3/15 18:05:43

Multisim14.0中联合设计常见问题快速理解

Multisim 14.0 联合设计实战:那些你踩过的坑,我都替你趟平了电子设计越来越复杂,光靠画个原理图、跑个仿真已经不够看了。从电路构思到PCB落地,再到系统级验证,整个流程需要多个工具协同作战——这就是我们常说的联合设…

作者头像 李华
网站建设 2026/3/27 8:41:12

腾讯HY-MT1.5部署:边缘计算节点方案

腾讯HY-MT1.5部署:边缘计算节点方案 1. 引言 随着全球化进程的加速,跨语言沟通需求日益增长,高质量、低延迟的翻译服务成为智能设备、实时通信和本地化应用的核心能力。然而,传统云端翻译模型面临网络依赖性强、响应延迟高、隐私…

作者头像 李华
网站建设 2026/3/27 10:58:46

从零开始:HY-MT1.5翻译模型网页推理部署指南

从零开始:HY-MT1.5翻译模型网页推理部署指南 1. 引言 随着全球化进程的加速,高质量、低延迟的机器翻译需求日益增长。腾讯近期开源了其最新的混元翻译大模型系列——HY-MT1.5,包含两个版本:HY-MT1.5-1.8B(18亿参数&am…

作者头像 李华
网站建设 2026/3/27 20:52:30

HY-MT1.5多语言支持:东南亚小语种实战

HY-MT1.5多语言支持:东南亚小语种实战 1. 引言:腾讯开源的混元翻译新标杆 随着全球化进程加速,跨语言沟通需求激增,尤其在东南亚地区,语言多样性显著——除主流语言如泰语、越南语外,还广泛存在壮语、傣语…

作者头像 李华