¿Cuál es la comparación en algoritmo de Sieve of Sundaram y Sieve of Eratosthenes con tiempo-complejidad?

  • Tamiz de Sundaram:
    • Alogrithm:
      1. Cree una lista de N enteros positivos (1,2 …, N)
      2. Iterar sobre ellos usando el bucle anidado de i, j donde [matemática] 1 <= i <= j para todo i, j ε N [/ matemática]
      3. Marque [matemáticas] i + j + 2 * i * j [/ matemáticas] como no primo.
      4. Los números restantes se duplican y se incrementan en uno, es decir, [matemáticas] n = 2 * k + 1 [/ matemáticas]
    • Salida: Esto dará todos los enteros primos impares, es decir, enteros primos, excepto 2
    • Complejidad del tiempo:
      1. Tiempo necesario para iterar sobre N números y marcar no primos, [matemática] T (N) = N + T (N – 1) [/ matemática]
      2. La operación anterior reducirá la lista de tamaños a la mitad.
      3. Por lo tanto, el tiempo empleado en el siguiente paso (N – 1) será, [matemática] T (N – 1) = N / 2 + T (N – 2) [/ matemática]
      4. Cuando i, j es máximo, no quedan más no primos. Entonces el caso trivial sería [matemática] T (1) = k [/ matemática]
      5. Para duplicar el resto e incrementar en uno, el tiempo será constante para cada uno. Total de [matemática] O (N) [/ matemática] que es definitivamente menor que el tiempo necesario para eliminar los no primos.
      6. Por lo tanto, [matemáticas] T (N) = N + N / 2 + N / 3 +… + 1 = [/ matemáticas] [matemáticas] O (N log N) [/ matemáticas]

  • Tamiz de Eratóstenes:
    • Algoritmo:
      1. Cree una lista de N enteros positivos a partir de 2 (2 …, N)
      2. Iterar sobre la lista en bucle anidado por i, j donde [matemática] 2 <= i <= j para todo i, j ε N [/ matemática]
      3. Para cada primo [matemático] i [/ matemático], marque [matemático] i * j [/ matemático] como no primo.
      4. Los números restantes se imprimen tal como están.
    • Salida: todos los enteros primos incluyendo 2
    • Complejidad del tiempo:
      1. Tiempo necesario para iterar sobre N no primo, [matemática] T (N) = N + T (N – 1) [/ matemática]
      2. En el siguiente paso, encontrar el número primo inmediato lleva algo de tiempo t y [matemáticas] T (N – 1) = t * N / 2 + t * T (N – 1) [/ matemáticas]
      3. El caso trivial, encontrar el último no primo es nuevamente [matemática] T (1) = k [/ matemática]
      4. Iterar sobre el descanso tomará tiempo constante para cada uno, es decir, la complejidad total sería [matemática] O (N) [/ matemática] que es menor que la búsqueda.
      5. Por lo tanto, [matemáticas] T (N) = N + N / 2 * (1 + 1/2 +… + 1 / N) + N / 3 * (1 + 1/2 +… + 1 / N) +… + 1 = O (N log (log N)) [/ math]

More Interesting

¿Cómo podría un algoritmo que crea un cambio en el comportamiento del consumidor crear valor?

Cómo ejecutar cruces en algoritmos genéticos con cromosomas codificados por gráficos

Además de la velocidad, ¿qué otras medidas de eficiencia se podrían usar en un entorno real?

¿Por qué alguien no puede encontrar un algoritmo para la detección de imágenes que funcione mejor que SIFT (Scale Invariant Feature Transform)? ¿De dónde viene exactamente el problema?

¿Dónde se usa la cola prioritaria?

Soy un desarrollador de fuerza bruta, ¿cómo puedo mejorar mis habilidades de algoritmos?

¿Cuáles son algunos de los algoritmos de aprendizaje automático sin supervisión utilizados para la detección de spam?

Cómo usar la primera búsqueda en profundidad en un laberinto

¿Cuáles son algunas formas diferentes de calcular la mediana de una matriz en Java?

¿Qué es un programa simple de C ++ para insertar un nodo en una lista vinculada?

¿Por qué deberíamos instanciar una matriz en una línea diferente?

¿Qué son los proyectos de código abierto? Soy muy bueno en C ++, estructuras de datos y algoritmos. ¿Puedo contribuir a algunos proyectos de código abierto? Si es así, ¿cómo? ¿Tendré que aprender algún idioma nuevo?

Cómo aplicar mi enfoque para resolver el problema antes de abrir la solución

Cómo encontrar los diferentes números de subconjuntos contiguos de una matriz usando Java

¿Cuáles son las ventajas y desventajas de comparar la búsqueda de árboles de Monte Carlo y la programación dinámica aproximada?