news 2026/5/12 9:52:23

DeepSeek对利用DuckDB求解Advent of Code 2021第9题“烟雾盆地”第二部分SQL的分析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DeepSeek对利用DuckDB求解Advent of Code 2021第9题“烟雾盆地”第二部分SQL的分析

这是DBatUTuebingen发布的。
源地址:https://github.com/DBatUTuebingen/Advent_of_Code


Advent of Code 2021 第9天

烟雾盆地

输入解析和低点计算放在共享文件smoke-basin.sql中(通过.read引入),两部分都会用到。

第一部分

用法:

$ duckdb < smoke-basin-part1.sql ┌────────────┐ │ risk level │ │ int128 │ ├────────────┤ │ 526 │ └────────────┘ 运行时间(秒):实际 0.000 用户 0.000190 系统 0.000082
第二部分

递归CTEflows本质上计算了二维洞穴网格上的连通分量(分量由高度为9的网格点分隔)。

关键优化:仅从第一部分找到的低点开始搜索连通分量(而不是从所有网格点开始)。参见递归CTEflows的初始查询q₀cavelowpoints的半连接。

用法:

在我的Mac Book Pro M2上大约需要30秒。

$ duckdb < smoke-basin-part2.sql ┌─────────┐ │ sizes │ │ int32 │ ├─────────┤ │ 1123524 │ └─────────┘ 运行时间(秒):实际 30.636 用户 23.693674 系统 6.924345

-- AoC 2021, Day 9 (Part 2)-- AoC 输入文件DROPMACROIFEXISTSinput;CREATEMACRO input()AS'input.txt';-- 引入共享的SQL文件,包含高度图解析和低点计算.readsmoke-basin.sql-- 开启计时器,并设置单线程运行(确保结果确定性).timeronSETthreads=1;WITHRECURSIVE-- 1. 为每个网格点分配一个唯一的盆地编号(basin),初始为行号cave(x,y,height,basin)AS(SELECTh.x,h.y,h.height,ROW_NUMBER()OVER()ASbasinFROMheightmapASh),-- 2. 递归CTE:模拟水流扩散,确定每个点属于哪个盆地flows(x,y,basin)AS(-- 初始查询:仅从低点开始扩散(优化关键)SELECTc.x,c.y,c.basinFROMcaveASc SEMIJOINlowpointsASlpON(c.y,c.x)=(lp.y,lp.x)UNIONALL-- 递归部分:从已访问点向四个相邻点扩散SELECTc.x,c.y,LEAST(f.basin,c.basin)ASbasinFROMflowsASf,caveAScWHERE(c.x,c.y)IN((f.x+1,f.y),(f.x-1,f.y),(f.x,f.y+1),(f.x,f.y-1))ANDc.height<9-- 只扩散到高度小于9的点(高度9为边界)),-- 3. 确定每个点的最终盆地编号(取扩散过程中遇到的最小编号)basins(x,y,basin)AS(SELECTf.x,f.y,MIN(f.basin)ASbasinFROMflowsASfGROUPBYf.y,f.x)-- 4. 计算前三大盆地大小的乘积SELECTPRODUCT(b.size)::intASsizesFROM(SELECTCOUNT(*)ASsizeFROMbasinsASbGROUPBYb.basin-- 按盆地分组统计大小ORDERBYsizeDESC-- 按大小降序排序LIMIT3)ASb;-- 取最大的三个盆地

SQL代码分析注释

  1. caveCTE

  2. flows递归CTE

  3. basinsCTE

  4. 最终查询

算法思路总结

该SQL通过递归CTE实现了基于低点的洪水填充算法(Flood Fill)

优化点在于仅从低点开始扩散,避免了从所有点开始的不必要计算,大幅提升了性能。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/8 13:36:16

雷家林诗歌集录之十七Collection of Poems by Lei Jialin, Volume 17

I’m floating on a small boat, drifting towards the stars. There lies a dreamy glow, a mark of my past life, and a haven for inspiration. I’m floating on the Milky Way, as miraculous pearls of light in various colors flit past me. My eyes are filled with …

作者头像 李华
网站建设 2026/5/1 7:15:33

YOLO目标检测模型支持gRPC高效通信协议

YOLO目标检测模型支持gRPC高效通信协议 在智能制造工厂的质检线上&#xff0c;一台工业相机每秒捕捉上百帧高清图像&#xff0c;需要在毫秒级时间内判断是否存在焊点虚焊、元件缺失等缺陷。传统基于HTTP接口调用AI模型的方式&#xff0c;在高并发场景下频频出现超时与堆积——…

作者头像 李华
网站建设 2026/5/3 5:03:08

TinyMCE导入微信公众号音视频嵌入路径

集团 Word 导入产品项目全纪实&#xff1a;从寻觅到落地攻坚 需求初现&#xff1a;多行业适配的挑战 作为集团旗下软件子公司的项目负责人&#xff0c;我深知此次任务的复杂性与紧迫性。集团业务广泛&#xff0c;旗下多个子公司服务于教育、政府、银行等多个关键行业。集团总…

作者头像 李华
网站建设 2026/5/10 20:16:01

网页大文件上传插件的插件化开发与组件化思路

大文件传输系统技术方案设计与实现&#xff08;第一人称专业报告&#xff09; 一、项目背景与需求分析 作为广西某软件公司前端工程师&#xff0c;近期负责一个关键项目的大文件传输模块开发。该项目需求具有以下特点&#xff1a; 支持20GB级大文件传输&#xff08;上传/下载…

作者头像 李华
网站建设 2026/5/11 16:56:36

YOLO目标检测准确率提升秘籍:数据增强策略大全

YOLO目标检测准确率提升秘籍&#xff1a;数据增强策略大全 在工业质检车间的高速流水线上&#xff0c;一台搭载YOLO模型的视觉系统正以每秒上百帧的速度识别微小缺陷。然而&#xff0c;当遇到低光照、部分遮挡或新出现的小尺寸异常时&#xff0c;漏检率突然上升——这正是许多工…

作者头像 李华