找到数字1到N的排列,使得排列中任何两个数字的平均值不会出现在它们之间

时间:2016-02-27 15:24:40

标签: algorithm math permutation

例如:对于N = 4,[1,3,2,4]是解释置换,但[1,4,2,3]不是因为2出现在1和3之间。

我正在阅读这篇博文,解决了这个问题。 https://kartikkukreja.wordpress.com/2014/11/04/interesting-problem-multiple-solutions/

我无法理解这个问题的分而治之的方法是基于这样一个事实,即奇数和偶数的平均值不是整数,因此无需关心。我无法理解逻辑在第一次分裂后如何进行。

1 个答案:

答案 0 :(得分:0)

以下是如何将此问题减少到较小的问题:

  1. 假设您的所有输入数字都是偶数。然后,将所有数字除以2并求解它们,最后将所有数字乘以2.

  2. 假设您的所有输入数字都是奇数。然后,为所有数字加1,然后解决它们,最后从所有数字中减1。

  3. 假设有些数字是奇数,有些则是偶数。然后,首先求解奇数,然后求偶数,并将两个结果对应。

  4. 例如,对于给定的输入向量(1,2,3,4,5,6,7):

    P([1,2,3,4,5,6,7]) := P([1,3,5,7]) + P([2,4,6])
    
    P([1,3,5,7]) := P([2,4,6,8]) - 1 = 
      P([1,2,3,4]) * 2 - 1 = 
      ( P([1,3]) + P([2,4]) ) * 2 - 1 = 
      [1,3,2,4] * 2 - 1 = [2,6,4,8] - 1 = [1,5,3,7]
    
    P([2,4,6]) := P([1,2,3]) * 2 = [1,3,2] * 2 = [2,6,4]
    

    所以最终

    P([1,2,3,4,5,6,7]) = [1,5,3,7,2,6,4]