FlexiLayout 中的每个元素都有一个重要的参数 MaxHypothesesCount。用户可以用它来限制程序在查找下一个元素时可采用的假设数量。默认情况下,简单元素的该参数为 5,Group 元素为 1。这意味着如果程序为某个元素找到 15 个假设,将保留质量最好的 5 个,其余 10 条假设链将保持未完成。Group 元素通常比简单元素更易被可靠检测,因此其最佳假设通常就是正确的结果。
在多数情况下,程序会同时存在若干未完成的假设链,也就意味着有多种可能的搜索方向。程序采用经典的“宽度优先搜索”算法来寻找最佳假设。该算法意味着程序始终优先扩展当前质量最高的那条链,而不受其长度影响。
假设我们有一个包含 30 个元素的 FlexiLayout,并生成了两条假设链:一条包含 29 个元素,估计质量为 0.89;另一条包含 2 个元素,估计质量为 0.92。程序将优先扩展那条更短但质量更高的链,直到其所有延伸的质量都不如第一条链为止。
对于 Group 元素,程序会进行所谓的质量优化。当程序为某个 Group 元素找到一条理想的完整假设链(即该链质量为 1)时,将忽略所有其他方案。每个元素的假设总数上限为 10,000 个。
某个元素生成的假设数量可能会超过 MaxHypothesesCount 设置的数值。在这种情况下,只有用户设定数量的最佳假设会被纳入假设树。