Wie nähere ich mich der Vertical Sticks Challenge?


23

Dieses Problem stammt von interviewstreet.com

Wir werden eine Reihe von ganzen Zahlen gegeben , der darstellt Liniensegmente so , dass Endpunkte des Segments sind und . Stellen Sie sich vor, dass von oben auf jedem Segment ein horizontaler Strahl nach links geschossen wird und dieser Strahl stoppt, wenn er ein anderes Segment berührt oder auf die y-Achse trifft. Wir konstruieren ein Array von n ganzen Zahlen, , wobei gleich der Länge des Strahls ist, der von der Spitze des Segments geschossen wird . Wir definieren .n i ( i , 0 ) , ( i , y i ) , v 1 , . . . , V n v i i V ( y 1 , . . . , Y n ) = v 1 + . . . + v nY={y1,...,yn}ni(i,0)(i,yi)v1,...,vnviiV(y1,...,yn)=v1+...+vn

Wenn wir zum Beispiel , dann ist , wie im Bild unten gezeigt:[ v 1 , . . . , v 8 ] = [ 1 , 1 , 3 , 1 , 1 , 3 , 1 , 2 ]Y=[3,2,5,3,3,4,1,2][v1,...,v8]=[1,1,3,1,1,3,1,2]

Bildbeschreibung hier eingeben

Für jede Permutation von können wir berechnen . Wenn wir eine gleichmäßig zufällige Permutation von wählen , was ist der erwartete Wert von ?[ 1 , . . . , N ] V ( y P 1 , . . . , Y p n ) p [ 1 , . . . , N ] V ( y P 1 , . . . , Y p n )p[1,...,n]V(yp1,...,ypn)p[1,...,n]V(yp1,...,ypn)

Wenn wir dieses Problem mit dem naiven Ansatz lösen, ist es nicht effizient und läuft praktisch für immer für . Ich glaube, wir können dieses Problem lösen, indem wir den erwarteten Wert von für jeden Stick unabhängig berechnen , aber ich muss noch wissen, ob es einen anderen effizienten Ansatz für dieses Problem gibt. Auf welcher Basis können wir den erwarteten Wert für jeden Stab unabhängig berechnen?v in=50vi


Sie können die Linearität der Erwartung verwenden. Diese Frage ist wahrscheinlich angemessener bei math.SE

Antworten:


23

Stellen Sie sich ein anderes Problem vor: Wenn Sie Stöcke gleicher Höhe in n Schlitze platzieren müssten, dann den erwarteten Abstand zwischen den Stöcken (und den erwarteten Abstand zwischen dem ersten Stock und einem fiktiven Schlitz 0 ) und den erwarteten Abstand zwischen dem letzten Stock und einem fiktiven Slot n + 1 ) ist n + 1kn0n+1 da esk+1Lücken gibt, die in eine Längen+1passen.n+1k+1k+1n+1

Um auf dieses Problem zurückzukommen, ist ein bestimmter Stick daran interessiert, wie viele Sticks (einschließlich sich selbst) so hoch oder höher sind. Wenn diese Zahl , ist die erwartete Lücke links davon ebenfalls n + 1k .n+1k+1

Der Algorithmus besteht also einfach darin, diesen Wert für jeden Stick zu finden und die Erwartung zu addieren. Zum Beispiel, beginnend mit Höhen von , beträgt die Anzahl der Stöcke mit einer größeren oder gleichen Höhe [ 5 , 7 , 1 , 5 , 5 , 2 , 8 , 7 ] so ist die Erwartung 9[3,2,5,3,3,4,1,2][5,7,1,5,5,2,8,7].96+98+92+96+96+93+99+98=15.25

Dies ist einfach zu programmieren: zum Beispiel eine einzelne Zeile in R

V <- function(Y){ (length(Y) + 1) * sum( 1 / (rowSums(outer(Y, Y, "<=")) + 1) ) }

gibt die Werte in der Beispielausgabe im ursprünglichen Problem an

> V(c(1,2,3))
[1] 4.333333
> V(c(3,3,3))
[1] 3
> V(c(2,2,3))
[1] 4
> V(c(10,2,4,4))
[1] 6
> V(c(10,10,10,5,10))
[1] 5.8
> V(c(1,2,3,4,5,6))
[1] 11.15

