news 2026/2/23 17:12:46

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/2/23 13:49:35

YOLO模型微调全流程教学:自定义数据集+GPU加速训练

YOLO模型微调全流程教学&#xff1a;自定义数据集GPU加速训练 在智能制造车间里&#xff0c;一台AOI&#xff08;自动光学检测&#xff09;设备正以每分钟数百帧的速度扫描PCB板。它需要在毫秒级时间内识别出焊点虚焊、元件偏移等细微缺陷——这正是现代工业对视觉系统的严苛要…

作者头像 李华
网站建设 2026/2/17 5:43:49

YOLO在智慧农业中的落地案例:病虫害自动识别系统

YOLO在智慧农业中的落地案例&#xff1a;病虫害自动识别系统 在广袤的农田里&#xff0c;一位农户蹲下身子&#xff0c;仔细端详一片泛黄的稻叶。他皱起眉头——是缺水&#xff1f;还是染上了病害&#xff1f;过去&#xff0c;这样的判断依赖经验&#xff0c;也常常滞后。等到大…

作者头像 李华
网站建设 2026/2/21 21:07:26

YOLO在无人机视觉中的应用:精准识别每一只飞鸟

YOLO在无人机视觉中的应用&#xff1a;精准识别每一只飞鸟 当一架无人机穿越清晨的林地&#xff0c;镜头扫过树梢与天际线&#xff0c;成群飞鸟突然从视野边缘掠过——这一刻&#xff0c;它能否及时“看见”并做出规避动作&#xff1f;这不仅是飞行安全的核心问题&#xff0c;更…

作者头像 李华
网站建设 2026/2/6 18:27:24

YOLO模型支持多语言标签输出,全球化应用无忧

YOLO模型支持多语言标签输出&#xff0c;全球化应用无忧 在智能摄像头遍布机场、工厂和商场的今天&#xff0c;一个现实问题正困扰着跨国企业的技术团队&#xff1a;同一套AI系统&#xff0c;在德国需要显示“Auto”&#xff0c;在日本要标注“車”&#xff0c;而在巴西用户眼里…

作者头像 李华
网站建设 2026/2/21 8:05:39

YOLO镜像支持API网关统一接入管理

YOLO镜像支持API网关统一接入管理 在智能制造工厂的质检线上&#xff0c;一台边缘设备正实时分析高清摄像头传来的图像流——划痕、气泡、装配错位等微小缺陷被毫秒级识别并上报。同一时间&#xff0c;在城市交通指挥中心&#xff0c;另一组AI模型正在处理上千路视频信号&#…

作者头像 李华