引子
“话说天下大势,分久必合,合久必分。” –《三国演义》罗贯中
很少有人能质疑算法(Algorithm)在现代 IT 职业中的重要地位。正是有了奇妙设计的算法,计算机才能以最小的资源和最大的功率来运行各式各样的软件程序。因而,算法十分重要,以至于不少 IT 企业在招聘工程师时对算法要求十分高。回忆一下你参加过的技能面试被要求手写快速排序的算法题吧。不少人会认为算法是建瓴高屋的东西,但是笔者却认为算法以及数据结构发生的功率增益是自然构成的,这个能够从大自然中找到答案。
从雪花开始
咱们都知道,一片雪花很漂亮,除了它明亮的外表以外,令人惊叹的还有其造型:全体像雕刻过的六边形,每个角扩大来看又是新的类似雪花的子六边形。这种自类似(Self Similarity)不断递归(Recursion)的结构有个专业术语,分形(Fractal)。分形在大自然中随处可见,例如树的根系和枝叶、肺部毛细血管、天然构成的海岸线,不计其数。甚至连一块摔碎的玻璃,也能找到分形的影子。
那么,为什么?分形为什么普遍存在于大自然?是上帝的特意组织还是奇妙的数学规则?学术界普遍认为是后者。依据热力学原理,雪花是在水蒸气忽然凝结时构成的,而雪花状的结构能让自由活动的水分子在短时间里在最小的空间中释放最大的能量,然后构成安稳的晶体结构;依据流体力学,肺部的树状毛细血管结构能让呼吸进来的氧分子最大程度的被红细胞吸收。因而,分形的结构是因功率原因而发生的。
分治算法
现在说回分治算法。了解算法的同学应该对分治法不陌生,例如快速排序(Quick Sort)便是典型的分治算法。而其之所以快,便是因为递归的将一个全体分红最小颗粒度的巨细比较再兼并回来,即自类似递归操作,跟分形原理千篇一律。再说数据库中的平衡树(B-tree)索引,也使用到了分形原理:将无序的数据经过树状结构一层一层的结构下去,构成一个数据索引,能让检索变得更快,而优化平衡树参数的过程便是在优化检索功率。平时学习复杂度分析中经常看到的 LogN 便是来自于分形结构发生的等差数列求和。读者能够试着在笔记本上推演一下,运用初中数学知识就能得到最优的参数方程。
国际是分形的?
分形理论是一个较新的学科,现代许多科学研究都将其与复杂体系理论(The Theory of Complex Systems)联络在一起。许多复杂的体系,其实都由一些十分简单的物质或规则构成。例如,逢山开路、遇水架桥的蚁群很像才智生物体,靠的仅仅一些信息素;而生命全来自于细胞,细胞来自于 DNA,DNA 来自于更小的微观物质(分子、质子、中子等)。这些简单的物理模型套用起来,就构成了人间万物。所谓古人的 “大道至简”、“一花一国际,一叶一菩提”,说的正是这个道理。
虽然分形理论能解释大自然中的许多结构,但它并不完美。因为大自然中的自类似并不是彻底同等,而是在递归的过程有一些不确定性的变化,发生了多样性。因而,咱们在惊叹于强壮的分形理论时,也需求意识到它并不是完美的。国际上许多东西还需求咱们继续探索。
社区
如果您对笔者的文章感兴趣,能够加笔者微信 tikazyq1 并注明 “码之道”,笔者会将你拉入 “码之道” 沟通群。
本篇文章英文版同步发布在 dev.to,技能分享无国界,欢迎大佬们指点。