将利用30行X算法求解数独的python程序转成DuckDB自定义函数并比较性能

利用DeepSeek辅助改造30行DLX求解数独python程序调用python函数的不同方法效率对比测试 的代码整合在一起

只要把代码粘贴到一个文件,比如duckudf.py,然后增加如下语句

python 复制代码
duckdb.create_function("solve_single_sudoku", solve_single_sudoku)  #, [VARCHAR, [[VARCHAR]], BIGINT)

s="""
select solve_single_sudoku('000080304250100090000003000040020030006090800700310009000000080602000053004002900');
"""
t=time.time();print(duckdb.sql(s));print( time.time()-t)

并修改以下函数的定义,添加参数和返回值类型

python 复制代码
def solve_single_sudoku(sudoku_str: str) -> str:

并删除原有的自定义函数及全局的代码块

python 复制代码
if __name__ == "__main__":
    # 运行文档测试
    import doctest
    doctest.testmod()
    
    # 运行主函数
    main()

然后用如下命令行测试

复制代码
C:\d>timer64 python duckudf.py
1
┌──────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ solve_single_sudoku('000080304250100090000003000040020030006090800700310009000000080602000053004002900') │
│                                                 varchar                                                  │
├──────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ 167589324253174698498263175941827536326495817785316249579631482612948753834752961                        │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────┘

0.25064992904663086


Kernel  Time =     0.156 =   35%
User    Time =     0.234 =   52%
Process Time =     0.390 =   87%    Virtual  Memory =    541 MB
Global  Time =     0.445 =  100%    Physical Memory =     90 MB

C:\d>timer64 python pydlx4path.txt
[[0, 0, 0, 0, 8, 0, 3, 0, 4], [2, 5, 0, 1, 0, 0, 0, 9, 0], [0, 0, 0, 0, 0, 3, 0, 0, 0], [0, 4, 0, 0, 2, 0, 0, 3, 0], [0, 0, 6, 0, 9, 0, 8, 0, 0], [7, 0, 0, 3, 1, 0, 0, 0, 9], [0, 0, 0, 0, 0, 0, 0, 8, 0], [6, 0, 2, 0, 0, 0, 0, 5, 3], [0, 0, 4, 0, 0, 2, 9, 0, 0]]
[[1, 6, 7, 5, 8, 9, 3, 2, 4], [2, 5, 3, 1, 7, 4, 6, 9, 8], [4, 9, 8, 2, 6, 3, 1, 7, 5], [9, 4, 1, 8, 2, 7, 5, 3, 6], [3, 2, 6, 4, 9, 5, 8, 1, 7], [7, 8, 5, 3, 1, 6, 2, 4, 9], [5, 7, 9, 6, 3, 1, 4, 8, 2], [6, 1, 2, 9, 4, 8, 7, 5, 3], [8, 3, 4, 7, 5, 2, 9, 6, 1]]


Kernel  Time =     0.000 =    0%
User    Time =     0.031 =   87%
Process Time =     0.031 =   87%    Virtual  Memory =      7 MB
Global  Time =     0.035 =  100%    Physical Memory =     12 MB

C:\d>

第一个命令行是调用duckdb执行自定义函数,第二个是直接执行python程序。可见调用duckdb执行自定义函数的用时是后者15倍,内存占用也放大了很多倍。

相关推荐
工业互联网专业19 小时前
基于Django的智能水果销售系统设计
数据库·vue.js·django·毕业设计·源码·课程设计
猫头鹰源码(同名B站)19 小时前
基于django+vue的时尚穿搭社区(商城)(前后端分离)
前端·javascript·vue.js·后端·python·django
QQ_196328847519 小时前
python高校失物招领平台38tp1_django Flask vue pycharm项目
python·django·flask
N***778819 小时前
【玩转全栈】----Django模板语法、请求与响应
数据库·python·django
qq_225891746619 小时前
基于Python+Django豆瓣图书数据可视化分析推荐系统 可视化 协同过滤算法 情感分析 爬虫
爬虫·python·算法·信息可视化·数据分析·django
程序员spped19 小时前
分享一套非常不错的基于Python的Django图书馆(自习室)座位预约管理系统
开发语言·python·座位预约
QQ_18808380019 小时前
基于Python和django的贫困地区儿童在线帮扶系统
开发语言·python·django
计算机毕业设计开发19 小时前
django高校公寓管理系统--附源码64226
java·c++·spring boot·python·spring cloud·django·php
one____dream20 小时前
【算法】移除链表元素与反转链表
数据结构·python·算法·链表
memmolo20 小时前
【3D测量中的术语:系统误差、随机误差、精密度、准确度】
算法·计算机视觉·3d