Cada vez que intento resolver un problema en CodeChef o SPOJ, aparece el error de límite de tiempo excedido. ¿Qué tengo que hacer? ¿Me faltan algoritmos?

Gracias por el A2A.
Como señalaron las respuestas anteriores, verifique la complejidad temporal de su algoritmo. Aquí hay una guía aproximada: –
Si el tamaño de la entrada (digamos N) es ~ 10 ^ 7, un algoritmo de orden O (N) se ajustará cómodamente en un límite de tiempo de 1 segundo. 10 ^ 8 será un caso límite y 10 ^ 9 excederá el límite de tiempo. En otras palabras, un procesador estándar puede hacer 10 ^ 7 cómputos enteros cómodamente en un segundo, 10 ^ 8 cómputos enteros muy estrictamente en un rango de 1 segundo y excede drásticamente el límite de tiempo en caso de 10 ^ 9 cómputos enteros.
Si cree que su algoritmo es eficiente en el tiempo, una vez más verifique cualquier caso de esquina en el que pueda atascarse en algún tipo de bucle infinito.
Si cree que ha verificado todos los casos de esquina posibles y su algoritmo debería funcionar, es posible que se enfrente a algunos problemas basados ​​en el idioma, por ejemplo, intente cambiar sus cins y couts con scanfs e printfs. En C ++, cin y cout manejan todos los tipos de datos como un objeto genérico y, por lo tanto, tardan más tiempo en procesarse. Dado que tenemos que especificar el tipo de datos en scanf y el procesamiento de printf se reduce dando mejores resultados de tiempo.
Espero que encuentres esto útil.

Cometes errores, te caes. Aprendes de esos errores, te levantas.
Siempre que obtenga una respuesta incorrecta o un TLE, intente analizar dónde puede estar el problema. La potencia de cómputo disponible con una computadora es limitada y solo puede realizar tantas operaciones por segundo. Una buena aproximación a esto es 10 ^ 7 operaciones elementales (suma, resta, condicionales, etc.) por segundo. Entonces, dado su algoritmo, necesita estimar el número de operaciones que necesita ejecutar, lo que le dará el tiempo aproximado que el algoritmo tomará en completarse. Las razones más comunes para TLE son el uso de funciones de E / S más lentas cuando se espera que el programa realice muchas operaciones de E / S, errores lógicos que resultan en bucles infinitos, algos ineficientes que tardan una eternidad en ejecutarse, uso incorrecto de las E / S O bibliotecas, etc. Comprender y aprender a usar las estructuras de datos y algoritmos básicos. Si tiene una matriz A ordenada de 10 ^ 8 elementos y necesita buscar un elemento en esa matriz, tiene sentido usar la búsqueda binaria que necesita aprox. 27 operaciones en lugar de una búsqueda lineal que necesitará 10 ^ 8 operaciones. Si hay una gran secuencia de elementos que desea verificar existe en la matriz A, primero debe almacenar los elementos de A en una tabla hash y luego hacer las comprobaciones de existencia en esa tabla que requerirán la operación O (1) por verificación en lugar de operaciones O (log (n)) por verificación en caso de búsqueda binaria.

En cada plataforma de codificación en línea, proporcionan casos de prueba de muestra y cuando envía el código, se compara con otro conjunto de casos de prueba que generalmente son mucho más grandes que los casos de prueba de muestra. Si obtiene un error de límite de tiempo superior, significa que su código no se ejecuta en el límite de tiempo requerido cuando se prueba en los casos de prueba internos. Necesita optimizar su código para evitarlo. Le sugiero que use HackerEarth ya que en HackerEarth puede ver los casos de prueba internos después de enviar las soluciones que podrían ayudar en la depuración y la optimización. Además, los límites inferior y superior de las entradas también están muy bien definidos en HackerEarth. Junto con todo esto también revise los comentarios sobre la pregunta, obtendrá buena información a partir de ahí.

Intente analizar el peor de los casos de la entrada y vea el tiempo de ejecución. Tener un buen conocimiento de varias estructuras de datos y algoritmos, también cuándo y cómo implementarlo adecuadamente.

Cuando envíe su código, asegúrese de resolver el problema con un buen algoritmo. Si conoce el análisis de la complejidad del tiempo y la gran notación, entonces debe recordar que una diferencia de algoritmo puede marcar una gran diferencia para los valores de entrada altos. así que debería considerar usar un buen algoritmo que sea más eficiente (con respecto al tiempo). Espero que ayude.