第5章 Max函数与北宋漕运(1/2)

极值定策:max函数与北宋漕运的算力博弈

一、汴河困局

熙宁六年,初夏的汴河碧波荡漾,粮船首尾相接,如同一条巨龙蜿蜒向东。可汴河岸边的转运司衙署内,转运使韩绛却愁眉不展,案几上摊开的《漕运粮草册》墨迹淋漓,记录着近半年来各州府经汴河转运的粮草数据,密密麻麻如繁星点点。

“韩大人,江南东路漕船已到渡口,可粮仓只剩三千石库容,如何收纳?”判官李嵩急步进来,声音带着焦灼,“更要命的是,淮南西路、两浙路的漕船三日后也将抵达,按往年估算,三路粮草合计不下五万石,可咱们下辖的七座粮仓,最大库容也才一万五千石,这可如何是好?”

韩绛揉了揉发胀的太阳穴,指尖划过竹简上的数字:“各州府上报的粮草数额杂乱无章,江南东路五千石,淮南西路八千石,两浙路一万石……还有荆湖北路、京东东路的漕船在路上,谁也说不清哪一路的粮草最多,哪座粮仓能容纳峰值运力。”

北宋立国以来,汴河便是帝国的“生命线”,每年从江南、淮南等地转运的粮草、物资达数百万石,支撑着汴京百万人口的生计与朝廷的运转。可漕运调度却始终依赖“经验估算”——转运司的算吏们靠算盘核算各州府粮草数额,再凭记忆分配粮仓,往往出现“大船抵港,粮仓已满”或“粮仓空置,漕船滞留”的乱象。前一年,两浙路漕船因无仓可存,粮草在渡口露天堆放,遭遇暴雨霉变,损失达三千石,韩绛因此被朝廷问责。

“不能再靠猜了!”韩绛猛地拍案,“必须找到一个法子,快速算出各路漕船的最大粮草数额,再匹配最大库容的粮仓,才能避免混乱。”

李嵩面露难色:“可各路粮草数额每日都在变化,算吏们逐笔核算,至少需要三日,等算出结果,漕船都已到港了。”

就在此时,刚从崇文院调来的算学博士沈括推门而入,他手中拿着一卷图纸,眼神明亮:“韩大人,李判官,晚辈有一策,可解此困局。”

沈括是北宋顶尖的科学家与算学家,精通天文、历法、算学,此前因主持重修《奉元历》声名鹊起。他将图纸铺在案几上,上面画着一套复杂的算具与符号:“晚辈研究算学多年,发现天下万事,皆有‘极值’可循。如漕运粮草,虽数额繁杂,但必有一路为最多;粮仓库容,虽大小不一,亦必有一座为最大。若能造出一套‘取极算具’,专门从海量数据中提取最大值,便可瞬间定策。”

韩绛俯身细看,图纸上的算具由齿轮、铜轴与刻有数字的木牌组成,旁边标注着“极数”“汇数”等符号。沈括指着图纸解释:“此算具核心在于‘汇数取极’,将各路粮草数额、各仓库容数据分别输入,算具可自动比对,输出最大值。晚辈将这套算法命名为‘极函数’(原型为max函数),取‘众数之中,取其极者’之意。”

韩绛眼中精光一闪:“沈博士,若真能如此,漕运调度便有了准绳!本官命你牵头,联合转运司的算吏与将作监的工匠,即刻研制这套‘取极算具’。所需人力物力,转运司一概应允,务必在半月内完成!”

沈括领旨谢恩,心中却深知这绝非易事。他需要将抽象的“取极”逻辑,转化为可运转的机械结构,让算具能精准识别并提取最大值——这与后世excel中max函数“扫描指定区域,返回最大数值”的核心逻辑,有着异曲同工之妙。

二、取极初成

研制工坊设在转运司后院,院内摆满了铜料、木材、算筹与竹简。沈括将核心难题拆解为“数据输入”“比对筛选”“极值输出”三步,召集了十余名算吏与工匠,分工协作。

数据输入是第一步。沈括设计了“汇数轴”,由十根刻有0至9数字的铜制转轴组成,每根转轴代表一位数,可组合出从0到的数值,足以覆盖北宋单次漕运的最大粮草数额(不超过五万石)。算吏只需转动转轴,便可将各路粮草数额、各仓库容数据输入算具。

