Cómo determinar la complejidad temporal de cualquier código de manera fácil y eficiente

Ugh, no sé cómo decirte esto, así que te lo contaré: no puedes. Un método fácil y eficiente para analizar la complejidad de tiempo de un programa no existe, y nunca existirá, y de hecho es imposible incluso en principio, y hay una metáfora revestida de hierro para respaldar eso *. Crear y evaluar la corrección y la eficiencia del código siempre será un asunto arduo, incierto y serpenteante. Lo siento amigo.

Pero en serio, consiga un buen libro sobre teoría de algoritmos, p. Ej.

http://www.amazon.com/Algorithm-…
http://www.amazon.com/Introducti…
http://www.amazon.com/Algorithms…

y poner en los patios duros. Hay algunos paradigmas de diseño extremadamente útiles que vale la pena aprender, y puede ser muy productivo sin ser un estudiante graduado, pero no espere que sea fácil. Muchos académicos hacen carreras enteras a partir del análisis de algoritmos.

* Ejercicio para estudiantes de TCS: pruebe que “la máquina M de Turing se detiene en todas las entradas [matemáticas] y \ in \ Sigma ^ * [/ matemáticas] en el tiempo [matemáticas] c | y | ^ d [/ matemáticas] para algunas [matemáticas ] c, d \ in \ mathbb {N} [/ math]? ” Es indecidible.

Sugeriría leer Introducción a los algoritmos. Proporciona formas fáciles de calcular y resolver recurrencias basadas en ecuaciones. Los métodos en los primeros capítulos (sustitución / inducción, maestro, etc.) son útiles.

Un ejemplo del libro es T (n) = 2T (n / 2) + n. Un algoritmo modelado por esta función es uno que ejecuta un pedido que requiere tiempo lineal (como buscar en una matriz) y luego hace recursivamente dos nuevos pedidos que son la mitad del tamaño. Usando el método del árbol de recursión en el libro, la complejidad es n lg n.