揭秘你处理数据的底层逻辑,详解公式引擎计算(二)
上篇中我们介绍了计算公式引擎的计算原理,本期我们继续带着大家了解在Excel表格中公式引擎的实现原理。背景
在上节中解决了基本运算的逻辑之后,在一些实际业务场景中,公式计算并不是单一公式进行的独立运算。我们经常需要将一个很大的运算分解成前后依赖的小运算;同时这些单元格之间的计算会出现很多相互依赖,计算顺序也是要考虑的一个关键问题,我们需要将一系列具有先后顺序的同类运算管理起来依次执行。
为了实现这种计算关系之间的管理,出现了计算链,用以对公式之间的依赖和先后顺序进行管理,处理在电子表单中错综复杂的依赖。涉及到图的处理,脏值计算等内容。接下来我们将从图计算出发,介绍不同图的计算、按需计算和脏值处理的问题,更加深层次的了解Excel表格计算中计算链相关问题。计算链
让我们先从两个表格计算问题出发。第一种简单情况:
在这一串计算公式之中,当C1赋值为1时,A1的结果为3。但此时如果修改C1的值,C110,此时B1的内容还没有修改,A1依旧是3,然后B110111,这里就会发现A1内容计算出错。第二种更加复杂一些的情况:
我们用图的结点表示单元格的计算内容,箭头代表依赖关系。入度为零的节点,完全不依赖其他节点内容,所以计算的顺序应该是从不依赖其他节点的节点内容开始。单元格A依赖F、E,D依赖C、B,C、B又分别依赖F、E,唯二不依赖其他节点的内容是E、F。
这样就得到了一个稳定正确的计算顺序,这个顺序被称之为计算链。在这个例子中计算链是:F,C,E,A,D,B。有向无环图和有向有环图的计算
在一张图中,如果从一个节点出发,最后能回到这个节点,我们称之为有向有环图,反之被称作有向无环图。
左图中不论从任意一个节点出发都不能再回到该节点,所以左图是有向无环图。
右图中A点可以出发后回到A节点,所以右图是有向有环图。
我们将计算节点和计算节点之间的关系拆解成有向图后,就可以使用计算有向图的标准方法得到一个可靠的计算链。
1、有向无环图的计算
对于每一个节点存在入度和初度的概念,入度:多少箭头指向当前节点,例如对于A节点,入度为1;出度:当前箭头有多箭头指出,例如对于B节点,入度为2。
在对有向无环图进行计算的时候,就利用了图中入度作为优先级排序,每次运算入度为0的节点,然后移除。
以上图为例,完整的计算过程如下:
1。初始化,统计入度:A:1B:2C:1D:2E:0F:0
2。计算E节点,更新入度:A:1B:2C:0D:2F:0
3。计算F节点,更新入度:A:1B:2C:0D:1
4。计算C节点,更新入度:A:1B:1D:0
5。计算D节点,更新入度:A:1B:0
6。计算B节点,更新入度:A:0
7。计算A节点,计算结束有向有环图的计算
2、有向有环图的计算
解决了有向无环图的计算问题,如果此时把上图中BC之间的箭头反向调换,情况就会变的截然不同起来。此时BCD之间组成了一个环。
这时候依旧进行计算:
1。初始化,统计入度:A:1B:1C:2D:2E:0F:0
2。计算E节点,更新入度:A:1B:1C:1D:2F:0
3。计算F节点,更新入度:A:1B:1C:1D:1
4。没有入度为0的节点,开始迭代计算
(迭代计算:把上一步的计算结果代入这一步的运算中去,经过多步这样的计算,可以得出一个更为接近的结果。)按需计算
解决这种互相依赖的复杂单元格的运算时,除了图计算还可以采用按需计算的方法。在这里使用到的是calcOnDemand这个函数。这个函数的核心工作原理是:压栈并且计算所需要的节点内容,该节点可以是任意内容。
以该图内容来说明这一计算的过程:这里选择A作为我们需要的节点压栈并计算A,需要计算B的结果压栈并计算B,需要计算C的结果压栈并计算C,需要计算E的结果压栈并计算E,E计算完毕后出栈计算C,C计算完毕后出栈计算B,还需要计算D的结果压栈并计算D,拿到C的结果,还需要F的结果压栈并计算F,F计算完毕后出栈计算D,D计算完毕后出栈计算B,B计算完毕后出栈计算A,A计算完毕后出栈栈空,计算完毕
这个例子取了最复杂的A作为需求节点,如果需要D节点,变为D节点入栈,C节点入栈,E节点入栈,计算后出栈,C节点计算后出栈,F节点入栈计算后出栈,D节点入栈,这样就得到了正确的D的值,这种运算方式只计算需要的内容。图计算VS按需计算
在这里对图计算和按需计算做一个对别,这两种算法在不同情况下效率不同。
左图中是一个从上到下的累加,使用按需计算计算的很顺畅,从上向下按顺序计算即可,堆栈中存在的待计算元素不超过两个,按需计算比图的计算更加快。
右图中是是一个逆向计算,上一行单元格的内容依赖下一行单元格的内容,按需计算需要计算1000步,这时按需计算会比图计算慢很多。
总体来说,图计算比按需计算更加稳定,而按需计算在不同情况下会有不同的表现,实际使用中我们可以根据具体的使用场景采用不同的计算策略。脏值计算
回到我们刚刚讲过的图中:
在这个图中,如果此时修改了某节点的值,这个时候就需要根据传播途径,标记所有需要重算的节点。
举例:修改了E的内容根据传播依次将ECBDA标记删去未标记的节点开始计算剩余的节点
标记完成之后,我们就不再需要关注未标记节点,计算完成。
整个过程如下图所示:
拓展:关于运算内容几个问题
已经介绍完计算链的全部内容,为了帮助大家更好地理解,这里有几个思考问题:示例中的图计算,可否可改用按需计算?可不可以先计算E的值,再标记并重算CBDA?根据传播途径标记需要重算节点的优势?
解答部分:该图可以进行按需计算,因为按需计算和图计算都可以对图内容进行正确计算。该图中不可以先算E,然后重标CBDA,因为一旦我们一但先计算E,此时C依旧依赖E的内容,而C又不能先于E计算,这时ABCD节点数值都会变得不可靠,这个计算引用链就会被完全破坏。脏数据的处理中只对传播路径上的节点进行处理,在实际应用场景下,几百个单元格数据处理使,可以大大减少运算的内容。总结
所有的单元格计算内容就全部为大家介绍完毕了,我们一起回顾一下本章节内容:计算链就是将一个个单元格计算串联起来,分为普通计算和迭代计算。而这里我们介绍了两种不同的计算方式图计算和按需计算,在面对不同情需要选择采用不同的计算策略。计算链在整个计算过程中不像单元格的计算那么明显,但是却比单元格的计算更加复杂。
在了解了计算公式如何进行词法、语法分析对公式进行快速运算,计算链是如何进行多单元格大数据量的处理,接下来将继续为大家介绍异步函数在前后算计算中的花式用法。
看到这里了点个关注吧后续本葡萄也会为大家带来更多严肃或有趣的内容。
如果想了解更多相关内容,欢迎关注微信号葡萄城社区。
你会选择关闭互联网算法推荐服务吗?上网搜索过一次眼病资料后,每天该网站都向你推荐眼科医院的消息,这样的遭遇你遇到过么?互联网公司的算法推荐服务为网民获取信息提供了便利,但随之而来的各种分类垃圾信息也让人头疼。……
TCL重返中国手机市场!雷鸟FF1手机发布,售价2499元起对于TCL,大家的第一印象多数都是家电、电视的品牌,但其实TCL还是一个手机厂商,同时还是屏幕供应商华星光电的母公司。其中在手机市场中,TCL曾经拥有阿尔卡特和黑莓两大品牌,不……
荣耀MagicBook142021锐龙版锐龙低压芯是轻薄本的时间一晃眼便已来到八月中旬,美妙的暑期余额已经严重不足。对游戏情有独钟的大学新生们,想必已经早早地备置好了游戏本,且等开学来个寝室多排。然而对于不少热爱学习的小伙伴们,抑或是像……
X99双路主板性能初步评测话不多说,先上配置!配置详情再来一波鲁大师的跑分,CPU跑分55万,很多人好奇我弄这么个配置干啥用,下面我给大家讲一下:第一,玩游戏,当然我只喜欢玩策略……
iPhone13系列要来了?大家好,我是小文。iPhone12系列发布至今将近一年时间,按照苹果往常的发布习惯是一年发布一个系列的新机,那么今年的iPhone13系列的发布也会在不久后与我们相见,在iPh……
不是大号手环!OPPOWatch2用实力证明身份,软件应用一在如今万物互联的生态发展趋势下,各家厂商的智能设备也逐渐丰富起来。而作为智能穿戴设备的先锋成员:智能手表,当然不会掉队。当初的智能手表上,在功能上与智能手环基本上都是大同小异,……
感谢联通是什么梗?为什么说她改变了抖音的生态?中国联通是我国电信运营巨头之一,而随着短视频等新兴产业的发展,其也选择入驻了抖音,以此来提高自己的业务。2019年,中国联通正式入驻了抖音,经过长达7个月的运营,中国联通……
戴森用发明家的科研精神对待头发飞翘问题2021年美发造型行业消费市场有超越美妆的面子工程的趋势,成为个人护理方面最关注的领域。越来越多的消费者,开始把目光聚焦在发型DIY和头发养护方面的知识上。一头自然、顺滑有光泽……
黎巴嫩电费暴涨!居民一个月工资全交了电费疫情危机还未解除,一场能源危机却已接踵而至。据央视财经报道,此前,因燃料短缺,黎巴嫩国家电网在8日和9日一度暂停运行,黎巴嫩陷入全国性停电。据悉,当天晚间,黎巴嫩首……
法拉利全新旗舰跑车首发瞬间被秒空作为法拉利新一代旗舰跑车,812superfast不仅完美继承了F12修长的车身比例,动力上也是无可挑剔。日前,法拉利正式发布了基于812Superfast打造的终极性能……
2020全球智博会思必驰携硬核黑科技亮相8月14日16日,第三届全球人工智能产品应用博览会(AIExpo2020)在苏州国际博览中心举行。这场高规格、专业化、国际化的人工智能行业盛会,吸引了上万名专业观众前来围观。……
新能源汽车充电桩都有哪几种类型,有什么区别?新能源车的接受程度越来越高了,新能源车是越来越多了,新能源电动汽车在一定程度上降低了燃油的消耗,而且使用电动汽车成本更低,在充电桩上面充满电能够跑400公里左右,仅仅需要40元……