问题描述
关于自适应梯形细分(请参见this和this),我需要解决一个问题,其中评估f(x)
会花费很多时间,因此我需要这样做最少的次数。
在SO上搜索,我找到了这个答案:https://stackoverflow.com/a/29837372/261010
更多高级代码而不是分别考虑每个子间隔中的误差,而是计算所有子间隔中的总误差并进行细化,直到总误差低于所需阈值为止。根据子间隔对总误差的贡献,选择子间隔进行细化,首先对较大的误差进行细化。通常,优先级队列用于快速选择子间隔进行细化。
这到底是什么意思?在这种情况下,优先级队列有何帮助?多少个子间隔可以视为“较大”?
解决方法
优先级队列不用于计算每个间隔中的错误。相反,它用于跟踪当前间隔最大的错误,因此算法可以对其进行优化。这种带有优先级队列的模式已在许多所谓的“贪婪”算法中使用,例如Dijkstra搜索和Prim算法。