内容提要
本文介绍了如何使用SQL解决2022年第16天的挑战“Probscidea Volcanium”的第二部分,即如何在26分钟内找到人和大象同时打开阀门的最佳路径,以释放最大的压力。作者使用了递归函数、数组和CTEs等Postgres / SQL项,创建了一个名为pathscore的表来存储所有可能的路径,并使用数组来比较它们是否重叠。最终,通过查询表中不重叠的路径并将它们的成本相加,找到了最高的得分。最终答案为2223。
关键要点
-
本文介绍了如何使用SQL解决2022年第16天的挑战“Probscidea Volcanium”的第二部分。
-
目标是在26分钟内找到人和大象同时打开阀门的最佳路径,以释放最大的压力。
-
使用了递归函数、数组和CTEs等Postgres/SQL项,创建了一个名为pathscore的表来存储所有可能的路径。
-
通过查询表中不重叠的路径并将它们的成本相加,找到了最高的得分,最终答案为2223。
-
挑战涉及在火山中与大象一起找到最佳的压力释放路径,类似于旅行商问题(TSP)。
-
使用file_fdw扩展读取文本文件,CTEs保持查询可读性,使用plpgsql函数和一些upserts。
-
解析输入文件并创建tubes表,存储阀门之间的连接和流量信息。
-
使用lesspaths函数找到阀门之间的最短路径,并删除无效路径。
-
walkcost函数计算从一个阀门到另一个阀门的最佳压力释放路径。
-
第二部分引入了大象的参与,要求找到两条不重叠的路径以最大化压力释放。
-
创建pathscore表存储所有路径及其得分,并使用walk_with_an_elephant函数填充该表。
-
通过比较路径找到两个最高得分的非交叉路径,最终得分为2223。