¿Debo leer matemáticas y algoritmos discretos primero antes de comenzar la programación competitiva?

No necesita dominar las matemáticas discretas explícitamente. Puede comenzar a resolver problemas relacionados con las matemáticas y aprender haciendo práctica y aprendiendo de editoriales.

Hay pocos temas matemáticos importantes en la programación competitiva que uno puede dominar:

  • Módulo aritmético, módulo inverso
  • Temas especiales, resolución de series
  • Coeficientes binomiales
  • Thm de Fermat y Wilson
  • Lucas Thm
  • Tamices
  • Matriz de exponenciación
  • Probabilidad y expectativa, el rastro de Bernoulli
  • Problemas relacionados con el casillero, problema con el colector de cupones, inclusión-exclusión
  • MCD, LCM
  • Resto chino Thm
  • Totient
  • Ecuaciones lineales de diofantinas
  • Caminos hamiltonianos y eulerianos

son los temas más ampliamente difundidos en matemáticas.

En caso de que esté interesado en aprender estos temas, nosotros en Coding Blocks hemos lanzado este Ultimate Competitive Programming Bootcamp con más de 75 conferencias en video y 10 sesiones en vivo que se extienden en un lapso de 2 a 3 meses. Todos estos temas de matemáticas y temas de teoría de números están cubiertos en la primera semana del Bootcamp. Los temas más avanzados como DP, Gráficos, Árboles de segmentos, Lazy Prop, Fenwick Tree, DP con Bitmasks se cubren en las semanas siguientes, seguidos de preguntas prácticas sobre Spoj, Codechef, Hackerblocks, Codeforces y más.

Puede registrarse para el campo de entrenamiento aquí: programación competitiva en línea con descuento anticipado también. Este campamento comienza pronto a partir del 30 de septiembre.

Nota: el idioma seguido en el bootcamp será Hinglish .

Saludos

Prateek Narang

Mentor para Ultimate Competitive Programming Bootcamp

Gracias por A2A, Shashikant Prasad

No. Yo no sugeriría eso. Uno puede saltar a la programación competitiva en cualquier momento siempre que conozca al menos un lenguaje de programación lo suficientemente bueno como para resolver pequeños problemas y, por supuesto, debe disfrutar de la codificación para hacer una programación competitiva. Porque la programación competitiva también mejora nuestras habilidades de lenguaje de programación.

Ir por libro primero llevaría mucho tiempo. Puede hacerlo mientras realiza la programación competitiva en sí. Uno de los mejores libros de matemática discreta está escrito por el autor llamado “Donald Knuth”. Él dice que uno puede hacer doctorado en cada problema dado como ejercicio en su libro. Supongo que eso es suficiente para decir qué tan profundo es el tema.

Ahora, para la programación competitiva, las porciones que quizás quieras aprender se basan principalmente en algoritmos gráficos y combinatoria. Para eso, en lugar de profundizar en el libro, puede comenzar directamente a aprender algunos de los algoritmos más utilizados en Wikipedia o pueden ser geeksforgeeks. Puedes aprender mientras practicas.

Otra opción es enviar 1 o 2 horas al día para reservar y aprender los temas más importantes primero y tiempo de descanso para la programación competitiva. Porque la práctica es más necesaria que simplemente conocer la teoría en caso de programación competitiva.

Piense en los problemas de programación competitiva como un complemento de los problemas al final de los capítulos de sus libros de texto. Encuentre una fuente de problemas de PC que se clasifique por tema y dificultad. (¿Dónde puedo encontrar una lista categorizada de problemas de programación competitivos?). Lea sobre un tema, luego comience a resolver problemas fáciles relacionados con ese tema. Cuando los problemas se vuelven demasiado fáciles, pasa a los más difíciles. Use sus libros para aprender lo que necesita para resolver problemas más difíciles. Siga yendo y viniendo entre los libros y el juez en línea. Los libros le brindan los conocimientos básicos, y el OJ le brinda los comentarios que necesita para asegurarse de que comprende lo que está aprendiendo.

