用于将一个范围列表缩放到另一个范围的算法

约翰·诺古奇

我有一个不变的基本列表,像这样:

[50, 100, 150, 200, 500, 1000]

该列表定义范围:0到50、50到100,并一直执行到1000到无穷大。

我想编写一个函数,用于将任何数字列表转换为与上述列表兼容的列表。“兼容”是指其中仅包含该列表中的数字,但这些数字尽可能接近原始值。因此,作为示例输入[111, 255, 950],我将得到[100, 200, 1000]到目前为止,我有一个天真的代码,其工作原理如下:

for each i in input
{
    calculate proximity to each number in base list
    get the closest number
    remove that number from the base list
    return the number
}

这在大多数情况下都可以正常工作,但是在输入比例超​​出控制范围时会崩溃。当我输入类似时[1000, 2000, 3000],第一个数字从基本列表中获取最后一个数字,然后2000和3000分别获取500和200(因为已经使用了1000和500)。这将导致列表倒退[1000, 500, 200]

我将如何防范呢?

彼得·德里瓦兹

方法1

这可以通过使用匈牙利算法在O(n ^ 3)的时间内解决,其中n为max(len(list),len(input))。

首先建立一个矩阵,该矩阵给出将每个输入分配给列表中每个数字的成本。

matrix[i,j] = abs(input[i]-list[j])

然后使用匈牙利算法查找列表中输入与数字的最小成本匹配。

如果列表中的数字多于输入,请添加一些额外的虚拟输入,这些虚拟输入与列表中任何数字的匹配成本为零。

方法2

如果第一种方法太慢,则可以使用动态编程来计算最佳拟合。

这个想法是要计算一个函数A(a,b),它使列表中的前a个输入与前b个数字具有最佳匹配。

A(a,b) = min( A(a-1,b-1)+matrix[a,b], A(a,b-1) )

这应该给出O(n ^ 2)解决方案,但是需要更多的精力才能读回解决方案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将一个时间范围缩小到另一个时间范围的算法

来自分类Dev

将范围从一个列表添加到另一个

来自分类Dev

将数字从一个范围转换到另一个范围

来自分类Dev

将数字从一个范围转换到另一个范围

来自分类Dev

将一个整数范围映射到另一个整数范围

来自分类Dev

将一个范围映射到另一个范围

来自分类Dev

将一个端口范围映射到另一个端口范围(范围的长度相等)

来自分类Dev

我将一个范围设置为另一个范围。当我删除原始范围时,另一个被清除。为什么?

来自分类Dev

我将一个范围设置为另一个范围。当我删除原始范围时,另一个被清除。为什么?

来自分类Dev

将一个矩阵列表重新缩放为另一个

来自分类Dev

将一个值范围映射到另一个值

来自分类Dev

将范围从一个容器复制到另一个容器

来自分类Dev

将一个值范围映射到另一个值

来自分类Dev

Android:如何将一个活动中列表的滚动范围与属于另一个活动的列表的滚动范围相匹配

来自分类Dev

将存储文件从一个列表视图拖放到另一个列表视图

来自分类Dev

在VBA Excel中多次将一个范围复制并粘贴到另一个范围的代码

来自分类Dev

如何优化代码以将一个图纸范围复制到另一个图纸范围

来自分类Dev

Excel VBA缩短代码以将值从一个范围复制到另一个范围

来自分类Dev

将一个值范围重新映射到另一个值范围,遇到整数溢出

来自分类Dev

将Excel中的不同值从一个范围复制到另一个范围

来自分类Dev

在VBA中,是否可以将一个范围设置为相对于另一个范围?

来自分类Dev

将一个小范围除以另一个小范围时出现浮点错误

来自分类Dev

将范围分配给另一个范围Angujarjs

来自分类Dev

将整数范围映射到另一个范围

来自分类Dev

将Excel范围值分配给另一个范围

来自分类Dev

从另一个范围采样一个范围

来自分类Dev

确定一个范围是否在另一个范围内

来自分类Dev

使用一个指令从另一个隔离的范围复制范围属性

来自分类Dev

一个范围到另一个范围的非线性插值

Related 相关文章

  1. 1

    将一个时间范围缩小到另一个时间范围的算法

  2. 2

    将范围从一个列表添加到另一个

  3. 3

    将数字从一个范围转换到另一个范围

  4. 4

    将数字从一个范围转换到另一个范围

  5. 5

    将一个整数范围映射到另一个整数范围

  6. 6

    将一个范围映射到另一个范围

  7. 7

    将一个端口范围映射到另一个端口范围(范围的长度相等)

  8. 8

    我将一个范围设置为另一个范围。当我删除原始范围时,另一个被清除。为什么?

  9. 9

    我将一个范围设置为另一个范围。当我删除原始范围时,另一个被清除。为什么?

  10. 10

    将一个矩阵列表重新缩放为另一个

  11. 11

    将一个值范围映射到另一个值

  12. 12

    将范围从一个容器复制到另一个容器

  13. 13

    将一个值范围映射到另一个值

  14. 14

    Android:如何将一个活动中列表的滚动范围与属于另一个活动的列表的滚动范围相匹配

  15. 15

    将存储文件从一个列表视图拖放到另一个列表视图

  16. 16

    在VBA Excel中多次将一个范围复制并粘贴到另一个范围的代码

  17. 17

    如何优化代码以将一个图纸范围复制到另一个图纸范围

  18. 18

    Excel VBA缩短代码以将值从一个范围复制到另一个范围

  19. 19

    将一个值范围重新映射到另一个值范围,遇到整数溢出

  20. 20

    将Excel中的不同值从一个范围复制到另一个范围

  21. 21

    在VBA中,是否可以将一个范围设置为相对于另一个范围?

  22. 22

    将一个小范围除以另一个小范围时出现浮点错误

  23. 23

    将范围分配给另一个范围Angujarjs

  24. 24

    将整数范围映射到另一个范围

  25. 25

    将Excel范围值分配给另一个范围

  26. 26

    从另一个范围采样一个范围

  27. 27

    确定一个范围是否在另一个范围内

  28. 28

    使用一个指令从另一个隔离的范围复制范围属性

  29. 29

    一个范围到另一个范围的非线性插值

热门标签

归档