news 2026/4/23 13:18:07

郭其先生利用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/4/23 13:12:13

混元翻译1.5模型微调:领域适配训练指南

混元翻译1.5模型微调:领域适配训练指南 1. 引言 随着全球化进程的加速,高质量、低延迟的机器翻译需求日益增长。腾讯开源的混元翻译大模型 HY-MT1.5 系列应运而生,旨在为多语言互译场景提供高性能、可定制化的解决方案。该系列包含两个核心模…

作者头像 李华
网站建设 2026/4/23 11:20:10

腾讯开源翻译模型实战:HY-MT1.5 API封装教程

腾讯开源翻译模型实战:HY-MT1.5 API封装教程 1. 引言 随着全球化进程的加速,跨语言沟通已成为企业出海、内容本地化和国际协作的核心需求。然而,商业翻译API往往存在成本高、数据隐私风险大、定制化能力弱等问题。在此背景下,腾讯…

作者头像 李华
网站建设 2026/4/23 12:34:25

PDF-Extract-Kit进阶教程:模型微调与精度提升

PDF-Extract-Kit进阶教程:模型微调与精度提升 1. 引言 1.1 技术背景与痛点分析 在处理PDF文档的智能化提取任务中,通用预训练模型虽然具备一定的泛化能力,但在特定领域(如医学论文、法律文书、工程图纸)或特殊排版结…

作者头像 李华
网站建设 2026/4/22 21:35:31

HY-MT1.5-7B格式化处理:程序代码翻译保留结构

HY-MT1.5-7B格式化处理:程序代码翻译保留结构 1. 引言 随着全球化进程的加速,高质量、多语言互译能力成为自然语言处理领域的重要需求。腾讯推出的混元翻译大模型HY-MT1.5系列,正是在这一背景下应运而生的技术成果。该系列包含两个核心模型…

作者头像 李华
网站建设 2026/4/23 9:55:06

PDF-Extract-Kit性能调优:处理超大PDF文件的方法

PDF-Extract-Kit性能调优:处理超大PDF文件的方法 1. 背景与挑战 随着学术研究和企业文档的数字化进程加速,PDF已成为最主流的文档格式之一。然而,面对动辄数百页、包含大量图像、表格和公式的超大PDF文件(如学位论文、技术白皮书…

作者头像 李华
网站建设 2026/4/23 9:56:21

新手教程:如何正确连接STLink与STM32芯片引脚

从零开始搞懂STLink与STM32接线:新手避坑全指南你有没有遇到过这样的场景?手握一块崭新的STM32最小系统板,插上ST-Link调试器,打开STM32CubeIDE,点击“Download”——结果弹出一行红字:“No target connect…

作者头像 李华