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.
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?
Related Content
¿Se puede utilizar el aprendizaje automático para encontrar públicos objetivo para anuncios?
¿Cuál es el algoritmo para resolver el cubo de Rubik solo para la última esquina?
¿Cómo funcionan los algoritmos de YouTube?
Cómo encontrar subrangos no decrecientes y no crecientes en una matriz
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.
More Interesting
¿Por qué usar un diagrama de flujo es una mala práctica en la programación?
¿Es posible proporcionar un análisis de complejidad para todos los algoritmos en términos de theta?
¿Cómo pasan su tiempo exactamente los participantes en varios sitios de codificación de algoritmos?
¿Qué es el desaprendizaje en el algoritmo de aprendizaje automático?
¿Cuáles son las diferencias entre las estructuras de datos y los algoritmos?
¿Cuál es la operación que tiene la constante más pequeña?
He resuelto unos 52 problemas en SPOJ. ¿Debería mudarme a Codeforces ahora?
¿Cómo funciona la recursividad en Java?
Se dan N nodos idénticos. ¿Cuántos árboles binarios son posibles?
¿Qué es el algoritmo de Wagner y Fischer y cuál es su código de muestra en C ++?
¿Cuál es el orden cronológico de los algoritmos de reconocimiento facial?