Absolute Summen von Sidi-Polynomkoeffizienten


28

Hintergrund

Das Sidi-Polynom vom Grad n - oder das (n + 1) -te Sidi-Polynom - ist wie folgt definiert.

Definition von Sidi-Polynomen

Die Sidi-Polynome haben mehrere interessante Eigenschaften, aber auch ihre Koeffizienten. Letztere bilden die OEIS-Sequenz A075513 .

Aufgabe

Schreibe ein vollständiges Programm oder eine Funktion , die, da eine nicht negative ganze Zahl n , Drucke oder gibt die absolute Summe der Koeffizienten des Sidi Polynoms vom Grad n , das heißt

Definition der beabsichtigten Ausgabe

Diese Summen bilden die OEIS-Sequenz A074932 .

Wenn Sie eine 1-basierte Indizierung bevorzugen, können Sie stattdessen eine positive ganze Zahl n verwenden und die absolute Summe der Koeffizienten des n- ten Sidi-Polynoms berechnen.

Da dies , müssen Sie Ihren Code so kurz wie möglich halten. Es gelten alle Standardregeln.

Testfälle (0-basiert)

 n           Σ

 0           1
 1           3
 2          18
 3         170
 4        2200
 5       36232
 6      725200
 7    17095248
 8   463936896
 9 14246942336

Testfälle (1-basiert)

 n           Σ

 1           1
 2           3
 3          18
 4         170
 5        2200
 6       36232
 7      725200
 8    17095248
 9   463936896
10 14246942336

Antworten:



46

Python 2 , 43 Bytes

f=lambda n,k=1:k/n or n*f(n,k+1)+k*f(n-1,k)

Probieren Sie es online!

Ein anderer Versuch

Seitdem ich diese Herausforderung gepostet habe, habe ich versucht, eine rekursive Lösung für dieses Problem zu finden. Ich habe zwar nicht mehr als Stift und Papier verwendet, aber ich habe es geschafft, die Formel für Golf in ein praktisches Problem zu verwandeln - zumindest für bestimmte Definitionen des Praktischen -, was die Analyse erleichtert hat.

Stellen Sie sich eine Spielshow mit k + m Kandidaten vor, die wie folgt funktioniert.

In Runde 1 müssen alle Kandidaten eine bestimmte Aufgabe so schnell wie möglich erledigen. Die k Kandidaten, die die Aufgabe am schnellsten erfüllen, gewinnen jeweils 1 k $ (ein Kilodollar) und kommen in Runde 3.

In Runde 2 erhalten die m verbleibenden Kandidaten eine zweite Chance, sich dem anderen k anzuschließen . Jedem Kandidaten wird eine Frage gestellt. Wenn sie die Frage richtig beantworten, gewinnen sie 1 k $ und steigen in Runde 3 auf. Wenn sie die Frage jedoch nicht beantworten, werden sie aus dem Spiel ausgeschlossen. Das bedeutet, dass in Runde 3 zwischen k und k + m Kandidaten stehen, je nachdem, wie viele ihre Fragen beantworten können.

Runde 3 besteht aus m weiteren Wettbewerben, die Runde 1 ähneln. In jedem Wettbewerb müssen die Teilnehmer eine bestimmte Aufgabe erfüllen. Im Gegensatz zu Runde 1 erhält nur ein Kandidat einen Preis, aber alle Kandidaten können am nächsten Wettbewerb teilnehmen. Jeder Wettbewerb zahlt doppelt so viel wie der vorhergehende Wettbewerb; der erste zahlt 2 k $ und der letzte 2 m k $ .

Da es sich bei allen Preisen um Zweierpotenzen handelt, wissen wir, ob ein Kandidat die dritte Runde erreicht hat und welchen Wettbewerb er gewonnen hat, wenn er weiß, wie viel Preisgeld er verdient hat.

Angenommen, Sie sehen sich die Spielshow an und Runde 1 ist bereits vorbei. Sie wissen also, welche k Kandidaten bereits Runde 3 erreicht haben und welche m Kandidaten noch in Runde 2 stecken. Auf welche Weise kann das verbleibende Preisgeld verteilt werden?

