news 2026/5/10 18:15:11

在duckdb 递归CTE中实现深度优先搜索DFS

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
在duckdb 递归CTE中实现深度优先搜索DFS

原帖地址 https://github.com/duckdb/duckdb/discussions/15386

通常的递归CTE都是广度优先搜索(BFS)

WITHRECURSIVE edges(a,b)as(VALUES(1,2),(1,3),(2,4),(4,5),(4,6)),bfs(node,path)AS(SELECT1ASnode,[]:: STRUCT("from"INT,"to"INT)[]ASpath-- Start with node 1 (root)UNIONALLSELECTe.b,bft.path||[{'from': bft.node,'to': e.b}]FROMbfsASbft,edgesASeWHEREbft.node=e.a)SELECT*FROMbfs;┌───────┬────────────────────────────────────────────────────────────────────┐ │ node │ path │ │ int32 │ struct("from"integer,"to"integer)[]│ ├───────┼────────────────────────────────────────────────────────────────────┤ │1[]│ │2[{'from':1,'to':2}]│ │3[{'from':1,'to':3}]│ │4[{'from':1,'to':2},{'from':2,'to':4}]│ │5[{'from':1,'to':2},{'from':2,'to':4},{'from':4,'to':5}]│ │6[{'from':1,'to':2},{'from':2,'to':4},{'from':4,'to':6}]│ └───────┴────────────────────────────────────────────────────────────────────┘

DuckDB CTE模块的设计者kryonix提供了如下技巧提供DFS,但是还有问题,没有求出全部路径。

WITHRECURSIVE edges(a,b)as(VALUES(1,2),(1,3),(2,4),(4,5),(4,6)),dfs(stack,path)AS(SELECT[1]ASstack,[]:: STRUCT("from"INT,"to"INT)[]ASpath-- Start with node 1 (root)UNIONALL(WITHsiblingsAS(SELECTARRAY_AGG(e.bORDERBYe.bASC)ASsiblings-- ^^^-- This determines the order of traversal of the siblingsFROMdfsASdft,edgesASeWHEREdft.stack[1]=e.a)SELECTx.*FROMsiblingsAS_(s),LATERAL(SELECTs||dft.stack[2:]ASstack,-- Push the stackdft.path||[{'from': dft.stack[1],'to': s[1]}]ASpath-- Add the edge to the pathFROMdfsASdftWHEREarray_length(s)>0-- There are more siblings to traverseUNIONALLSELECTdft.stack[2:],-- Pop the stack[]:: STRUCT("from"INT,"to"INT)[]ASpath-- Reset the pathFROMdfsASdftWHEREarray_length(s)ISNULLANDdft.stack<>[]-- No more siblings to traverse)ASx))SELECT*FROMdfs;┌───────────┬────────────────────────────────────────────────────────────────────┐ │ stack │ path │ │ int32[]│ struct("from"integer,"to"integer)[]│ ├───────────┼────────────────────────────────────────────────────────────────────┤ │[1][]│ │[2,3][{'from':1,'to':2}]│ │[4,3][{'from':1,'to':2},{'from':2,'to':4}]│ │[5,6,3][{'from':1,'to':2},{'from':2,'to':4},{'from':4,'to':5}]│ │[6,3][]│ │[3][]│ │[][]│ └───────────┴────────────────────────────────────────────────────────────────────┘
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/10 18:14:25

基于记忆增强网络的语言模型推理优化

基于记忆增强网络的语言模型推理优化 关键词:记忆增强网络、语言模型、推理优化、注意力机制、深度学习 摘要:本文聚焦于基于记忆增强网络的语言模型推理优化。首先介绍了相关背景,包括研究目的、预期读者、文档结构和术语定义。接着阐述了核心概念,如记忆增强网络和语言模…

作者头像 李华
网站建设 2026/5/10 18:14:25

分类管理与分类统计 UI -Cordova 与 OpenHarmony 混合开发实战

欢迎大家加入[开源鸿蒙跨平台开发者社区](https://openharmonycross平台开发者社区](https://openharmonycrossplatform.csdn.net)&#xff0c;一起共建开源鸿蒙跨平台生态。 本文对应模块&#xff1a;pages.js 中“分类统计”页面以及分类管理相关的 UI 结构&#xff0c;重点是…

作者头像 李华
网站建设 2026/5/3 14:19:20

AI也会“三思而后答“?揭秘Self-RAG智能检索术

当AI遇到"灵魂拷问"你问智能客服&#xff1a;"我的快递到哪儿了&#xff1f;"它回答&#xff1a;"根据牛顿第一定律&#xff0c;物体会保持匀速直线运动..."你会不会当场翻白眼&#xff1f;这就是传统AI系统的尴尬&#xff1a;有些问题明明知识库…

作者头像 李华
网站建设 2026/5/8 10:45:14

传统写作耗时?这10个AI工具实现数学建模论文复现与排版自动化

还在为论文写作头痛&#xff1f;特别是数学建模的优秀论文复现与排版&#xff0c;时间紧、任务重&#xff0c;AI工具能帮上大忙吗&#xff1f;今天&#xff0c;我们评测10款热门AI论文写作工具&#xff0c;帮你精准筛选最适合的助手。 aibiye&#xff1a;专注于语法润色与结构…

作者头像 李华