快速执行慢速程序可能会导致喜悦和沮丧。通常,您能做的最好的事情是做一个低级技巧,使程序速度提高一倍甚至四倍。例如,许多读者可能已经使用位级操作实现了约翰·康威(John Conway)的“生命游戏”,从而显着提高了速度。但是有时,将几个想法结合在一起的全新方法会带来惊人的改进。William Gosper发明了一种简单的算法“ HashLife”(“利用大细胞空间中的规律性 ”,Physica 10D,1984年),结合了四叉树和备忘录,为生活游戏带来了天文数字化的加速。在本文中,我将最简单的Life实现演变为该算法,解释了其工作原理,
马丁·加德纳(Martin Gardner)在《科学美国人》上发表的关于康威人生游戏的专栏文章从1970年10月开始,启发了整整一代的程序员。二维生命形式的惊人世界来自于一些易于编程和显示的简单规则。生命游戏(图1)是在无限二维网格上进行的单人纸牌游戏。网格中的每个单元格都处于活动状态(1,用黑色圆圈表示)或不活动。每个有两个或三个活动邻居(八个相邻)中的每个活动单元都保持存活,否则会死亡。恰好三个活着的邻居所包围的任何死细胞都是一个新生细胞,并且会被下一代所生。所有规则都同时应用于所有单元。这些规则导致稳定和振荡的生命形式—滑翔机和宇宙飞船在整个宇宙中运输,生命形式无约束地生长或完全消失。
Life的最简单实现使用一对二维数组,它们代表宇宙有限部分的状态。在每一代中,都会对旧阵列中某个单元的邻居进行计数,以计算新阵列中该单元的状态,然后交换阵列并更新屏幕。这种方法有许多令人沮丧的方面:宇宙越大,程序运行越慢;但是,较小的宇宙会限制模式的增长,从而人为地限制了模式。我对基本算法的第
时空压缩算法-动力节点
最新推荐文章于 2022-07-24 08:13:52 发布