宝石排列 java_重新排列序列以最大化顺序差异,红宝石

我有一个数组形式的有序序列 . 例如

original_order = [1,2,3,4,5,6,7,8,9,10]

我想知道如何根据原始顺序重新排序顺序,顺序的最大差异 . 具体来说,我想知道在运行下面的代码时,什么顺序会给出最大“得分”:

简而言之,下面计算序列中每个值在重新排列的序列(称为重新排列的数组)中“移动”的距离,与其在original_order序列中的位置进行比较 . 然后,它对每个值的差异(移动的距离)求和,以给出重新排列的“有序差异”的总分 . 有人告诉我,我正在计算的这个“分数”可以定义为两个序列之间的序数相似性(原始顺序和重新排列) .

我认为可以通过运行带有重新排列顺序的代码作为 reversed 原始订单来获得最大分数 . 我没有找到一个比这更高分的重新排列方法,但是如果有人认为我错了请告诉我(对于上面的例子original_order将是max_score = 50) . 我认为没有其他序列顺序的重新排列可以给出更高的分数(尽管有其他命令给出相同的分数) .

position = original_order.map{|x| rearranged.index(x)} #works out the index of original_order values in rearranged

index_values = Array(0..(original_order.length - 1)) # array of index values for original_order

both = []

both << position

both << index_values

difference = both.transpose.map {|x| x.reduce(:-)} # taking away old position from new position, to find the distance that the value has "moved" when re-ordered

difference_abs = []

difference.each do |i|

difference_abs << i.abs

end

score = difference_abs.inject(:+)

我想知道的是:

如果我的假设反转顺序总是给出最高分数,无论序列数组的长度如何,都是正确的

对我的代码所做的数学解释,以及为什么简单地颠倒原始顺序会给出最高分

如果序数相似性是定义我的分数度量的准确方法,如果不是,那是什么?

此外,欢迎任何有关简化我的代码的提示 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值