利用DeepSeek辅助翻译clickhouse SQL为DuckDB 格式求解Advent of Code 2025第10题 电子工厂 第二部分

首先把clickhouse 解题 SQL发给DeepSeek,

用中文解读附件clickhouse格式sql的解题逻辑,特别是part2的逻辑

它给出了以下解读。

看了这个ClickHouse SQL,这是解决Advent of Code(AOC)第10天的题目,主要涉及按钮组合和状态转换的优化问题。让我详细解读逻辑:

整体问题结构

题目包含两部分:

  1. Part 1:找到最少按钮次数,使LED灯(用0/1表示)变成目标图案
  2. Part 2:扩展问题,考虑不同的"电压"目标,需要计算最小总成本

Part 1 逻辑(暴力枚举)

-- 核心思路:枚举所有按钮组合(2^n种可能)-- 每个按钮影响特定位置,按下改变对应位置的状态(XOR运算)-- 找到与目标图案完全匹配且按钮次数最少的结果
  1. 解析输入:将’#‘转为1,’.'转为0
  2. 枚举组合:对n个按钮,生成0到2^n-1的所有位掩码
  3. 计算效果:对每个组合,计算每个位置被按下的按钮数之和,取模2(XOR)
  4. 匹配目标:筛选出resulting_diagram = target_diagram的组合
  5. 找最小:按bitCount(combination_id)排序,取最小值

Part 2 核心逻辑(难点)

这是问题的核心创新点,采用了递归折半算法

1. 预计算所有按钮组合的"模式"

-- 为每个按钮组合计算:-- effect_pattern: 每个位置被按下的次数(整数,不只是0/1)-- parity_pattern: 每个位置的奇偶性(模2的结果)-- pattern_cost: 该组合的按钮次数

2. 按奇偶性分组模式

-- 将effect_pattern按parity_pattern分组-- 相同奇偶约束的模式放在一起,便于后续查找

3.关键算法:递归折半

-- 初始:current_goal = target_joltages(目标电压值)-- 递归步骤:-- 1. 根据current_goal的奇偶性选择合适的模式组(parity_pattern必须匹配)-- 2. 应用一个模式:current_goal = current_goal - effect_pattern-- 3. 折半:current_goal = intDiv(current_goal, 2)-- 4. 累计成本:cost += pattern_cost * (2^depth)

算法原理理解

这实际上是一个基于二进制的动态规划

  • 为什么要匹配奇偶性?
    因为(current - pattern) / 2必须是整数,所以currentpattern在每个位置必须同奇偶

  • 为什么除以2?
    每次递归将问题规模减半,从二进制角度看:

    • 每个位置的电压值看成二进制数
    • 奇偶性 = 最低位
    • 除以2 = 右移一位(去掉已处理的最低位)
  • 成本计算为什么是pattern_cost * 2^depth
    假设最优解中某个模式需要在第d层(深度)使用k次

    • 在第d层用1次 → 成本 = pattern_cost
    • 在第d-1层用1次 → 相当于第d层用2次 → 成本 = pattern_cost * 2
    • 以此类推:成本 = pattern_cost × 2^depth

4. 终止条件

-- 当current_goal全为0时停止-- 从所有路径中找最小accumulated_cost

算法复杂度分析

  • Part 1:O(2^n × m),n=按钮数,m=位置数(暴力搜索)
  • Part 2:O(2^n + L × P × D),其中:
    • 2^n是预计算模式
    • L是递归深度(≤100)
    • P是模式数量
    • D是目标维度

实际应用思路

这个Part 2的算法很巧妙:

  1. 将多位置问题分解为独立但又相互关联的子问题
  2. 利用二进制表示和奇偶性约束大幅减少搜索空间
  3. 通过"除以2"操作将指数问题转化为线性递归
  4. 动态规划思想:从最低位开始逐位解决

这是一个典型的状态压缩+二进制优化的竞赛题目解法,展示了如何将看似复杂的组合优化问题转化为高效的数学计算问题。

