本发明专利技术实施例公开了一种计算网格间引用关系的方法及装置,该方法为:将扩展后的网格模板中尚未计算出引用关系的单元格保存在预先建立源存储单元并记录数量;当源存储单元中的单元格数量不为0时,计算源存储单元内的单元格的引用关系,将无法计算的单元格转存至预先建立的目的存储单元;当目的存储单元中的单元格数量不为0时,如果目的存储单元与源存储单元中的单元格数量相同时,记录一次相同;否则,将目的存储单元和源存储单元互换角色,循环执行上述操作;当源存储单元或目的存储单元内的单元格数量为0,或者两者单元格的数量相同的次数为预定的次数时,结束流程。该方法能够实现准确快速的计算网格间单元格引用关系。
【技术实现步骤摘要】
本专利技术涉及计算机信息处理领域,尤其涉及一种计算网格间引用关系的方法及装置。
技术介绍
网格的数据填充方法可以分为两种模型。 一种是静态模型。这种模型的单元格 (指行列网格线交叉形成的最小单位矩形区域)数量是固定的,即网格的行列值是固定的, 直接将数据填入网格对应位置。另一种是动态模型。这种模型的单元格数量是动态变化 的,在设计网格模板时填入的是数据的引用,运行时根据数据来动态扩展单元格,生成最终 的结果网格。 在网格计算中,经常存在单元格之间相互引用的关系。对于单元格,只有将其引用 到的所有单元格值都计算出之后,才能计算本单元格的值。 对于静态模型,单元格之间的引用关系是绝对的,例如,单元格A1引用了区域 B6-D8,即引用了第6行第2列到第8行第4列这个区域内的所有9个单元格的值。可以使 用高效的排序算法,将所有单元格根据引用关系排成一个序列,使得被引用的单元格总是 在引用其的单元格的前面。如果无法计算出这样一个序列,则可以认定网格中出现了循环 引用现象,无法正常计算。例如,单元格A1引用了单元格B6,而单元格B6同时又引用了单 元A1。 对于动态模型,网格中的单元格是在填充数据的过程中动态扩展复制的,即单元 格的数量在运算过程中动态变化,单元格之间的引用关系是相对的。例如,网格模板的第3 行在计算过程中动态扩展了 10次,那么,网格模板中的第4行在扩展后的最终网格中就变 成了第14行。在运算之前,不能得出一个完整的单元格序列,也无法确定相对引用的最终 引用单元格位置,也就不能事先对单元格根据引用关系排序。 为了解决上述问题,现有技术中提供了如下方法 1、后排序法。对于动态模型,在扩展运算完成后,得到的结果网格也就成了静态网 格。后排序法,指的是在网格模型扩展过程中不计算单元格引用,扩展完成后,按照静态网 格的排序算法进行排序处理。虽然后排序法可以处理不存在循环引用的网格,但是只要网 格内存在一处循环引用,其他单元格弓I用也无法计算了 。 2、多次遍历法。在网格模板的扩展过程中,进行单元格引用的第一次遍历,碰到引 用了尚未计算的单元格的情况,暂时放弃不计算引用关系,转而去计算下一个单元格。扩 展完成后,再遍历结果网格,计算未处理的单元格引用,碰到引用了尚未计算的单元格的情 况,仍然是暂时放弃不计算引用关系,转而去计算下一个单元格。循环遍历结果网格,直到 网格中不再有任何未计算的单元格,则计算完成,或者一次遍历过程中未计算的单元格数 量未减少,也就是说存在循环引用。多次遍历法可以正确处理循环引用,不存在循环引用的 单元格的引用关系可以不受影响的计算出来,但是反复的遍历导致计算复杂度很高,平均 复杂度为0(n2) , n是结果网格的单元格数量。4 3、深度优先法。深度优先法,指的是网格模板的扩展过程中,碰到引用了尚未计算 的单元格的情况,则暂停正常的扩展,转而去处理其引用的单元格,直到深入到一个不引用 任何其他单元格的单元格,计算出该单元格的值,再按照深度优先算法逐步返回,直到返回 暂停处单元格,然后继续扩展。深度优先法理论上可以在一次遍历过程中完成单元格引用 关系的计算,其处理单元格引用关系的复杂度只有0 (n)。但是,其牺牲了网格扩展算法的效 率,大大提高了扩展算法的复杂度。
技术实现思路
有鉴于此,本专利技术提供一种计算网格间单元格引用关系的方法及装置,以实现准确快速的计算网格间单元格引用关系。其具体方案为 —种计算网格间引用关系的方法,包括 A、在扩展网格模板中填充数据,以生成结果网格; B、将尚未计算出引用关系的单元格保存在预先建立的源存储单元中,记录源存储 单元中的单元格数量; C、当源存储单元中的单元格数量不为0时,计算源存儲单元内的单元格的引用关 系,将无法计算的单元格转存至预先建立的目的存储单元; D、当目的存储单元中的单元格数量不为0时,如果目的存储单元与源存储单元中 的单元格数量相同时,记录一次相同;否则,将目的存储单元和源存储单元互换角色,并返 回执行步骤B ; E、当源存储单元或目的存储单元内的单元格数量为O,或者两者单元格的数量相 同的次数为预定的次数时,结束流程。 优选的,所述源存储单元和所述目的存储单元为堆栈。 优选的,通过计数器记录所述目的存储单元内单元格的数量与记录的源存储单元 的单元格数量相同的次数。 优选的,所述步骤A中还包括设置计数器的初始值为0。 优选的,所述目的存储单元内单元格的数量与记录的源存储单元的单元格数量相 同的情况的预定的次数为2次。 优选的,所述步骤E具体为当源存储单元或目的存储单元内的单元格数量为O, 或者所述计数器内的值为2时,结束流程。 —种计算动态网格间引用关系的装置,包括源存储单元、目的存储单元、网格 扩展处理器、记录单元、计算单元、判断单元、比较单元、计数单元、第二比较单元和转换单 元; 所述网络扩展处理器用于,在扩展网格模板中填充数据,以生成结果网格; 所述源存储单元用于,存储网格模板中尚未计算单元格引用关系的单元格; 所述记录单元用于,记录源存储单元中尚未计算出引用关系的单元格的数量; 所述计算单元用于,计算源存储单元中的单元格引用关系; 所述目的存储单元用于,存储所述源存储单元中无法计算单元格引用关系的单元 格; 所述判断单元用于,判断所述源存储单元或目的存储单元中的单元格数量是否为0 ; 所述比较单元用于,比较所述目的存储单元中的单元格数量是否与所述记录单元 中的单元格数量相同; 所述计数单元用于,记录所述目的存储单元中的单元格数量与所述记录单元中的 单元格数量相同的情况发生的次数; 所述第二比较单元用于,比较所述计数单元中的所述目的存储单元中的单元格数量与所述记录单元中的单元格数量相同的情况发生的次数是否与预设次数相同; 所述转换单元用于,将目的存储单元和源存储单元互换角色。优选的,所述装置还包括构建单元; 所述构建单元用于,构建源存储单元和目的存储单元。 优选的,所述源存储单元和所述目的存储单元的形式为堆栈。 优选的,所述计数单元为计数器。 从上述的技术方案可以看出,本专利技术实施例公开的计算网格间单元格引用关系的 方法将扩展过程中尚未计算出引用关系的单元格存储在源存储单元中,不会影响扩展算法 的操作,而且两个存储单元间的数据交换也是在扩展完成之后进行的,不会影响到已经完 成的扩展算法,所以计算更加准确;同时这种方式可以处理存在循环引用的网格,使得不存 在循环引用的单元格的引用关系可以不受影响的计算出来,而且算法复杂度较低,提高了 计算效率。附图说明 为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现 有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本 专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以 根据这些附图获得其他的附图。图1为本专利技术公开的计算网格间单元格引用关系的方法流程图; 图2为本专利技术实施例1公开的计算网格间单元格引用关系的方法流程图; 图3为本专利技术公开的计算网格间单元格引用关系的装置结构示意图。具体实施例方式下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完 整地描述,显然,所描述的本文档来自技高网...
【技术保护点】
一种计算网格间引用关系的方法,其特征在于,包括:A、在扩展网格模板中填充数据,以生成结果网格;B、将尚未计算出引用关系的单元格保存在预先建立的源存储单元中,记录源存储单元中单元格数量;C、当源存储单元中的单元格数量不为0时,计算源存储单元内的单元格的引用关系,将无法计算的单元格转存至预先建立的目的存储单元;D、当目的存储单元中的单元格数量不为0时,如果目的存储单元与源存储单元中的单元格数量相同,记录一次相同;否则,将目的存储单元和源存储单元互换角色,并返回执行步骤B;E、当源存储单元或目的存储单元内的单元格数量为0,或者两者单元格的数量相同的次数为预定的次数时,结束流程。
【技术特征摘要】
【专利技术属性】
技术研发人员:李治,乔璐,车帅,
申请(专利权)人:山东中创软件工程股份有限公司,山东中创软件商用中间件股份有限公司,
类型:发明
国别省市:88[中国|济南]
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。