Steinhaus Johnson-Trotter的先前置换

问题描述 投票:1回答:1

我在此实现中使用Steinhaus Johnson-Trotter算法:https://github.com/nodash/steinhaus-johnson-trotter

我想知道如何使功能类似“先前的”置换。

示例:

const t = trotter([4, 2, 1, 3])
t.next() // [ 4, 2, 3, 1 ]
t.back() // [4, 2, 1, 3] <- this is what I need

我正在尝试找到任何可能的方式来实现反向功能但没有结果。

编辑:我已经尝试过更改:moveTo = maxIndex - directions[maxIndex];

但是它不适用于所有情况,请看一下:

const numbers = [4, 2, 1, 3];

const t = trotter(numbers); // [4, 2, 1, 3] | [ 0, 1, 2, 3 ] [ 0, -1, -1, -1 ]
t.next(); // [ 4, 2, 3, 1 ] | [ 0, 1, 3, 2 ] [ 0, -1, -1, -1 ]
t.next(); // [ 4, 3, 2, 1 ] | [ 0, 3, 1, 2 ] [ 0, -1, -1, -1 ]
t.next(); // [ 3, 4, 2, 1 ] | [ 3, 0, 1, 2 ] [ 0, 0, -1, -1 ]

t.prev(); // it should be [4, 3, 2, 1] but the output is [3, 4, 2, undefined ]

最佳,

algorithm permutation
1个回答
0
投票

似乎唯一需要的更改:

moveTo = maxIndex + directions[maxIndex];
  to
moveTo = maxIndex - directions[maxIndex];
© www.soinside.com 2019 - 2024. All rights reserved.