【问题标题】:Maximizing entropy inside integers array最大化整数数组内的熵
【发布时间】:2014-07-15 08:42:25
【问题描述】:

我有一个数组如下44477125,我想最大化熵,以便分散n元组的最大值。 结果示例为 74574214

这个问题似乎是 NP 完全问题,我并没有真正的函数来测量我的数组的“熵”。 (可能是相同数字entropy(44477125)=3entropy(74574214)=9之间的距离之和)

我正在寻找的是一种启发式方法,它可以在多项式时间内给我一个可接受的结果。

【问题讨论】:

  • 您当前的度量可能会产生一个非常有序的数组 (123123123)。你能接受吗?
  • 那为什么不简单地使用一个好的“洗牌”算法(来自图书馆或你自己的)?
  • 其实数组已经是一个随机数组了。我只是在我的示例中对其进行了排序,以便我们理解问题。

标签: algorithm polynomial-math heuristics entropy np-complete


【解决方案1】:

算法

使用熵测量为相同数字之间的距离之和,存在非常简单的多项式时间算法:

  1. 计算每个数字出现的次数。

  2. < number,ocurrences >occurrences降序排序。

  3. 创建与输入大小相同的空表。

  4. 对于每一对< number, ocurrences >

    a) 获取maximum_possible_distance = array_size/occurrences

    b) 在以下索引中插入所有出现的number0*maximum_possible_distance, 1*maximum_possible_distance, 2*maximum_possible_distance 等。如果索引已被占用,则使用最近的空索引。

示例

输入数组:44477125

1.统计出现次数:

、、、、

2.排序对< number - occurrences >

它已经排序了。

3.创建空表:

。 . . . . . . .

4.插入事件:

a) 第一对 : maximum_possible_distance=8/3=2
b) 插入事件:我们有:4..4..4.
c) 第二对 : maximum_possible_distance=8/2=4
d) 插入事件:我们有:47.4.74.
e) 第三对 : maximum_possible_distance=8/1=8
f) 插入事件:我们有:4714.74.
g) 第 4 对 : maximum_possible_distance=8/1=8
h) 插入事件:我们有:4714274.
i) 第 5 对 : maximum_possible_distance=8/1=8
j)插入事件:我们有:47142745

【讨论】:

  • 我怎么错过了...谢谢 ;)
【解决方案2】:

这纯粹是推测,但我想使用simulated annealing 算法可能会在合理的时间内产生良好的结果。

您必须创建一个能量标准(沿着您可以在数组中创建的最大 ntuples 数)并尝试将其最小化。请记住,在使用此算法时,您对初始温度及其降低函数的选择对于结果的质量和算法完成所需的时间非常重要。

【讨论】:

    猜你喜欢
    • 2018-05-08
    • 1970-01-01
    • 1970-01-01
    • 2012-06-11
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    • 2015-10-30
    • 1970-01-01
    相关资源
    最近更新 更多