2012-02-22 13 views
11

¿Cómo elegirías un elemento aleatorio uniforme en la lista vinculada con longitud desconocida en una pasada o si no en dos?¿Cómo elegirías un elemento aleatorio uniforme en la lista vinculada con longitud desconocida?

+4

Me temo que tendrá que poner un poco más de esfuerzo en su pregunta y dejar en claro lo que está pidiendo –

+0

bien. ¿cómo elegirías un elemento aleatorio uniforme en la lista vinculada con longitud desconocida? – exlux15

+0

Si esa es su pregunta, es una pregunta interesante. Por favor, edite su pregunta en consecuencia y lo revocaré –

Respuesta

22

Utilice el muestreo de depósito http://en.wikipedia.org/wiki/Reservoir_sampling. Solo necesita una pasada de los datos.

Para recoger un elemento:

  1. selección de primera elemento (probabilidad 1)
  2. Más tarde, para el elemento k-ésimo recogerlo con una probabilidad de 1/k (es decir, sustituir la selección existente con el elemento k-ésimo)

Le demostraré que esto da como resultado una selección uniforme de elementos.

+0

Intenté usar eso, pero esto elegirá k elementos aleatorios. pero solo necesitaré seleccionar el primer elemento – exlux15

+0

@AnilBabooram Use k = 1? De todos modos, el algoritmo mencionado en la publicación (no wiki) es para un caso de elemento. – ElKamina

+1

ok si uso un ciclo while along ++ length para recorrer la lista. Si uso i = rand()% de longitud, ¿"yo" sería la elección aleatoria en el nodo actual? – exlux15

Cuestiones relacionadas