从集合中选择施瓦茨变换最小值对应的对象

我正在为http://aichallenge.org/specification.php实现A*算法,并想知道一种巧妙的方法来基于施瓦茨变换选择集合中的最小值。

基本上,我有一组合适的移动目标方格,我想移动到成本最低的方格。

基本上,我将在循环中从我的邻居中选择成本最低的方格。

我唯一能想到的方法是类似这样的:

next_spot = spot.neighbors.sort_by |a,b| { a.cost(dest) <=> b.cost(dest) }.first

但我真的很想要一些更高性能的东西,因为我不想真的对集合进行排序,我只是想要具有最小变换值的那个。

请注意,我可以编写一些更冗长和“C风格”的循环,并跟踪之前的最小值,但我希望得到一些清晰而简洁的东西。


回答:

为什么不使用min_by

next_spot = spot.neighbors.min_by { |x| x.cost(dest) }

如果某个类似 Enumerable 的方法没有 “_by” 版本,你可以使用传统的施瓦茨变换,通过这种伪 Ruby 模式手动完成:

a.map { |x| [ expensive(x), x ] }.       # 执行耗时部分一次并缓存结果  op  { |x| something_with x.first... }. # 执行你真正想要做的事情  map { |x| x.last }                     # 解包缓存

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注