Saltar al contenido

Muestra una secuencia aleatoria no decreciente

Basta ya de indagar por todo internet ya que llegaste al espacio correcto, tenemos la solución que necesitas hallar sin complicaciones.

Solución:

Python, 89 bytes

from random import*
lambda n,k:[x-i for i,x in enumerate(sorted(sample(range(1,n+k),k)))]

Generando un creciente secuencia en lugar de una no decreciente uno sería sencillo: esto es solo un subconjunto aleatorio de k números entre 1 y nordenado.

Pero podemos convertir una secuencia creciente en una no decreciente al reducir cada espacio entre números consecutivos en 1. Entonces, un espacio de 1 se convierte en un espacio de 0, haciendo números iguales. Para ello, disminuya la i‘th mayor valor por i

r[0], r[1], ..., r[n-1]  =>  r[0]-0, r[1]-1, ..., r[n-1]-(n-1)

Para que el resultado sea de 1 a nla entrada debe ser de 1 a n+k-1. Esto da una biyección entre secuencias no decrecientes de números entre 1 y na secuencias crecientes entre 1 y n+k-1. La misma biyección se usa en el argumento de estrellas y barras para contar tales secuencias.

El código usa la función python random.sampleel cual toma k muestras sin reemplazo de la lista de entrada. Ordenarlo da la secuencia creciente.

05AB1E, 13 bytes

+

¡Pruébelo en línea!

Explicación

+

Python, 87 bytes

from random import*
f=lambda n,k:k>random()*(n+k-1)and f(n,k-1)+[n]or k*[7]and f(n-1,k)

La probabilidad de que el valor máximo posible n se incluye igual k/(n+k-1). Para incluirlo, colóquelo al final de la lista y disminuya los números necesarios restantes k. Para excluirlo, disminuya el límite superior n. Luego, repite hasta que no se necesiten más valores (k==0).

de pitón random no parece tener una variable de Bernoulli incorporada: 1 con alguna probabilidad y 0 en caso contrario. Entonces, esto verifica si un valor aleatorio entre 0 y 1 generado por random cae por debajo k/(n+k-1). Python 2 haría la proporción como una división flotante, por lo que en su lugar multiplicamos por el denominador: k>random()*(n+k-1).

Calificaciones y comentarios

Si aceptas, tienes la libertad de dejar un ensayo acerca de qué te ha parecido esta crónica.

¡Haz clic para puntuar esta entrada!
(Votos: 1 Promedio: 5)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Respuestas a preguntas comunes sobre programacion y tecnología