比对筛选是核心。沈括借鉴了《九章算术》中的“方程术”与齿轮传动原理,打造了“比对齿轮组”。每组齿轮对应一个数据,齿轮的齿数与数据大小成正比,如数值“五千”对应五十齿,“一万”对应一百齿。当所有数据输入后,转动算具的曲柄,齿轮组会相互咬合,齿数最多的齿轮会带动一根“极轴”突出,其余齿轮则被卡住——这正是max函数“逐一比对、锁定最大值”的机械实现。

极致输出是最后一步。沈括在算具正面设置了“极数窗”,内嵌刻有数字的木牌,当“极轴”突出时,会带动对应数字的木牌弹出,清晰显示最大值。同时,他还设计了“双极并行”结构,可同时输入两组数据(如粮草数额与粮仓库容),分别输出最大值,方便快速匹配。

研制过程并非一帆风顺。最初的比对齿轮组因齿数设计不合理,常出现“数值相近时无法区分”的问题。一次,算吏输入江南东路五千石与淮南西路五千五百石两组数据,齿轮组竟同时弹出两个数值,导致筛选失败。沈括反复试验,将齿轮齿数改为“十进制递进”,每增加一个单位数值,齿数增加两齿,通过齿数差扩大数值区分度,终于解决了这一难题。

又过了七日,算具的机械结构基本成型,但新的问题出现了:当输入数据超过十组时,齿轮组会相互缠绕,无法正常运转。沈括苦思冥想,一日在汴河边观察漕船编队时突发灵感:“漕船编队,首尾相接,却各有航道。算具比对,亦可分路并行。”

他对算具进行了改良,将“比对齿轮组”分为两组,每组可处理十组数据,再增设一套“次级比对轴”,先分别筛选两组中的最大值,最后再比对两组极值,输出最终结果。这一设计,如同max函数处理大规模数据时的“分段扫描、逐级比对”,大幅提升了算具的处理能力。

半月期满,第一台“取计算机”终于研制成功。这台算具高约三尺,宽二尺,通体由铜木打造,正面设有两个“极数窗”,分别标注“粮极”“仓极”,侧面是十根“汇数轴”,整体造型古朴而精巧。

沈括在转运司衙署组织演示,韩绛、李嵩与转运司的算吏们亲临观看。算吏们依次输入七路漕运粮草数额:江南东路五千石、淮南西路八千石、两浙路一万石、荆湖北路七千五百石、京东东路六千石、福建路四千石、广南东路三千五百石。沈括摇动曲柄,算具内齿轮转动的声音清脆悦耳,片刻后,“粮极”窗口弹出木牌,上面刻着“一万石”;随后,算吏们输入七座粮仓库容:东仓八千石、西仓一万五千石、南仓七千石、北仓一万二千石、中仓九千石、左仓六千五百石、右仓八千五百石,“仓极”窗口随即弹出“一万五千石”。

“精准无误!”负责核对的算吏惊呼道,“两浙路粮草确实最多,西仓库容果然最大!以往我们核算这些数据,需三名算吏耗时两个时辰,如今不过一炷香的时间!”

韩绛大喜过望,当即下令:“将‘取极算具’安放在转运司正厅,命名为‘漕运定策台’。即日起,各路漕船上报粮草数额后,即刻输入算具,提取最大值,优先调配最大库容粮仓接收!”

三、汴河通流

“取极算具”的启用,立刻给汴河漕运带来了翻天覆地的变化。

三日后,淮南西路、两浙路、江南东路的漕船如期抵达汴河渡口。按以往流程,算吏们需先核算三路粮草总数,再分摊到各粮仓,往往耗时半日,导致漕船在渡口排队等候。如今,算吏们将三路粮草数额输入“取极算具”:淮南西路八千五百石、两浙路一万一千石、江南东路五千五百石,“粮极”窗口瞬间弹出“一万一千石”。

“两浙路粮草最多,调往西仓!”韩绛当即下令。西仓库容一万五千石,足以容纳两浙路的粮草,剩余库容还能接收淮南西路的部分粮草。漕船按指令分流,两浙路漕船直接驶向西仓,淮南西路漕船驶向北仓,江南东路漕船驶向中仓,整个过程井然有序,无一艘漕船滞留。

本章未完,点击下一页继续阅读。