夜莺与神明[破鏡重圓] 第73节(5 / 7)
程明笃作为队长,更是三人中最为平静的,他靠在椅背上,闭上了眼睛,手指在桌面上,无意识地、有节奏地轻轻敲击着。
那张清隽的脸上,没有丝毫的紧张,只有一种近乎冷酷的、绝对的专注。他仿佛已经抽离了这个嘈杂的赛场,进入了一个只有纯粹的算法世界。
突然,程明笃敲击的手指停住了。他睁开眼,那双总是深邃沉静的眼眸里,在那一瞬间,闪过了一道洞悉一切的、令人心悸的璀璨光芒。
他直接拿起白板笔,在旁边的小白板上,以一种快得惊人的速度,画出了一系列辅助线和几何模型,构建了一个所有人都没想到的、全新的坐标系。
“我们别再纠结‘面在不在圆里’,”他的笔尖在白板上飞舞,“问题的核心,是‘最远点’。我们要做一张‘查询地图’,把整个平面预先分割,而不是等查询来了再去计算。”
他首先运用“最远点voronoi图”的思想,为10万个“居住区”,各自生成了一张“谁离我最远”的答案地图。
他将这10万张地图叠加在一起,形成了一张包含了天文数字般信息的、极其复杂的“查询地图”。
运用“平面点定位算法”,为这张“查询地图”建立了一个查询引擎。
最后,当题目给出m颗卫星的坐标时,他们要做的,只是把每一颗卫星的坐标,一个一个地输入事先建立的“查询地图”里。
系统会瞬间告诉他,对于这颗卫星,1号居住区最远点是a,2号是b,3号是c……他们只需进行简单的距离判断,就能得出最终答案。
程明笃在白板上,用短短几十秒,清晰地勾勒出了这个堪称天马行空的、宏伟的算法框架。
他那两位同样是顶尖天才的队友,在最初的震惊过后,立刻领会了这个思路的精妙之处。
但紧接着,那个负责编码的队友,立刻指出了这个计划中最致命的、也是最现实的难题。
“思路很巧妙,但这个实现难度太高了!”他的神情凝重起来,“光是构建voronoi图时,计算那些由垂直平分线构成的交点,就会涉及大量的浮点数运算。double的精度误差是会累积的。只要有一个交点因为精度问题偏离了哪怕只偏离10^7,整个数据结构的拓扑关系就全错了,后面的所有查询,都会是垃圾结果。这道题的测试数据,一定是用最刁钻的方式,卡着我们精度的。”
这就是计算几何竞赛中的“魔鬼”——精度问题。它像一个幽灵,能让你明明拥有了全世界最正确的思路,却仍然写不出结果可接受的代码。
↑返回顶部↑
那张清隽的脸上,没有丝毫的紧张,只有一种近乎冷酷的、绝对的专注。他仿佛已经抽离了这个嘈杂的赛场,进入了一个只有纯粹的算法世界。
突然,程明笃敲击的手指停住了。他睁开眼,那双总是深邃沉静的眼眸里,在那一瞬间,闪过了一道洞悉一切的、令人心悸的璀璨光芒。
他直接拿起白板笔,在旁边的小白板上,以一种快得惊人的速度,画出了一系列辅助线和几何模型,构建了一个所有人都没想到的、全新的坐标系。
“我们别再纠结‘面在不在圆里’,”他的笔尖在白板上飞舞,“问题的核心,是‘最远点’。我们要做一张‘查询地图’,把整个平面预先分割,而不是等查询来了再去计算。”
他首先运用“最远点voronoi图”的思想,为10万个“居住区”,各自生成了一张“谁离我最远”的答案地图。
他将这10万张地图叠加在一起,形成了一张包含了天文数字般信息的、极其复杂的“查询地图”。
运用“平面点定位算法”,为这张“查询地图”建立了一个查询引擎。
最后,当题目给出m颗卫星的坐标时,他们要做的,只是把每一颗卫星的坐标,一个一个地输入事先建立的“查询地图”里。
系统会瞬间告诉他,对于这颗卫星,1号居住区最远点是a,2号是b,3号是c……他们只需进行简单的距离判断,就能得出最终答案。
程明笃在白板上,用短短几十秒,清晰地勾勒出了这个堪称天马行空的、宏伟的算法框架。
他那两位同样是顶尖天才的队友,在最初的震惊过后,立刻领会了这个思路的精妙之处。
但紧接着,那个负责编码的队友,立刻指出了这个计划中最致命的、也是最现实的难题。
“思路很巧妙,但这个实现难度太高了!”他的神情凝重起来,“光是构建voronoi图时,计算那些由垂直平分线构成的交点,就会涉及大量的浮点数运算。double的精度误差是会累积的。只要有一个交点因为精度问题偏离了哪怕只偏离10^7,整个数据结构的拓扑关系就全错了,后面的所有查询,都会是垃圾结果。这道题的测试数据,一定是用最刁钻的方式,卡着我们精度的。”
这就是计算几何竞赛中的“魔鬼”——精度问题。它像一个幽灵,能让你明明拥有了全世界最正确的思路,却仍然写不出结果可接受的代码。
↑返回顶部↑