1
Sehr interessant. Können Sie gefälligst ein wenig erarbeiten , warum der erwartete Abstand zwischen Sticks ; da es (zumindest für mich) nicht klar ist, wie es berechnet wurde. Vielen Dank. (n+1)/(k+1)
M. Alaggan

In meinem ersten Fall von Stöcken gleicher Höhe gibt es eine Länge n + 1 , die mit k + 1 Lücken gefüllt werden muss , sodass die durchschnittliche Lücke durch Teilen einer Lücke durch die andere entsteht. Dies ist die erwartete Lücke (oder der horizontale Strahl) vor einem bestimmten Stick (und vom letzten Stick bis n + 1 ). Es wird zur ursprünglichen Frage übergegangen, wobei Stöcke berücksichtigt werden, die so hoch oder höher sind als ein bestimmter Stock. kn+1k+1n+1
Henry

Sehr schön. Dies fasst meine Lösung vollständig zusammen; sind alle Höhen verschieden, so ist . E[V]=k=1nn+1k+1=(n+1)(Hn+11)=(n+1)Hnn
JeffE

2
@ Henry: Was war Ihre Begründung für die durchschnittliche Länge = (n + 1) / (k + 1), wenn die k-Stöcke gleich hoch waren und n Schlitze auftraten? Wenn ich k Sticks habe und die durchschnittliche Strahllänge eines dieser Sticks in jeder Permutation dieser k Sticks in n Slots wissen möchte, entspricht dies in der Tat Ihrem Ergebnis, aber ich verstehe nicht warum. Gibt es eine Logik oder haben Sie sie mathematisch abgeleitet, indem Sie das getan haben, was ich für 1 Stick und n Slots beschrieben habe, dann 2 Sticks und n Slots, ... k Sticks, n Slots und bemerkt haben, dass sie (n + 1) / ( k + 1) & le; Sie erwähnen das Hinzufügen eines Steckplatzes n + 1. Das scheint sehr kontraintuitiv zu sein.
Alexandre

3
Es ist eine Frage, mit der ich mich zuvor befasst habe. Beginnen Sie mit einem runden Tisch mit Sitzen und k + 1 Personen und setzen Sie sie nach dem Zufallsprinzip. Die Abstände zwischen Individuen sind offensichtlich mit dem Mittelwert ( n + 1 ) / ( k + 1 ) angegeben . Jetzt bricht die Tabelle am n + 1 - te Person, entfernen Sie diese Person und ihren Sitz, und die Tabelle begradigen. Jetzt haben Sie hier die Frage mit n Sitzen und k Leuten, aber dem gleichen iid Eigentum und dem gleichen Mittelwert. (Finde den seltenen Reim für Monat )n+1k+1(n+1)/(k+1)n+1thnk
Henry

11

Henrys Lösung ist einfacher und allgemeiner als diese!


ist ungefähr die Hälfte der erwarteten Anzahl von Vergleichen, die von randomisierter Quicksortierung durchgeführt werden.E[V]

Unter der Annahme, dass die Stöcke unterschiedliche Höhen haben , können wir eine geschlossene Lösung für wie folgt ableiten .E[Y]

ijXij=1X i j = 0 Y X i j = 1 Y j { Y i , , Y j - 1 }Yj=max{Yi,...,Yj}Xij=0YXij=1Yj{Yi,,Yj1}

Dann haben wir für jeden Index ( du warum?) Und daher V j = Σ j i = 1 X i j V = n Σ j = 1 v j = n Σ j = 1 j Σ i = 1 X i j .jvj=i=1jXij

V=j=1nvj=j=1ni=1jXij.

Die Linearität der Erwartung impliziert sofort, dass

E[V]=E[1ijnXij]=1ijnE[Xij].

Da entweder oder , haben wir . 0 1 E [ X i j ] = Pr [ X i j = 1 ]Xij01E[Xij]=Pr[Xij=1]

Schließlich, und das ist wichtig , die Bit-Werte , da die in sind verschieden und permutierten gleichmäßig, jedes Element der Untergruppe mit gleicher Wahrscheinlichkeit die seine größte in dieser Teilmenge Element. Somit ist . (Wenn die Elemente von nicht verschieden sind, haben wir immer noch .){ Y i , . . . , Y j } Pr [ X i j = 1 ] = 1Y{Yi,...,Yj} YPr[Xij=1]1Pr[Xij=1]=1ji+1YPr[Xij=1]1ji+1

