← 完整题目索引

PROJECT EULER · #0524

First Sort 排序 II

First Sort II

仅题目 · 待解原题 ↗

考虑以下对列表进行排序的算法:

  • 1.从列表开头开始,依次检查每对相邻元素。
  • 2.如果元素无序:
    • a.将该对中的最小元素移到列表的开头。
    • b.从步骤 1 重新启动该过程。
  • 3.如果所有对都按顺序排列,则停止。

例如,列表 {4132} 排序如下:

  • 413241 顺序不正确,因此将 1 移到列表前面)
  • 143243 顺序不正确,因此将 3 移到列表前面)
  • 314231 顺序不正确,因此将 1 移到列表前面)
  • 134242 顺序不正确,因此将 2 移到列表前面)
  • 213421 顺序不正确,因此将 1 移到列表前面)
  • 1234(列表现已排序)

F(L) 为执行步骤 2a 对列表 L 进行排序的次数。例如,F({4132})=5

我们可以按字典顺序列出整数 {1,2,,n} 的所有排列 P,并为每个排列分配一个索引 In(P),从 1n! 对应于其在列表中的位置。

Q(n,k)=min(In(P))F(P)=k,第一个排列的索引需要恰好 k 个步骤才能使用"第一排序"进行排序。如果不存在 F(P)=k 的排列,则 Q(n,k) 未定义。

对于 n=4,我们有:

PI4(P)F(P)
{1, 2, 3, 4}10Q(4, 0) = 1
{1, 2, 4, 3}24Q(4, 4) = 2
{1, 3, 2, 4}32Q(4, 2) = 3
{1, 3, 4, 2}42
{1, 4, 2, 3}56Q(4, 6) = 5
{1,4,3,2}64
{2, 1, 3, 4}71Q(4, 1) = 7
{2, 1, 4, 3}85Q(4, 5) = 8
{2,3,1,4}91
{2,3,4,1}101
{2,4,1,3}115
{2, 4, 3, 1}123Q(4, 3) = 12
{3, 1, 2, 4}133
{3,1,4,2}143
{3,2,1,4}152
{3,2,4,1}162
{3,4,1,2}173
{3,4,2,1}182
{4, 1, 2, 3}197Q(4, 7) = 19
{4,1,3,2}205
{4,2,1,3}216
{4,2,3,1}224
{4,3,1,2}234
{4,3,2,1}243

R(k)=min(Q(n,k)) 覆盖所有定义了 Q(n,k)n

R(1212)

题解待补充

这道题的题目已收录,解题思路、代码和答案将在后续补充。