看来他理解得不错,继续提示

利用下面已有的部分duckdb sql,将上述clickhouse sql计算part2的逻辑翻译为duckdb sql,不做别的

基于已有的DuckDB SQL结构和Part 2的逻辑,我翻译出以下完整代码:

WITHRECURSIVE tAS(SELECT'[.##.] (3) (1,3) (2) (2,3) (0,2) (0,1) {3,5,4,7} [#...#.] (0,2,3,4) (2,3) (0,4) (0,1,2) (1,2,3,4) {7,5,12,7,2} [.###.#] (0,1,2,3,4) (0,3,4) (0,1,2,4,5) (1,2) {10,11,11,5,10,5}'t),bAS(SELECTrow_number()OVER()rn,reverse(substr(b,2,instr(b,']')-2))b1,-- 信号灯字符串,格式.##.,注意要翻转字符串substr(b,instr(b,']')+2,instr(b,'{')-3-instr(b,']'))b2,-- 按钮字符串,格式(3) (1,3) (2) (2,3) (0,2) (0,1)substr(b,instr(b,'{')+1,instr(b,'}')-1-instr(b,'{'))b3,-- 伏特字符串,格式3,5,4,7translate(b1,'#.','10')::BIT::INTb1a,-- 转二进制位再转整数list_reduce([0]||string_split(unnest(string_split(replace(replace(b2,')',''),'(',''),' ')),',')::INT[],lambda x,y :(x+(1<<y)))b2a,-- 按钮转成整数列表string_split(b3,',')::INT[]b3aFROM(SELECTunnest(string_split(t,chr(10)))bFROMt)),dAS(SELECTrn,b1a,array_agg(b2a)a,b3aFROMbGROUPBYall),-- PART 2: 预计算按钮组合模式button_combination_patternsAS(SELECTrnaspuzzle_id,aasbutton_effects,b3aastarget_joltages,cardinality(a)asnum_buttons,cardinality(b3a)asnum_positions,combination_id,bit_count(combination_id)aspattern_cost,-- effect_pattern: 每个位置被按下的次数(SELECTlist_agg((SELECTcount(*)FROMunnest(a)aseffectWHEREbit_test(combination_id,index)ANDbit_test(effect,pos-1))ORDERBYpos)FROMgenerate_series(1,cardinality(b3a))aspos)::INT[]aseffect_pattern,-- parity_pattern: 每个位置的奇偶性 (模2)(SELECTlist_agg((SELECTcount(*)FROMunnest(a)aseffectWHEREbit_test(combination_id,index)ANDbit_test(effect,pos-1))%2ORDERBYpos)FROMgenerate_series(1,cardinality(b3a))aspos)::INT[]asparity_patternFROMdCROSSJOINgenerate_series(0,(1<<cardinality(a))-1)ascombination_idCROSSJOIN(SELECTgenerate_subscripts(a,1)-1asindex)asindexes),-- 按奇偶性分组模式patterns_grouped_by_parityAS(SELECTpuzzle_id,button_effects,num_buttons,num_positions,parity_pattern,list_agg((effect_pattern,pattern_cost))asavailable_patternsFROMbutton_combination_patternsGROUPBYpuzzle_id,button_effects,num_buttons,num_positions,parity_pattern),-- 递归折半算法recursive_halving_solverAS(-- 基础情况: 从目标电压开始SELECTpuzzle_id,button_effects,num_buttons,num_positions,target_joltagesascurrent_goal,0::BIGINTasaccumulated_cost,0asrecursion_depthFROMdJOINbutton_combination_patternsUSING(puzzle_id)GROUPBYpuzzle_id,button_effects,num_buttons,num_positions,target_joltagesUNIONALL-- 递归情况: 应用模式,减去,折半,继续SELECTDISTINCTsolver.puzzle_id,solver.button_effects,solver.num_buttons,solver.num_positions,(SELECTlist_agg((solver.current_goal[pos]-pattern_tuple[1][pos])/2ORDERBYpos)FROMgenerate_series(1,solver.num_positions)aspos)::INT[]ascurrent_goal,solver.accumulated_cost+pattern_tuple[2]::BIGINT*(1<<solver.recursion_depth)asaccumulated_cost,solver.recursion_depth+1asrecursion_depthFROMrecursive_halving_solver solverJOINpatterns_grouped_by_parity patternsONpatterns.puzzle_id=solver.puzzle_idANDpatterns.parity_pattern=(SELECTlist_agg(solver.current_goal[pos]%2ORDERBYpos)FROMgenerate_series(1,solver.num_positions)aspos)CROSSJOINunnest(patterns.available_patterns)aspattern_tupleWHEREsolver.recursion_depth<100ANDEXISTS(SELECT1FROMunnest(solver.current_goal)asvalWHEREval!=0)-- 确保模式不会超出当前目标ANDNOTEXISTS(SELECT1FROMgenerate_series(1,solver.num_positions)asposWHEREpattern_tuple[1][pos]>solver.current_goal[pos])),-- Part 2 最小成本解决方案part2_minimum_solutionsAS(SELECTpuzzle_id,min(accumulated_cost)asminimum_costFROMrecursive_halving_solverWHERENOTEXISTS(SELECT1FROMunnest(current_goal)asvalWHEREval!=0)GROUPBYpuzzle_id)-- 输出Part 2结果SELECT'Part 2'aspart,sum(minimum_cost)assolutionFROMpart2_minimum_solutions;

关键翻译要点:

  1. 数据类型转换:ClickHouse的UInt32转为DuckDB的INTUInt64转为BIGINT

  2. 数组操作

    • arrayMap→ 使用list_agg配合子查询
    • arrayReduce→ 使用count(*)sum()
    • arrayAll→ 使用NOT EXISTSEXISTS
  3. 位运算

    • bitTestbit_test
    • bitCountbit_count
    • pow(2, n)(1 << n)
  4. 递归结构

    • 保持相同的递归折半算法逻辑
    • 使用DuckDB的RECURSIVE CTE语法
  5. 模式匹配

    • 奇偶性约束通过current_goal % 2计算
    • 模式选择基于奇偶性匹配
  6. 成本计算

    • pattern_cost * 2^depth转为pattern_tuple[2] * (1 << depth)

这个翻译保持了原ClickHouse SQL的逻辑完整性,只进行了必要的语法转换。

但以上SQL有错误,主要是以下方面

  1. duckdb没有list_agg函数,应该用list函数代替
  2. duckdb没有bit_test函数,应该用位运算代替
  3. duckdb没有cardinality函数,应该用length函数代替
  4. DuckDB中FROM generate_series(1, solver.num_positions) as pos的写法会把pos当作一个结构,而不是表的列,需要改成... as t(pos)
  5. button_combination_patterns子查询中的indexes应该放到相关子查询,而非主查询
  6. recursive_halving_solver子查询将递归部分的求min改成了DISTINCT, 造成中间结果过多。

我将以上部分都修改后,求解成功。

memory D.read2510p2a.sql┌─────────┬──────────┐ │ part │ solution │ │varchar│ int128 │ ├─────────┼──────────┤ │ Part219810│ └─────────┴──────────┘ RunTime(s):real142.785user348.915288sys73.074016

比同样机器上执行原始ClickHouse SQL慢了36秒。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1197510.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

轻量化OCR方案对比:cv_resnet18在移动端的表现评估

轻量化OCR方案对比&#xff1a;cv_resnet18在移动端的表现评估 1. 引言&#xff1a;为什么需要轻量级OCR&#xff1f; 你有没有遇到过这样的问题&#xff1a;想在手机或者嵌入式设备上做文字识别&#xff0c;结果发现模型太大、跑得太慢&#xff0c;根本没法用&#xff1f;这…

保姆级教程:从0开始玩转Z-Image-Turbo文生图

保姆级教程&#xff1a;从0开始玩转Z-Image-Turbo文生图 你是否也曾在深夜对着空白的设计稿发愁&#xff0c;想要一张极具中国风的汉服少女图&#xff0c;却苦于找不到合适的素材&#xff1f;或者想快速生成高质量配图&#xff0c;但主流AI绘画工具动辄几十步推理、显存爆满、…

游戏文件压缩优化:CHD格式如何让您的游戏库存储效率翻倍

游戏文件压缩优化&#xff1a;CHD格式如何让您的游戏库存储效率翻倍 【免费下载链接】romm A beautiful, powerful, self-hosted rom manager 项目地址: https://gitcode.com/GitHub_Trending/rom/romm 当您的游戏收藏从几十款扩展到数百款时&#xff0c;存储空间告急的…

科哥镜像适合团队协作吗?多用户使用场景探讨

科哥镜像适合团队协作吗&#xff1f;多用户使用场景探讨 1. 镜像核心功能与技术背景 1.1 Emotion2Vec Large 模型能力解析 Emotion2Vec Large 是由阿里达摩院在 ModelScope 平台开源的一款语音情感识别模型&#xff0c;具备强大的跨语种情感分析能力。该模型基于超过 42526 …

如何快速掌握AI光影编辑:5个技巧让照片秒变专业大片

如何快速掌握AI光影编辑&#xff1a;5个技巧让照片秒变专业大片 【免费下载链接】Relight 项目地址: https://ai.gitcode.com/hf_mirrors/dx8152/Relight 还在为照片光影效果不理想而烦恼吗&#xff1f;想要让普通照片拥有电影级别的光影质感&#xff1f;Relight AI光影…

GroundingDINO实战指南:零基础掌握文本驱动目标检测

GroundingDINO实战指南&#xff1a;零基础掌握文本驱动目标检测 【免费下载链接】GroundingDINO 论文 Grounding DINO: 将DINO与基于地面的预训练结合用于开放式目标检测 的官方实现。 项目地址: https://gitcode.com/GitHub_Trending/gr/GroundingDINO 在传统计算机视觉…

开源向量模型怎么选?Qwen3-Embedding-4B实战测评指南

开源向量模型怎么选&#xff1f;Qwen3-Embedding-4B实战测评指南 在构建RAG系统、语义搜索服务或智能知识库时&#xff0c;嵌入模型&#xff08;Embedding Model&#xff09;就像整个系统的“语言翻译官”——它把人类语言转换成机器能理解的数字向量。选错模型&#xff0c;后…

YOLO26性能实测:GPU推理速度提升3倍技巧

YOLO26性能实测&#xff1a;GPU推理速度提升3倍技巧 你有没有遇到过这种情况&#xff1a;模型训练好了&#xff0c;部署到服务器上一跑&#xff0c;推理速度慢得像卡顿的视频&#xff1f;尤其是在工业质检、智能监控这类对实时性要求极高的场景里&#xff0c;哪怕延迟多出50毫…

动手实测Qwen-Image-Layered:图像分解精度让我惊了

动手实测Qwen-Image-Layered&#xff1a;图像分解精度让我惊了 1. 引言&#xff1a;一张图&#xff0c;拆出“可编辑”的未来 你有没有这样的经历&#xff1f;想换个商品背景&#xff0c;结果边缘毛糙&#xff1b;想调个颜色&#xff0c;整张图都变了味&#xff1b;修图五分钟…

SAVPE视觉编码器体验,语义分离更精准

SAVPE视觉编码器体验&#xff0c;语义分离更精准 在开放词汇目标检测与分割领域&#xff0c;YOLOE 的出现重新定义了“实时看见一切”的可能性。它不仅延续了 YOLO 系列的高效推理传统&#xff0c;更通过创新的提示机制实现了对未知类别的强大泛化能力。其中&#xff0c;SAVPE…

Sambert多情感语音合成实战案例:客服系统集成详细步骤

Sambert多情感语音合成实战案例&#xff1a;客服系统集成详细步骤 1. 引言&#xff1a;让客服声音更有温度 你有没有遇到过这样的情况&#xff1f;拨打客服电话时&#xff0c;听到的永远是那种机械、冰冷、毫无感情的声音&#xff0c;听着听着就让人失去耐心。这不仅影响用户…

思源笔记数据同步方案选择指南:从新手到精通

思源笔记数据同步方案选择指南&#xff1a;从新手到精通 【免费下载链接】siyuan A privacy-first, self-hosted, fully open source personal knowledge management software, written in typescript and golang. 项目地址: https://gitcode.com/GitHub_Trending/si/siyuan …

MarkItDown终极指南:一站式解决文档转换难题

MarkItDown终极指南&#xff1a;一站式解决文档转换难题 【免费下载链接】markitdown 将文件和办公文档转换为 Markdown 的 Python 工具 项目地址: https://gitcode.com/GitHub_Trending/ma/markitdown 还在为不同格式的文档转换而烦恼吗&#xff1f;&#x1f914; 无论…

支持实时录音与多格式导出|FunASR WebUI镜像使用手册

支持实时录音与多格式导出&#xff5c;FunASR WebUI镜像使用手册 1. 快速上手&#xff1a;从启动到首次识别 你是不是也经常遇到这样的场景&#xff1f;会议录音要整理成文字、课程音频需要转写笔记&#xff0c;或者想给一段视频加字幕却苦于手动输入太慢。现在&#xff0c;有…

Z-Image-Turbo_UI部署避坑指南:这些错误别再犯了

Z-Image-Turbo_UI部署避坑指南&#xff1a;这些错误别再犯了 你是不是也遇到过这样的情况&#xff1a;兴致勃勃地部署Z-Image-Turbo_UI&#xff0c;结果卡在启动环节&#xff0c;浏览器打不开界面&#xff0c;或者生成图片后找不到文件&#xff1f;别急&#xff0c;这些问题我…

VOSK离线语音识别:开启多语言语音转文字新纪元

VOSK离线语音识别&#xff1a;开启多语言语音转文字新纪元 【免费下载链接】vosk-api vosk-api: Vosk是一个开源的离线语音识别工具包&#xff0c;支持20多种语言和方言的语音识别&#xff0c;适用于各种编程语言&#xff0c;可以用于创建字幕、转录讲座和访谈等。 项目地址:…

终极指南:5分钟零代码搭建企业级进销存系统

终极指南&#xff1a;5分钟零代码搭建企业级进销存系统 【免费下载链接】ioe One-Stop Retail Inventory Solution 项目地址: https://gitcode.com/zhtyyx/ioe 还在为门店管理发愁吗&#xff1f;想找个既好用又不用写代码的进销存系统&#xff1f;今天我要分享的zhtyyx/…

数据可视化实战指南:从原始数据到专业报表的完整解决方案

数据可视化实战指南&#xff1a;从原始数据到专业报表的完整解决方案 【免费下载链接】skills Public repository for Skills 项目地址: https://gitcode.com/GitHub_Trending/skills3/skills 在信息爆炸的时代&#xff0c;数据可视化已成为每个人必备的技能。GitHub_Tr…

WordPress电商网站搭建遇难题?实战经验分享助你轻松跨越障碍

WordPress电商网站搭建遇难题&#xff1f;实战经验分享助你轻松跨越障碍 【免费下载链接】WordPress WordPress, Git-ified. This repository is just a mirror of the WordPress subversion repository. Please do not send pull requests. Submit pull requests to https://g…

YOLO26性能评测:不同GPU算力下推理速度全面对比

YOLO26性能评测&#xff1a;不同GPU算力下推理速度全面对比 你是否也在为选择合适的GPU部署YOLO系列模型而纠结&#xff1f;最近发布的YOLO26凭借其在精度与速度上的新平衡&#xff0c;迅速成为目标检测领域的热门选手。但问题来了——它到底在哪些硬件上能跑得动&#xff1f;…