Sobald wir wissen, welche der m Kandidaten der zweiten Runde die dritte Runde erreicht haben, ist es einfach, die möglichen Ergebnisse für dieses spezielle Szenario zu berechnen. Wenn j Kandidaten vorrücken, gibt es in Runde 3 k + j Gesamtkandidaten und somit k + j mögliche Ergebnisse für jeden Wettbewerb. Mit m Einzelwettbewerben in Runde 3 ergibt dies (k + j) m Ergebnisse für alle m Wettbewerbe.

Jetzt kann j einen beliebigen Wert zwischen 0 und m annehmen, abhängig davon, welche Kandidaten in Runde 2 richtig antworten. Für jeden festen Wert von j gibt es m C j verschiedene Kombinationen von j Kandidaten, die bis Runde 3 hätten vorrücken können. Wenn wir callen Die Gesamtzahl der möglichen Ergebnisse für k Kandidaten der dritten Runde und m Kandidaten der zweiten Runde g (m, k) ergibt die folgende Formel.

Formel für g

Wenn wir k = 1 festlegen , erhalten wir den folgenden Sonderfall, der unseren neuen Ansatz zur Lösung des ursprünglichen Problems darstellt.

Beziehung zwischen Sigma und g

Eine rekursive Formel

Nehmen wir nun an, dass Sie während der Werbespots nach Runde 1 und wachte gerade rechtzeitig , um zu sehen, der den letzten Wettbewerb der Runde 3 gewonnen und damit den großen Preis von einschlief 2 m k $ . Sie haben keine weiteren Informationen, auch nicht, wie viel Preisgeld der Kandidat insgesamt gewonnen hat. Auf wie viele Arten kann das verbleibende Preisgeld verteilt werden?

Wenn der Sieger einer der m Kandidaten der zweiten Runde war, müssen sie bereits in die dritte Runde aufgestiegen sein . Wir haben also effektiv k + 1 Kandidaten in Runde 3, aber nur m - 1 Kandidaten in Runde 2. Da wir den Gewinner des letzten Wettbewerbs kennen, gibt es nur m - 1 Wettbewerbe mit ungewissen Ergebnissen, also gibt es g (m - 1, k + 1) mögliche Ergebnisse.

Wenn der Gewinner einer der k Kandidaten ist, die Runde 2 übersprungen haben, wird die Berechnung etwas kniffliger. Nach wie vor gibt es nur noch m - 1 Runden, aber jetzt haben wir noch k Kandidaten in Runde 3 und m Kandidaten in Runde 2. Da die Anzahl der Kandidaten für Runde 2 und die Anzahl der Wettbewerbe für Runde 3 unterschiedlich sind, können die möglichen Ergebnisse nicht mit einem einfachen Aufruf von g berechnet werden . Doch nach dem erste Runde 2 Kandidat beantwortet hat - zu Recht oder zu Unrecht - die Anzahl der Runde 2 Kandidaten paßt erneut die m - 1 Runde 3 Wettbewerbe. Wenn der Kandidat weiterkommt, gibt es k + 1 Kandidaten der dritten Runde und somit g (m - 1, k + 1).mögliche Resultate; Wenn der Kandidat eliminiert wird, bleibt die Anzahl der Kandidaten der dritten Runde bei k und es gibt g (m - 1, k) mögliche Ergebnisse. Da der Kandidat entweder weiterkommt oder nicht, gibt es g (m - 1, k + 1) + g (m - 1, k) mögliche Ergebnisse, die diese beiden Fälle kombinieren.

Wenn wir nun die potenziellen Ergebnisse für alle k + m Kandidaten addieren, die den Hauptpreis hätten gewinnen können, muss das Ergebnis mit g (m, k) übereinstimmen . Es gibt m Kandidaten der zweiten Runde, die jeweils zu g (m - 1, k + 1) möglichen Ergebnissen führen, und k Kandidaten der dritten Runde, die zu g (m - 1, k + 1) + g (m - 1, k) führen. Einsen. Zusammenfassend erhalten wir die folgende Identität.

rekursive Formel für g

Zusammen mit dem Basiskoffer

Grundkoffer für g

Diese beiden Formeln charakterisieren die Funktion g vollständig.

Eine golferische Umsetzung

Während

