我有一个函数f(u,v),它包含两个变量u和v,定义在边长为1的正方形上。
计时器启动,对于计时器的每一次滴答,我需要在这个正方形的离散点(u,v)上对这个函数进行数千次评估。这些点(u,v)在计时器的每一个滴答声中都可以不同,没有理由假设它们总是相同的。出于性能原因,我想对正方形[f(0,0), f(0,0.1), f(0,0.2),…]中的一些点进行抽样。, f(0.1,0),…f(1,1)],在计时器开始前只计算一次函数,然后尽快得到它们。
字典能解决问题吗?还是有更好的结构?
我忘了补充一点很明显我不需要边1的平方的所有可能的u v值而是那些属于离散网格的值
如果你需要在常规网格上采样,你可以简单地将它们存储在二维数组中,即T[11,11]
,只需将u,v坐标乘以10,或者无论你的采样密度如何,并截断为int以获得你的索引。
字典也可以工作,但它可能会有更大的开销,因为它需要散列键。对于规则网格,2D数组可能更有意义,而字典可能更适合非规则采样模式。
更复杂的方法可能是kd或四叉树。这允许有效地存储非规则样本模式,同时仍然允许对最近点进行有效查询。但听起来你的描述中不需要这个。这个答案很好地介绍了网格、四叉树和kd树。