当前位置: 首页 > news >正文

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)

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

http://www.zskr.cn/news/169155.html

相关文章:

  • YOLO模型支持ModelScope魔搭平台模型同步
  • 2025诚信的GEO公司TOP5权威推荐:口碑好的GEOAI搜索排名代运营服务商深度测评 - myqiye
  • C029基于博途西门子1200PLC苹果清洗控制系统仿真
  • YOLO在建筑工地安全监管中的应用:未戴安全帽识别
  • YOLO与OpenCV结合使用教程:图像预处理全流程
  • YOLO模型支持多摄像头同步处理,构建全景感知系统
  • YOLO目标检测模型支持Prometheus监控指标暴露
  • YOLO模型支持COCO数据集预训练权重一键加载
  • YOLO目标检测模型支持RESTful API封装,快速集成
  • macOS 使用 conda,同时本地安装了python,遇到 ModuleNotFoundError: No module named ‘xxx‘` 解决
  • 2025年口碑好的集资诈骗律师事务推荐,专业处理单位集资诈骗的律师解析 - mypinpai
  • 现代化医院照明供配电防雷及视频监控系统设计
  • 2025年平开窗纱一体定制优质源头厂家、商品房窗纱一体优质生产厂家排名 - 工业推荐榜
  • 5、PPT配色方法
  • 2025年靠谱防腐过滤洗涤一体机/搪瓷过滤洗涤干燥机厂家排行榜 - myqiye
  • 2025年行业首选:国内PLC控制柜领先品牌全解析,水处理变频控制柜/电气自动控制柜/PLC控制柜/水泵专用控制柜PLC控制柜厂家哪家强 - 品牌推荐师
  • YOLO在仓储物流中的应用:包裹分拣与堆垛机引导
  • 亲测灵活用工平台纳税计算
  • 毕业设计项目 大数据校园卡数据分析系统(源码+论文)
  • 6款免费AI论文生成器实测:1天出5万字计算机论文附真实参考文献
  • YOLO目标检测模型云端部署最佳实践:节省50%算力成本
  • 国密加密在大文件上传插件中的实现与探讨
  • 为什么90%的视觉工程师都在用YOLO?深度剖析其架构优势与GPU加速方案
  • 2025年天津知名的乏风取热箱公司推荐排行,空调机组/翅片管/高大空间冷暖风机/冷却器/表冷器,乏风取热箱厂家推荐榜单 - 品牌推荐师
  • YOLO模型训练太慢?我们为你优化了GPU资源调度策略
  • 2025推拉窗纱一体源头厂家TOP5权威推荐:商品房定制优质品牌深度测评指南 - myqiye
  • 2025年长沙职业学校排行榜,湖南万通汽车学校有实力吗? - 工业品牌热点
  • 两步远离负能量
  • 为什么云测试是数字化转型的核心驱动力?
  • 【好写作AI】真能5分钟读完100篇文献?我们试了,是真的!