【问题标题】:Get the kth permutation of 1 to n获取 1 到 n 的第 k 个排列
【发布时间】:2015-02-07 18:33:59
【问题描述】:

我从网站上查到,这称为单峰排列,它定义为只有一个局部最大值的序列。例如 n = 5:

12345
12354
12453
12543
13452
13542
14532
15432
23451
23541
24531
25431
34521
35421
45321
54321

有没有获得第 k 个单峰排列的算法?

【问题讨论】:

  • 1243512534 在哪里? ;)
  • alfasin:12435 和 12534 有两个最大值 4,5。
  • @sdcvvc 错过了那部分 - 我的错...谢谢!

标签: algorithm sequence permutation


【解决方案1】:

这里的技巧是用二进制索引序列

       1234
       ----
12345 (0000)
12354 (0001)
12453 (0010)
12543 (0011)
13452 (0100)
13542 (0101)
14532 (0110)
15432 (0111)
23451 (1000)
23541 (1001)
24531 (1010)
25431 (1011)
34521 (1100)
35421 (1101)
45321 (1110)
54321 (1111)

然后观察数字 1..4 出现在 5 之前当且仅当它们的位为 0。在 Python 中:

def kth_unimodal(n, k):  # k is 0-indexed
  left = []
  right = []
  for j in range(1, n):  # 1..n-1
    if k & (1 << (n - 1 - j)):
      right.append(j)
    else:
      left.append(j)
  left.append(n)
  left.extend(reversed(right))
  return left

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-11
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 2018-05-16
    • 2013-11-08
    • 1970-01-01
    • 2016-03-20
    相关资源
    最近更新 更多