Este problema está tomado de interviewstreet.com
Se nos da una matriz de enteros que representa segmentos de línea de modo que los puntos finales del segmento son ( i , 0 ) y ( i , y i ) . Imagine que desde la parte superior de cada segmento se dispara un rayo horizontal hacia la izquierda, y este rayo se detiene cuando toca otro segmento o golpea el eje y. Construimos un conjunto de n enteros, v 1 , . . . , vv i i V ( y 1 , . . . , Y n ) = v 1 + . . . + v n , dondees igual a la longitud del disparo de rayos desde la parte superior del segmento. Definimos.
Por ejemplo, si tenemos , entonces , como se muestra en la imagen a continuación:
Para cada permutación de , podemos calcular . Si elegimos una permutación uniformemente aleatoria de , ¿cuál es el valor esperado de ?[ 1 , . . . , N ] V ( y p 1 , . . . , Y p n ) p [ 1 , . . . , N ] V ( y p 1 , . . . , Y p n )
Si resolvemos este problema usando el enfoque ingenuo, no será eficiente y se ejecutará prácticamente para siempre para . Creo que podemos abordar este problema calculando de forma independiente el valor esperado de para cada palo, pero aún necesito saber si existe otro enfoque eficiente para este problema. ¿Sobre qué base podemos calcular el valor esperado para cada barra de forma independiente?v i
fuente
Respuestas:
Imagine un problema diferente: si tuviera que colocar palos de igual altura en n ranuras, entonces la distancia esperada entre los palos (y la distancia esperada entre el primer palo y una ranura nocional 0 , y la distancia esperada entre el último palo y un nocional ranura n + 1 ) es n + 1k n 0 n+1 ya que hayespacios dek+1para caber en una longitudn+1.n+1k+1 k+1 n+1
Volviendo a este problema, un palo en particular está interesado en cuántos palos (incluido él mismo) son tan altos o más altos. Si este número es , entonces la brecha esperada a su izquierda también es n + 1k .n+1k+1
Entonces, el algoritmo es simplemente encontrar este valor para cada palo y sumar las expectativas. Por ejemplo, comenzando con alturas de , el número de palos con una altura mayor o igual es [ 5 , 7 , 1 , 5 , 5 , 2 , 8 , 7 ] entonces la expectativa es 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
Esto es fácil de programar: por ejemplo, una sola línea en R
da los valores en la salida de muestra en el problema original
fuente
¡La solución de Henry es más simple y más general que esta!
es aproximadamente la mitad del número esperado de comparaciones realizadas por el ordenamiento rápido aleatorio.E[V]
Suponiendo que los palos tienen alturas distintas , podemos derivar una solución de forma cerrada para siguiente manera.E[Y]
Para cualquier índice , dejar que X i j = 1 si Y j = max { Y i , . . . , Y j } y X i j = 0 de lo contrario. (Si los elementos de Y no son distintos, entonces X i j = 1 significa que Y j es estrictamente mayor que cada elemento de { Y ii≤j Xij=1 Yj=max{Yi,...,Yj} Xij=0 Y Xij=1 Yj .){Yi,…,Yj−1}
Entonces, para cualquier índice , tenemos v j = ∑ j i = 1 X i j (¿Ves por qué?) Y por lo tanto V = n ∑ j = 1 v j = n ∑ j = 1 j ∑ i = 1 X i j .j vj=∑ji=1Xij
La linealidad de la expectativa implica inmediatamente que
Como es 0 o 1 , tenemos E [ X i j ] = Pr [ X i j = 1 ] .Xij 0 1 E[Xij]=Pr[Xij=1]
And now we just have some math.
Now it should be trivial to computeE[V] (up to floating point precision) in O(n) time.
fuente
As mentioned in the comments, you can use Linearity of Expectation.
Sort they : y1≤y2≤⋯≤yn .
For eachyi consider the expected value of vi=E[vi] .
ThenE[∑ni=1vi]=∑ni=1E[vi]
One straight-forward and naive way to computeE[vi] would be first fix a position for yi . Say j .
Now compute the probability that at positionj−1 you have a value ≥yi .
Then the probability that atj−1 you have a value <yi and at j−2 you have a value ≥yi
and so on which will allow you to computeE[vi] .
You can probably make it faster by actually doing the math and getting a formula (I haven't tried it myself, though).
Hope that helps.
fuente
Expanding on the answer of @Aryabhata:
Fix ani , and assume the item yi is at position j . The exact value of the height is immaterial, what matters is whether the items are greater than or equal to yi or not. Therefore consider the set of items Z(i) , where z(i)k is 1 if yk≥yi , and z(i)k is 0 otherwise.
A permutation on the setZ(i) induces an corresponding permutation on the set Y . Consider for instance the following permuation of the set Z(i) : "01000(1)… ". The item z(i)i is the one is brackets, at position j , and the items denoted by "… " don't matter.
The value ofvi is then 1 plus the length of the run of consective zeros just to the left of z(i)i . It follows that E(vi) is actually 1 plus the expected length of consecutive zeors, until the first "1" is met, if we pick at most j−1 bits from the set Z(i)∖z(i)i (without replacement). This is reminiscent of the geometric distribution, except that it would be without replacement (and bounded number of draws). The expectation is to be taken on j as well, as a uniform choice on the set of positions {1,…,n} .
Once this is computed (along these lines), we can follow the lines of @Aryabhata's answer.
fuente
I dont really understand what do you demend, from tags it seems you are looking for an algorithm.
if so, what is the expected time complexity? by saying: "If we solve this problem using the naive approach it will not be efficient and run practically forever for n=50." it seems to me that your naive approach solves it in exponential time.
i do have a O(n^2) algorithm in mind tho.
fuente