Leer libros de texto te ayudará a saber qué características existen y qué puedes hacer. Cuando aprende por prueba y error, a menudo pierde una forma más fácil de hacer las cosas.

Leer del libro de texto y luego usar de inmediato el conocimiento adquirido para hacer algún hackeo y construir algunas cosas es probablemente la mejor manera. Aprenderás un concepto teórica y prácticamente.

Sin embargo, para la programación competitiva no hay realmente un requisito previo importante. Es mejor comenzar una programación competitiva de inmediato y simplemente aprender un nuevo tema cuando sea necesario. Esa es realmente la forma más efectiva. Retrasar la programación competitiva para aprender matemáticas discretas me parece una dilación. Ya llevas puesto un chaleco salvavidas. Así que sumérgete lo antes posible.

Todo lo mejor 🙂

Gracias por el A2A.

Totalmente de acuerdo con Ashish Kedia. En lugar de leer los libros de texto, esperar para completar las lecciones y luego sumergirse en la programación competitiva, es mejor si practicas ambos lado a lado.

Participe en un desafío de programación, verifique si se puede resolver fácilmente relacionándolo con algún problema matemático, busque la solución a sus problemas matemáticos y listo.

Cuanto antes comience a participar, mejores serán sus posibilidades de romper la competencia de programación.

Si está comenzando a aprender a codificar, entonces diría que no necesita aprender sobre algoritmos ahora. Comience simple.
No hay una distinción clara, donde ingresas a la programación competitiva. Ese pequeño tipo rápido que escribió será útil en su próxima pregunta de programación competitiva.
Para comenzar una programación competitiva, definitivamente necesitarías aprender algunos algoritmos. El conocimiento sobre la teoría de grafos, la teoría de números y otros temas matemáticos discretos ayudaría, pero no es necesario comenzar. Puede recogerlos una vez que se sienta cómodo manejando problemas fáciles. Pero recuerde, solo aprender algoritmos no sirve de nada, a menos que comience a codificarlos y resuelva problemas.

A2A El enfoque de aprender cualquier idioma es practicar el uso de los idiomas. Como las matemáticas se desarrollan, debes dominar las matemáticas resolviendo problemas. Aprendes que los algoritmos están escribiendo programas que los usaron.

De alguna manera tienes el proceso inverso. La programación competitiva supone que está familiarizado con los algoritmos y las matemáticas que los acompañan. Aprendes esto aprendiendo primero el lenguaje al programarlo realmente. Luego, aprendiendo los algoritmos que requieren Matemática Discreta. Esto generalmente abarca cursos que requieren programación, no solo leer. En Stanford, la programación está cubierta en CS 106A, 106B y CS 107 y la teoría está cubierta en CS 103, 109 y 161, ver Autoestudio para los cursos de la Fundación MSCS de Stanford. por J. Lee Anthony sobre Cómo ingresar a la Universidad de su elección.

En pocas palabras: un programa no es más que una prueba ejecutada por una computadora. La programación competitiva es exactamente eso, implementar programas usando algoritmos.

No soy un programador calificado y he estado haciendo CP solo desde los últimos cuatro a cinco meses y en el segundo año ahora con solo cien resueltos. Todo lo que quiero decirte es que no hay necesidad de hacer un curso de matemáticas discretas para comenzar cp. Intenta resolver un problema y en el proceso de resolverlo, lee cosas y esta es la mejor manera de aprender de manera efectiva. Una vez que encuentre un problema relacionado con conjuntos y todo o digamos algún problema de teoría de números, comience a leer cosas de los recursos en línea. Una vez que hayas solucionado un buen problema, comienzas a sentirte mejor y ahora definitivamente puedes tomar un curso discreto junto con tu cp. Aprender e implementar. Leer y no usar es inútil. Uno de mis amigos mayores me dijo “Amigo, cp es como el pan y lo discreto es como la mantequilla “.

El mejor enfoque es mezclar leer y hacer. En mi caso, leí el libro CLR (ahora CLRS) mientras resolvía viejos problemas de la Olimpiada y hacía algunos concursos de USACO. Pero siempre debe escribir un código, leer por sí solo no lo llevará al nivel que necesita para ser competitivo.