¿Podemos contar una tarea como una instrucción al calcular un algoritmo?

Asignar / establecer un valor es una de las operaciones más fundamentales para un algoritmo. Las operaciones se basan en instrucciones. Entonces sí, necesitas contarlos.

Quería pasar el resto de mi respuesta explicando algunos matices de la respuesta de Rohit Chauhan a ¿Podemos contar una tarea como instrucción mientras calculamos un algoritmo? no consideró correctamente el cálculo de la complejidad de un algoritmo. Estoy de acuerdo con la primera parte de la respuesta de Rohit, pero no creo que sus afirmaciones posteriores sean completamente precisas. Puede hacer la primera parte de eso, pero creo que esto pierde el panorama general de por qué puede hacer esto.

“Pero en el caso de calcular la complejidad de un algoritmo, tales asignaciones se descuidan ya que son una operación de tiempo constante. Los bucles y las operaciones condicionales múltiples son las que le cuestan más en términos de complejidad “.

No estoy de acuerdo con esta interpretación. No es que descuidemos estas tareas, depende de dónde ocurran (como en cuántas veces ocurren). Déjame darte un ejemplo, aquí está BubbleSort (de Bubble sort – Wikipedia):

Las líneas alrededor del azul (pido disculpas por el descuido, solo estaba usando la herramienta de recorte), cualquiera de estos debería ser suficiente en el peor de los casos para contar para obtener la función de crecimiento con la que desarrolla el límite asintótico. Observe que tanto swap (A [i-1], A [i]) como swapped = true son técnicamente un número constante de declaraciones de asignación. ¿Pero adivina que? El número de estos se basa completamente en el tamaño de entrada debido al bucle for. Puede ir a la derecha para el bucle for en la parte superior (que es lo que creo que Rohit dice), pero eso sería ignorar la razón por la que contaría el bucle for en lugar de lo que está dentro del bucle for, ya que todos Las líneas de pseudocódigo (sin incluir los comentarios, obviamente) son líneas válidas para contar. No descuidamos estas líneas. Es solo porque se supone que las asignaciones toman un tiempo constante por lo que usted va directamente al ciclo for, pero como dije, bajo esta suposición, cualquiera de estas líneas es correcta para contar como un barómetro para derivar la función de crecimiento en el análisis. De hecho, podría contar todas las líneas que he indicado y todas las demás que se ejecutan en el peor de los casos y producen exactamente el mismo límite asintótico. Dicho esto, estas líneas se pueden descuidar (no es que se descuiden), observe la diferencia.

“Si se escribe un algoritmo, se deben mencionar todos los pasos, inicialización, asignación, entradas (a veces esto también se toma en cálculos de complejidad de tiempo), condiciones, etc.”

No, cuando analizamos un algoritmo, siempre debemos considerar el tamaño de entrada (entradas) al analizar el algoritmo. De lo contrario, podría estar engañando a las personas sobre la eficacia de su algoritmo.

Hola,

Bueno, sí,

Debe contarse como una instrucción.

Cualquier operación que realice, recuerde cualquier OPERACIÓN, será una instrucción y debe mencionarse en el algoritmo. Si estás hablando de escribir un algoritmo.

Pero en caso de calcular la complejidad de un algoritmo, tales asignaciones se descuidan ya que son una operación de tiempo constante. Los bucles y las operaciones condicionales múltiples son las que le cuestan más en términos de complejidad.

Si se escribe un algoritmo, se deben mencionar todos los pasos, inicialización, asignación, entradas (a veces esto también se toma en cálculos de complejidad de tiempo), condiciones, etc.

Espero que esto ayude.

Gracias.

More Interesting

Cómo resolver el problema de los módems (SPOJ.com - Problema EC_MODE) en SPOJ

¿Por qué Java utiliza diferentes algoritmos de clasificación para diferentes tipos de datos?

Si solo quiero escribir algoritmos y lógica, y no quiero molestarme con la interfaz de usuario y la codificación frontal, ¿qué tipo de posición de software me conviene más?

¿Cómo resolvemos el problema B, 'Can of Worms', del Chicago Invitational Programming Contest 2013?

¿Estudiar algoritmos mejorará mis habilidades cotidianas de toma de decisiones / resolución de problemas?

¿Qué pregunta deben hacer los principiantes en Codeforces, SPOJ, etc. para aprender algoritmos estándar?

Cómo escribir un algoritmo que diseña guiones

¿Cuáles son las aplicaciones prácticas de los diversos algoritmos que estudian los estudiantes de CS en Data Structures?

¿Puedo aprender el algoritmo yo mismo?

Digamos que encontramos un algoritmo que resuelve problemas de NP-Complete en tiempo polinómico pero no podemos probarlo. ¿Cuáles serían las consecuencias?

¿Es cierto que no debería importarme tanto aprender lenguajes de programación sino construir una gran base de estructuras de datos y algoritmos?

¿Cuál es la diferencia entre árboles binarios completos y completos?

Probé el problema 'Impresión espiral de matriz' durante 2 días. Incluso después de ver la solución, sigo fallando. ¿Qué tengo que hacer?

¿Qué es un contador Loglog?

¿Podemos hacerlo mejor en complejidad de tiempo que el siguiente código para calcular la suma de los primeros 10 primos?