¿Encontrar la complejidad temporal de los algoritmos está relacionado con las matemáticas discretas?

Yo iría un paso más allá y diría que los algoritmos tienen que ver con estructuras discretas y, por lo tanto, con sus matemáticas.
Personalmente, hasta donde puedo “ver”, un Algoritmo es una secuencia de “saltos bien definidos” dentro del espacio (de elementos) de una estructura Discreta.

Tomando el ejemplo de la clasificación. Aquí un elemento de estructura discreta sería una permutación. Y cualquier algoritmo de ordenación consiste simplemente en saltar de una permutación a otra, de manera bien definida , hasta que se alcanza el elemento deseado, es decir, una permutación con un orden consistente (todo creciente o todo decreciente). La forma “bien definida” de calcular el “próximo” elemento de un salto, wrt un elemento inicial, es lo que llamamos un algoritmo.

Y, ¿cómo sabemos que un elemento particular es el “deseado”? Necesitamos tener una forma específica de verificar si un elemento dado es una “solución”, o no. En otras palabras, la estructura discreta debe ser “decidible”.

La idea actual de la Complejidad del tiempo es ver cuántos “saltos” deben tomar los algoritmos para alcanzar el elemento discreto “deseado”. No tiene nada que ver con “Tiempo”, en sentido real.

Ahora, el tiempo real requerido para calcular el “próximo” elemento al que “saltar”, Y cómo “se acerca” al “elemento requerido”, después de cada “salto” debe jugar un rol importante para determinar la “bondad” de un Algo El mejor Algo sería el que nos proporciona el elemento discreto requerido en un solo salto (como magia) y después de cálculos mínimos. Lo peor sería el que más bien tiene que atravesar cada elemento del espacio discreto en consideración.

En este modelo, también puede haber algunos Algos que simplemente “parecen” viajar en ese espacio discreto, prometiendo llegar a nuestro destino deseado, pero en realidad nunca lo alcanzarán de todos modos. Decimos esto un bucle infinito. Para saber de manera eficiente en qué escenario se produce dicha situación, necesita conocer la teoría de grupo.

Entonces, en base a mis especulaciones mencionadas anteriormente, le sugiero que, al menos, obtenga libros sobre Matemática discreta y Álgebra abstracta , mientras revisa la forma predominante de estudiar algoritmos. Porque “adquirir experiencia” y “ser maduro” son dos cosas independientes.

Si, en cierto modo.
Los algoritmos que involucran algún tipo de relación de recurrencia están relacionados con la matemática discreta. Aprenderá a resolver la relación de recurrencia en Matemática discreta.
Mencionó que tenía problemas para comprender la complejidad temporal de Merge Sort, que implica Divide & Conquer. Por su conocimiento, debo decirle que muchos algoritmos que involucran Divide & Conquer pueden resolverse usando el teorema Master que involucra tres casos que dependen del número de subproblemas, el tamaño del subproblema y el costo del trabajo realizado fuera de las llamadas recursivas.

Sí, por supuesto, porque la complejidad del tiempo es estudiar el rendimiento de los algoritmos. entonces comparamos, analizamos, calculamos, en algunos casos hacemos suposiciones . La teoría de la suposición está absolutamente relacionada con las matemáticas discretas.

Ejemplo
Complejidad del tiempo en notación theta grande de los siguientes algoritmos.

  1. suma = 0;

para (i = 0; i para (j = 1; j

sum ++;

En este programa tiene dos bucles, un bucle externo que interactúa n veces y un bucle interno que itera aproximadamente log4 (n2) = 2log4 (n) veces. Por lo tanto, hay aproximadamente 2nlog4 (n) instrucciones de tiempo constante (con la relación que tiende a 1 como n tiende a infinito), por lo tanto, el programa se ejecuta en tiempo Θ (nlogn).

2. suma = 0;

para (i = n; i> 0; i = i / 4)
para (j = 0; j

sum ++;
En este programa, el bucle externo se ejecuta aproximadamente log4n veces, y el bucle interno itera n2 veces. Por lo tanto, hay aproximadamente n2log4n instrucciones de tiempo constante (con la relación que tiende a 1 como n tiende al infinito), por lo tanto, el programa se ejecuta en tiempo Θ (n2logn).

Las matemáticas discretas están relacionadas porque se trata de conjuntos limitados, lo que a veces permite un tipo de respuesta de fuerza bruta, si simplemente intenta todas las posibilidades.
Una ordenación por fusión significa que su algoritmo solo tiene que comparar el valor actual en un índice en cada lista, porque puede suponer que cada lista ya ha sido ordenada. El algoritmo solo tiene que decidir qué lista elegir para la ubicación de destino de la lista unida.
Empieza desglosando la lista de origen en pares, ordénelos y luego combínelos recursivamente, luego con quads, etc., hasta que se ordene toda la lista final.
Pruébelo manualmente con varias listas de tamaños, con el peor de los casos y el mejor valor de caso. Obtendrá una idea de cómo evaluaría el índice de complejidad.

Sí.
Está relacionado con Matemática discreta y MFCS (Mathematical Foundation of Computer Science)