【问题标题】:javascript - equal an array of numbers in the shortest wayjavascript - 以最短的方式等于一个数字数组
【发布时间】:2017-03-28 14:28:22
【问题描述】:

我有一个包含随机数的数组:

var EqualMe = [Math.random(), Math.random(), Math.random(),Math.random()];

现在假设选择的数字是:0.4、0.3、0.2、0.1。我需要找到一种方法来制作算法,这将等于每个数字为 0.25(因为 (0.4+0.3+0.2+0.1)/4 = 0.25),我正试图以最快的方式通过 从数组中的每个数字中提取一个值到另一个。

所以对于这个例子来说,最短的方法是从 EqualMe[0] 中提取 0.15 到 EqualMe[3] 并从 EqualMe[1] 中提取 0.05 到 EqualMe[2],这样数组中的每个数字将是相同的 (0.25)。

我的问题是如何编写代码,当数组的大小可以是任何给定的选择(不仅仅是 4 个数字)并且数组中的值是完全随机的时,它可以找到提取值的最短方法,所以数字将与可能的最低提款完全相等?

请注意: 我需要为比特币钱包的货币兑换程序编写代码 每次我从一个钱包取钱到另一个钱包时,我都会损失费用 所以我需要从一个钱包取钱到另一个钱包 尽可能少的提款,因此所有钱包的总价值都相同

【问题讨论】:

  • 所以你想用平均值替换每个元素?
  • 我们不会为你做作业。
  • 如果可以简单地用平均值替换值,为什么还需要“撤回值”?
  • @hindmost 不仅更换而且找到最快的退出方式
  • @epascarello 这不是一个家庭作业,它是我做的一个项目,通过从一个到另一个的取款将等于几个比特币钱包,但我希望它能够以最低的取款量工作

标签: javascript arrays algorithm


【解决方案1】:

编辑: 我会找到一组数字的平均值,计算每个数字与该数字相比的差异,并按最大差异对它们进行排序,然后开始将这些值划分为每个数字,使其全部等于平均值​​。因此,您正在逐个匹配最大的差异(并将其余的任何一个发送到行中的 NEXT 项)

========
示例 1:0.4、0.3、0.45、0.25(平均为 0.35)

差异将是 0.1 (0.25)、-0.1 (0.45)、0.05 (0.3) 和 -0.05 (0.4),只需两次交易即可获得所有值的 0.35。
第一次交易 = 从 0.45,移动 - 0.1 到 0.25 = 0.35,两者
第二次交易 = 从 0.4,移动 -.05 到 0.3 = 0.35,两者

========
示例 2: 0.32、0.47、0.12、0.56(平均 = 0.3675)

差异(按顺序排序)0.2475 (0.12)、-0.1925 (0.56)、0.1025 (0.47)、0.0475 (0.32)
第一次交易 = 从 0.56,从 0.1925 移动到 0.12(现在等于 0.3125)
第二笔交易 = 从 0.47,移动 0.0550 到 0.12(现在等于 0.3675)
第三笔交易 = 从 0.47,移动 0.0475 到0.32(现在等于 0.3675

在某些情况下,使用 MEDIAN 值与平均值相比,您可能更幸运,但我可能会设置两者,测试哪个使用最少的事务,然后提交事务最少的那个。

原创
与其以编程方式处理,为什么不以数学方式处理?

例如,如果您随机生成数字,您可以更改它们的值以获得您想要的 0.25。

如果您的 4 个随机值的总和等于 1.4(0.4、0.3、0.45、0.25),您可以做 0.25/1.4,即 ~0.17,然后将每个值乘以 0.17 以将它们的值减小到总和 0.25。

(0.4 x 0.17) + (0.3 x 0.17) + (0.45 x 0.17) + (0.25 x 0.17) = ~0.25

【讨论】:

  • 是的,唯一的问题是我需要为货币兑换程序制作它,并且我需要通过互相取钱来相等的几个钱包,每次我取钱我都会损失费用,这就是为什么我也在努力寻找最短的方法
  • 那么您是否总是尝试将 0.25 作为每个值的值?或者这个值会以编程方式传入吗?还是只是需要最少交易量以使所有值相等的数字?
  • 如果我把所有数字加在一起,我就有一个总价值假设我有 4 个钱包,每个钱包都有不同的价值,但如果你把所有数字加在一起得到一个钱包,你得到的价值是现在 1 个比特币,因为每个钱包都有不同的价值(就像我上面给出的例子一样),我需要制定一个算法,将价值从一个钱包提取到另一个钱包,以使所有钱包具有相同的价值,总价值相同,但问题是每次我提款都会损失费用,所以我需要使用算法找到可能的最低提款方式
猜你喜欢
  • 1970-01-01
  • 2021-06-11
  • 2021-01-26
  • 2014-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多