Mathematica、58バイト、polynomial(n)time
Abs[Sum[(k-1)Hypergeometric2F1[k,k-#,2,2](#-k)!,{k,#}]-1]&
使い方
順列をブルートフォースで反復するのではなく、包含-除外の原則を使用して組み合わせでカウントします。
Sはすべての順列の集合とする[1、...、n]はσと1 = 1、σ N = N、およびSは聞かせて、私は順列の集合σ∈Sように|σ I - σ I + 1 | = 1.次に、探しているカウントは
| S | - | S 1 ∪⋯∪S のn - 1 | =Σ 2≤ K ≤ N + 1。1≤ I 2 <⋯< I K - 1 < N(-1)K - 2 | S iは2 ∩⋯∩S I K - 1 |。
さて、| S I 2 ∩⋯∩S I K - 1 | kと[ i 1、i 2、…、i k − 1、i k ] の連続したインデックスの実行回数jのみに依存します。便宜上、i 1 = 0とi k = nを修正します。具体的には、
| S I 2 ∩⋯∩S I K - 1 | = 2 J - 2(N - K)] 2≤ J ≤ K ≤ N、
| S iは2 ∩⋯∩S I K - 1 | = 1、j = 1、k = n + 1。
このようなインデックスセットの数[ i 1、i 2、…、i k − 1、i k ]はj回実行されます
(K - 1 C J - 1)(N - k個の CのJ - 2)、2≤用J ≤ K ≤ N、
1、のためにJ = 1、K = N + 1。
結果は
(-1)のn - 1 +Σ 2≤ K ≤ N Σ 2≤ J ≤ K (-1)K - 2(K 1 - C J - 1)(N - K C J - 2)2 J - 2(n − k)!
jの内部合計は、超幾何2 F 1関数を使用して記述できます。
(-1)のn - 1 +Σ 2≤ K ≤ N(-1)K(K - 1)2 F 1(2 - K、K - N ; 2; 2)(N - K)!
絶対値を使用して-1のべき乗をゴルフで解くPfaff変換を適用します。
(-1)のn - 1 +Σ 2≤ K ≤ N(-1)N(K - 1)2 F 1(K、K - N ; 2; 2)(N - K)!
= | -1 +Σ 1≤ K ≤ N(K - 1)2 F 1(K、K - N ; 2; 2)(N - K!)|。
デモ
In[1]:= Table[Abs[Sum[(k-1)Hypergeometric2F1[k,k-#,2,2](#-k)!,{k,#}]-1]&[n],{n,50}]
Out[1]= {1, 0, 0, 0, 0, 2, 10, 68, 500, 4174, 38774, 397584, 4462848,
> 54455754, 717909202, 10171232060, 154142811052, 2488421201446,
> 42636471916622, 772807552752712, 14774586965277816, 297138592463202402,
> 6271277634164008170, 138596853553771517492, 3200958202120445923684,
> 77114612783976599209598, 1934583996316791634828454,
> 50460687385591722097602304, 1366482059862153751146376304,
> 38366771565392871446940748410, 1115482364570332601576605376898,
> 33544252621178275692411892779180, 1042188051349139920383738392594332,
> 33419576037745472521641814354312790,
> 1105004411146009553865786545464526206,
> 37639281863619947475378460886135133496,
> 1319658179153254337635342434408766065896,
> 47585390139805782930448514259179162696722,
> 1763380871412273296449902785237054760438426,
> 67106516021125545469475040472412706780911268,
> 2620784212531087457316728120883870079549134420,
> 104969402113244439880057492782663678669089779118,
> 4309132147486627708154774750891684285077633835734,
> 181199144276064794296827392186304334716629346180848,
> 7800407552443042507640613928796820288452902805286368,
> 343589595090843265591418718266306051705639884996218154,
> 15477521503994968035062094274002250590013877419466108978,
> 712669883315580566495978374316773450341097231239406211100,
> 33527174671849317156037438120623503416356879769273672584588,
> 1610762789255012501855846297689494046193178343355755998487686}
[2..n-1]
のデルタを含まない順列の数だけをチェックすることはできません。また、...で開始または終了しないこともチェックする必要があります1
-1
2
n-1