es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Algoritmo aleatorio para encontrar si un arreglo tiene un 1 en él.

Tengo una pregunta en la que tengo una matriz que solo tiene ceros o está compuesta por la mitad de ceros y la mitad de unos. Necesito sugerir un algoritmo aleatorio que pueda decidir si la matriz tiene unos adentro.
Deben existir un 75% de probabilidades de éxito, por lo tanto solo puede fallar en 1/4 de las opciones y debe funcionar en O(1).
El tamaño de la matriz puede ser cualquier n.
Agradecería mucho su ayuda o ideas en esta pregunta.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Una posible solución a este problema es usar un generador de índices aleatorios para seleccionar un índice al azar del arreglo. Si el valor en este índice es 1, el algoritmo devuelve verdadero, indicando que al menos hay un 1 en el arreglo. Si el valor en este índice es 0, el algoritmo continúa seleccionando otro índice al azar hasta que haya revisado un número predeterminado de índices.

    Para lograr una tasa de éxito del 75%, podemos optar por revisar solo tres índices, ya que la probabilidad de encontrar un 1 en un arreglo medio lleno con tres índices aleatorios verificados es:

    1 – (1/2)³ = 75%

    Este enfoque tiene una complejidad de tiempo de O(1) ya que solo estamos revisando un número fijo de índices, independientemente del tamaño del arreglo.

    Aquí está el pseudocódigo del algoritmo sugerido:

    function hasOnes(array):
        for i in range(3):
            index = random(0, n-1) // seleccionar un índice aleatorio 
            if array[index] == 1:
                return true // el arreglo tiene al menos un 1
        return false // el arreglo no tiene ningún 1
    

Comments are closed.