2017-09-27 40 views
0

我想根据某些权重(i,j)函数匹配(线性赋值)两组元素。我一直使用munkres,但单独使用结果的内存量(15000 x 15000 x sizeof(float))太大。我的下一个赌注是拍卖算法,但我不确定它是否符合我的标准。内存有效的中等大小的集合赋值

可能存在仅在一侧出现的元素。最佳和简单的实施解决方案是可取的。我只是需要一个正确的方向暗示,非常感谢。

+1

您描述的结构只有858 MB。什么是你的尺寸限制? –

+0

我受32位限制和gui部分占用内存的限制。最大大约1gb,但肯定没有一个连续的内存块。我可能能够适应当前的实现,但只能使用变通方法。而且,越快越好。 – SirPolly

+0

或者:如果用户在其上投掷数百万个元素,我宁愿不要崩溃,只需花费更长的时间。 – SirPolly

回答

0

一旦计算出重量,就不需要以很高的精度进行存储。您可以通过使用half-precision floating point值或其他一些16位格式立即将存储要求从858 MB降低到429 MB。例如,取决于权重的范围,您可能想要取权数的对数并将其存储为16位整数。或者,您只能存储原始32位浮点数的指数部分,这只是8位,将存储空间降低到215 MB。

一旦权重被转换(或量化),就可以正常应用该算法。

+0

我做到了这一点,它的工作...有点。它不再崩溃,但我的Munkres实施太慢而无法使用。也许你有一个想法让我进一步。 – SirPolly

+0

你应该发布代码。但是,如果按照最佳发布的实现完成,那么如果可能的话,我们可能不会做得更好。 –