news 2026/6/9 23:58:59

郭其先生利用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/6/9 21:05:03

ARM Cortex-M调试中JLink驱动性能优化建议

ARM Cortex-M调试提速实战:J-Link驱动与硬件协同调优全解析 你有没有遇到过这样的场景? 凌晨两点,项目 deadline 逼近,你终于改完最后一行代码,点击“下载到芯片”——然后眼睁睁看着进度条以每秒几十KB的速度爬行。…

作者头像 李华
网站建设 2026/6/9 21:08:00

Multisim仿真电路图实例助力课程设计高效完成

用Multisim仿真电路图实例,让课程设计不再“纸上谈兵”你有没有经历过这样的场景?课程设计任务刚布置下来:设计一个音频放大器、做个函数发生器、或者搭个开关电源。你翻开课本,画出原理图,信心满满地走进实验室——结…

作者头像 李华
网站建设 2026/6/5 15:30:29

2026 年,技术人为什么越来越倾向于「自己掌控系统」

这两年,一个很明显的变化是: 越来越多的技术人开始对“现成系统”保持克制,转而思考“系统是否真正可控”这个问题。 无论是做网站、做内容平台,还是做内部工具,大家不再只关心“能不能用”,而是开始关心&…

作者头像 李华
网站建设 2026/6/9 17:21:34

边缘设备实战:HY-MT1.5-1.8B嵌入式部署案例

边缘设备实战:HY-MT1.5-1.8B嵌入式部署案例 1. 引言 随着全球化交流的不断深入,高质量、低延迟的实时翻译需求日益增长。尤其是在智能终端、移动设备和边缘计算场景中,用户对“离线可用”“隐私安全”“响应迅速”的翻译能力提出了更高要求。…

作者头像 李华
网站建设 2026/6/9 17:23:10

HY-MT1.5-7B vs 商业API实战对比:33语种互译性能评测与GPU利用率分析

HY-MT1.5-7B vs 商业API实战对比:33语种互译性能评测与GPU利用率分析 1. 引言:为何需要开源翻译模型的深度评测? 随着全球化进程加速,多语言互译已成为企业出海、内容本地化和跨文化交流的核心需求。当前市场主流依赖Google Tran…

作者头像 李华
网站建设 2026/6/9 17:23:19

NVIDIA PhysicalAI:智能空间多摄像头追踪终极数据集

NVIDIA PhysicalAI:智能空间多摄像头追踪终极数据集 【免费下载链接】PhysicalAI-SmartSpaces 项目地址: https://ai.gitcode.com/hf_mirrors/nvidia/PhysicalAI-SmartSpaces 导语:NVIDIA发布PhysicalAI-SmartSpaces数据集,通过近150…

作者头像 李华