¿Necesito tener el conocimiento de las estructuras de datos y el algoritmo, antes de comenzar a practicar en spoj, codchef, topcoder, etc.? Sé un poco de C ++.

Como no ha proporcionado muchos detalles, responderé la pregunta de manera genérica.

Sí, necesita tener un conocimiento básico de estructuras de datos y algoritmos para participar en SPOJ, CodeChef y TopCoder. Este es el por qué:

C ++ o cualquier otro lenguaje es una herramienta para expresar su lógica y todos los detalles están en las estructuras de datos y los algoritmos que elija. Por ejemplo, debe saber la diferencia en una pila, cola, lista vinculada para operaciones de lectura / escritura / clasificación / actualización y, de manera similar, cuando debe realizar una BFS (Breadth-First-Search) o DFS (Depth-First-Search) en un árbol. Con tal conocimiento, puede programar su lógica en C ++.

He programado en C, C ++, Java, Ruby y un poco de Javascript. En mi experiencia, siempre he sentido que un idioma hace una cosa mejor que el otro, pero luego un idioma solo se reduce al medio en el que se está comunicando con la máquina. Sin divagar más, sí, debe tener una comprensión bastante buena de las estructuras de datos y algoritmos.

Aquí hay un enlace para comenzar: Stanford CS Ed Library

Hay suficiente teoría para comenzar y también tiene problemas que puede practicar en Linked List and Trees. Feliz codificación !!!

Actualizar:
Es bueno saber que quieres participar en SPOJ y TopCoder tan temprano. Te aconsejo que comiences con cosas simples primero y luego escales lentamente la montaña. Comience a programar pilas, colas, listas vinculadas, árboles, gráficos en el orden que he mencionado y también resuelva las preguntas que los rodean. El enlace en la respuesta debería ayudarlo a comenzar bien.
Solo sepa que debe cubrir bien su terreno, es decir, tener un conocimiento profundo de las estructuras de datos y algoritmos subyacentes antes de comenzar a participar.

Algunos problemas en este sitio no requieren ningún conocimiento de la estructura de datos y el algoritmo, como algunos problemas matemáticos (como encontrar el máximo divisor común), pero hay muchos problemas matemáticos que requieren un conocimiento profundo del algoritmo gráfico y la programación dinámica. Y para resolver muchos problemas necesita aprender el algoritmo, Análisis de algoritmos (analice qué tan rápido o lento funcionará en entradas pequeñas y grandes), implementación (cómo usarlo en cierto tipo de problema) Hay muchas más cosas que debe hacer:

  • Se requiere que tenga al menos el conocimiento de matriz, lista, clase, estructura,

cómo usarlos cuándo usarlos, por ejemplo, si desea almacenar 10 variables enteras, qué hará para crear 10 variables enteras de nombres diferentes, y si desea almacenar 1 millón de variables, tomará varias horas crearlas, por lo que en lugar de eso, podemos usar una matriz y, si no sabemos la cantidad, podemos usar la lista.

  • Lea un buen libro como Introducción a los algoritmos para conocer el uso de la cola de la pila y cómo implementarlo usando una matriz o una lista. Implemente diferentes tipos de algoritmos de clasificación, compare su rendimiento en términos de memoria y tiempo.
  • Lo más importante es que debe aprender a usar la biblioteca de lenguajes de programación como Standard Template Library en C ++, Java Class Library en java. Esto le ayudará a ahorrar tiempo cuando resuelva un problema. Ejemplo: hay funciones como ordenar , ayuda usted al organizar los elementos en orden creciente o decreciente, SET, MAP, Vector, Pair, Deque, etc. Puede usar la biblioteca predefinida o puede crear su propia biblioteca para no tener que escribir cada vez que el problema necesite este tipo de método.