Und jetzt haben wir nur ein bisschen Mathe. wobei die te harmonische Zahl bezeichnet .

E[V]=j=1ni=1jE[Xij][linearity]=j=1ni=1j1ji+1[uniformity]=j=1nh=1j1h[h=ji+1]=h=1nj=hn1h[1hjn]=h=1nnh+1h=((n+1)h=1n1h)(h=1n1)=(n+1)Hnn
Hnn

Nun sollte es trivial sein, (bis zur Gleitkomma-Genauigkeit) in -Zeit zu berechnen .E[V]O(n)


Setzt dies voraus, dass die Stöcke eine unterschiedliche Höhe haben?
Aryabhata

Ja, es nimmt unterschiedliche Höhen an. (Anscheinend habe ich die Frage falsch verstanden.) Die Gleichwertigkeit mit randomisierter Quicksortierung bleibt bestehen, wenn es Bindungen gibt, aber nicht die geschlossene Lösung.
JeffE

4

Wie in den Kommentaren erwähnt, können Sie die Linearität der Erwartung verwenden.

Sortieren Sie das : .yy1y2yn

Berücksichtigen Sie für jedes den erwarteten Wert von .yivi=E[vi]

Dann istE[i=1nvi]=i=1nE[vi]

Eine einfache und naive Möglichkeit, zu berechnen, wäre zunächst, eine Position für . Sag .E[vi]yij

Berechnen Sie nun die Wahrscheinlichkeit, dass Sie an Position einen Wert .j1yi

Dann ist die Wahrscheinlichkeit, dass Sie bei einen Wert und bei einen Wertj1<yij2yi

und so weiter, wodurch Sie berechnen können .E[vi]

Sie können es wahrscheinlich schneller machen, indem Sie tatsächlich rechnen und eine Formel erhalten (ich habe es aber selbst nicht ausprobiert).

Hoffentlich hilft das.


3

Erweiterung der Antwort von @Aryabhata:

Fixiere ein und nehme an, dass sich das Item an Position . Der genaue Wert der Höhe spielt keine Rolle, es kommt darauf an, ob die Elemente größer oder gleich oder nicht. betrachte daher die Menge von Elementen , wobei 1 ist, wenn , und andernfalls 0 ist.iyijyiZ(i)zk(i)ykyizk(i)

Eine Permutation auf der Menge induziert eine entsprechende Permutation auf die Menge . Man betrachte zum Beispiel die folgende Permission der Menge : "01000 (1) ". Der Punkt ist der Punkt in Klammern an Position , und die mit " " bezeichneten spielen keine Rolle.Z(i)YZ(i)zi(i)j

Der Wert von ist dann 1 plus die Länge der Folge von konsektiven Nullen direkt links von . Daraus folgt, dass tatsächlich 1 plus die erwartete Länge aufeinanderfolgender Zeoren ist, bis die erste "1" erfüllt ist, wenn wir höchstens Bits aus der Menge auswählen. (ohne Ersatz). Dies erinnert an die geometrische Verteilung, mit der Ausnahme, dass sie ersatzlos ist (und die Anzahl der Ziehungen begrenzt ist). Die Erwartung ist , auf genommen wird als auch , als einheitliche Wahl auf dem Satz von Positionen .vizi(i)E(vi)j1Z(i)zi(i){ 1 , , n }j {1,,n}

Sobald dies berechnet ist (in dieser Richtung ), können wir den Zeilen von @ Aryabhatas Antwort folgen.


-2

Ich verstehe nicht wirklich, was du meinst, von Tags scheint es, dass du nach einem Algorithmus suchst.

Wenn ja, wie hoch ist die erwartete zeitliche Komplexität? mit den Worten: "Wenn wir dieses Problem mit dem naiven Ansatz lösen, ist es nicht effizient und läuft für n = 50 praktisch für immer." es scheint mir, dass Ihr naiver Ansatz es in exponentieller Zeit löst.

Ich habe einen O (n ^ 2) -Algorithmus im Auge.

assume int y[n], v[n] where v[i] initialized with 1; as described in the question
for (i=1;i<n;i++) 
   for ( j=i-1 ; j>=0 && y[j]<y[i] ; j--) v[i]++;
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.