g=lambda m,k=1:0**m or(m+k)*g(m-1,k+1)+k*g(m-1,k)

(49 Byte, 0**mergibt 1, wenn m auf 0 abfällt ) oder sogar

g=lambda m,k=1:m<1 or(m+k)*g(m-1,k+1)+k*g(m-1,k)

(48 Bytes, gibt True statt 1 zurück ) wären gültige Lösungen, es sind noch Bytes zu speichern.

Wenn wir eine Funktion f definieren , die die Anzahl n der Kandidaten der ersten Runde anstelle der Anzahl m der Kandidaten der zweiten Runde als erstes Argument verwendet, dh

Definition von f in Bezug auf g

Wir erhalten die rekursive Formel

rekursive Formel für f

mit Grundkoffer

Grundfall für f

Endlich haben wir

Beziehung zwischen Sigma und f

so die Python-Implementierung

f=lambda n,k=1:k/n or n*f(n,k+1)+k*f(n-1,k)

( k/nergibt 1 einmal n = k ) löst die vorliegende Aufgabe mit 1-basierter Indizierung.




3

MATL , 12 Bytes

t:XnG:QG^*sQ

Die Eingabe ist 0-basiert.

Probieren Sie es online!

Erläuterung

Betrachten Sie die Eingabe 5als Beispiel.

t      % Take n implicitly. Duplicate
       % STACK: 5, 5
:      % Range [1 2 ...n]
       % STACK: 5, [1 2 3 4 5]
Xn     % N-choose-k, vectorized
       % STACK: [5 10 10 5 1]
G:Q    % Push [2 3 ... n+1]
       % STACK: [5 10 10 5 1], [2 3 4 5 6]
G^     % Raise to n
       % STACK: [5 10 10 5 1], [32 243 1024 3125 7776]
*      % Multiply, element-wise
       % STACK: [160 2430 10240 15625 7776]
s      % Sum of array
       % STACK: 36231
Q      % Add 1. Display implicitly
       % STACK: 36232

2

R, 36 Bytes

sum(choose(n<-scan(),0:n)*(0:n+1)^n)

Die Vektorisierung von R ist hier nützlich, wenn Sie die Formel anwenden.


2

J , 19 Bytes

+/@((!{:)*>:^{:)@i.

Verwendet eine einseitige Indizierung.

Probieren Sie es online!

Erläuterung

+/@((!{:)*>:^{:)@i.  Input: integer n
                 i.  Range [0, 1, ..., n-1]
   (           )@    Operate on that range
             {:        Get the last value, n-1
          >:           Increment, range becomes [1, 2, ..., n]
            ^          Exponentiate. [1^(n-1), 2^(n-1), ..., n^(n-1)]
    ( {:)              Get the last value, n-1
     !                 Binomial coefficient. [C(n-1, 0), C(n-1, 1), ..., C(n-1, n-1)]
         *             Multiply
+/@                  Reduce by addition

1

Maxima, 39 Bytes

f(n):=sum(binomial(n,k)*(k+1)^n,k,0,n);


0

Axiom, 39 Bytes

f(n)==sum(binomial(n,i)*(i+1)^n,i=0..n)

Testcode und Ergebnisse

(35) -> [[i,f(i)] for i in 0..9]
   (35)
   [[0,1], [1,3], [2,18], [3,170], [4,2200], [5,36232], [6,725200],
    [7,17095248], [8,463936896], [9,14246942336]]

0

Gelee , 9 Bytes

cR×R‘*ƊS‘

Probieren Sie es online!

Wie es funktioniert

cR×R‘*ƊS‘ - Main link. Argument: n (integer)        e.g.   5
 R        - Range from 1 to n                              [1, 2, 3, 4, 5]
c         - Binomial coefficient                           [5, 10, 10, 5, 1]
      Ɗ   - Last three links as a monad:
   R      -   Link 1: Range from 1 to n                    [1, 2, 3, 4, 5]
    ‘     -   Link 2: Increment                            [2, 3, 4, 5, 6]
     *    -   Link 3: To the power of n                    [32, 243, 1024, 3125, 7776]
  ×       - Multiply, pairwise                             [160, 2430, 10240, 15625, 7776]
       S  - Sum                                            36231
        ‘ - Increment                                      36232
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.