Elegir el idioma apropiado al comenzar la programación competitiva es el factor más importante. Generalmente, elegimos ese lenguaje que tiene una sintaxis corta y se ejecuta muy rápido o que nos es familiar, y conocemos todos los patrones de trabajo de ese particular, ya sea Java o C++.
La mayoría de los programadores usan C++ para la programación competitiva, y también muchos programadores antiguos cambian a C++. Los programadores competitivos mejor calificados como Gennady Korotkevich, Errichto y muchos otros programadores usan C++ para la programación competitiva, pero ¿por qué el manejo de Java para la programación competitiva es muy inferior al de C++? entendamos esto
Programa de adición simple en C++:
Programa de adición simple de Java:
Podemos ver que el tiempo de ejecución y la memoria de C++ son mucho más pequeños que el programa Java. Esto crea un gran problema para los grandes programas.
Hay varias razones por las que Java es lento para la programación competitiva en comparación con C++ que hace que los programadores lo eviten. Algunos de los más comunes se dan a continuación…
1. Elegir la clase incorrecta para las operaciones de E/S o usar una sintaxis incorrecta
El lenguaje Java no es muy lento en comparación con C++ . Hay dos clases que generalmente se usan para las operaciones de E/S en JAVA, la clase Scanner y la clase BufferedReader . La mayoría de los programadores, especialmente los principiantes, usan la clase Scanner para operaciones de E/S y evitan la clase Buffered Reader para E/S debido a la sintaxis larga.
Las operaciones internas de análisis en la clase de escáner hacen que la ejecución del programa sea muy lenta, mientras que la clase de lector almacenado en búfer solo lee la entrada y se realizan más análisis de acuerdo con la necesidad de las operaciones. El uso de la clase Scanner crea un problema TLE para programas Java en la programación competitiva.
Hay muchos artículos que se han publicado sobre cómo evitar TLE en Java, es decir, «Cómo deshacerse del problema de TLE de Java» y ¿Cómo funciona un juez en línea y cómo evitar el problema de límite de tiempo excedido? etc. En pocas palabras, todos los artículos sugieren usar la clase Buffered Reader en lugar de la clase Scanner para las operaciones de E/S.
Java
import java.io.*; import java.util.*; class GFG { public static void main(String[] args) throws NumberFormatException, IOException { // Reading the input and performing internal parsing Scanner scan = new Scanner(System.in); int n = scan.nextInt(); // Reading the input as a Stream Using InputStreamReader BufferedReader Bd = new BufferedReader(new InputStreamReader(System.in)); // converting the String into int datatype int m = Integer.parseInt(Bd.readLine()); } }
Lea más sobre este tema en el artículo ¿Cómo crear fragmentos de Java en VSCode para programación competitiva? y si desea saber cómo disminuir la velocidad de ejecución para el lenguaje Java, consulte el artículo E/S rápida en Java en programación competitiva .
El lenguaje C++ también es rápido porque está muy cerca de la máquina y registra. Esta es la razón por la que C++ también se usa en circuitos integrados en lugar de Java.
2 . Proceso de compilación y ejecución
Los lenguajes de programación se pueden diferenciar en función del proceso de ejecución y compilación de su programa. Algunos idiomas son idiomas interpretados, lo que significa que el intérprete verifica la sintaxis de un idioma interpretado en particular, como Python, línea por línea.
Los lenguajes compilados convierten directamente los programas en código de máquina. Como resultado, estos idiomas son mucho más rápidos que el lenguaje de interpretación. Un intérprete tarda muy poco tiempo en analizar el código fuente. Sin embargo, el tiempo total para ejecutar el proceso es mucho más lento. Esto hace que la ejecución del lenguaje de programación interpretado sea muy lenta en comparación con lenguajes compilados como C o C++. Es por eso que Python es más lento que C++ y Java.
Java no es un lenguaje compilado ni un lenguaje interpretado. Se encuentra en el medio. Java es un lenguaje independiente de la plataforma, lo que lo hace muy popular entre todos los lenguajes de programación. El código Byte lo convierte en un lenguaje independiente de la plataforma. Esta es la ventaja de Java.
Hace que la ejecución de los programas sea más lenta que el programa C++ porque no hay operaciones intermedias que se produzcan para la ejecución y compilación como Java en C++. El motivo de la ejecución lenta del programa es que hay una gran sobrecarga para iniciar el código Java si la máquina virtual no se está ejecutando.
Proceso de compilación y ejecución del programa JAVA:
3. Consumo de memoria
El consumo de memoria de los programas Java es mayor que el del programa C++. (Consulte los programas anteriores de Java y C++).
Todos sabemos que el propio Java gestiona la memoria y no necesita la intervención explícita del programador. El recolector de elementos no utilizados se asegura de que el espacio no utilizado se limpie y la memoria se pueda liberar cuando no se necesite. Entonces, el recolector de basura adicional toma memoria adicional para rastrear todo el consumo de memoria del programa java.
Es beneficioso para el programador de Java no ocuparse de la gestión de la memoria. La JVM y el recolector de elementos no utilizados lo realizan automáticamente, pero el recolector de elementos no utilizados no está presente en C++. Existe la posibilidad de pérdida de memoria, pero hace que los programas de C++ sean muy ligeros.
Por lo tanto, el consumo de memoria de los programas C++ es muy inferior al de los programas Java. Como resultado , ayuda en la rápida ejecución de los programas C++.
“Si tu arma está afilada, tus posibilidades de ganar el juego aumentan”
Podemos elegir cualquier idioma para la programación competitiva, pero primero tenemos que aclarar todos sus temas fundamentales y cómo funciona un idioma en particular que será muy beneficioso para los principiantes.
Publicación traducida automáticamente
Artículo escrito por zack_aayush y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA